2011-02-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 54524 - Allow JSObject to fully utilize cell's capacity for inline storage.

        Currently JSObject is both directly instantiated for regular JS objects, and
        derived to implement subtypes. A consequence of this is that we need to ensure
        that sufficient space from the cell is left unused and available for any data
        members that will be introduced by subclasses of JSObject. By restructuring
        the internal storage array out of JSObject we can increase the size in the
        internal storage for regular objects.

        Add classes JSFinalObject and JSNonFinalObject. JSNonFinalObject retains as
        much additional capacity as is currently available to allow for data members
        in subclasses. JSFinalObject utilizes all available space for internal storage,
        and only allows construction through JSFinalObject::create().

        * bindings/js/JSDOMWindowShell.h:
            Update JSObject -> JSNonFinalObject.

2011-02-16  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        REGRESSION: Use after free in WebCore::RenderCounter::destroyCounterNode
        https://bugs.webkit.org/show_bug.cgi?id=54478

        Test: fast/css/counters/render-tree-reorg-crash.html

        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        Fixed typo. The code was still walking sometimes the renderer tree
        instead of the element tree as intended.

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

        Reviewed by Jeremy Orlow.

        IndexedDB: Inject auto increment keys via key path on insertion
        https://bugs.webkit.org/show_bug.cgi?id=54457

        Inject auto increment keys via key path for object stores using key
        path and auto increment.

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::LocalContext::getNthValueOnKeyPath):
        (WebCore::createIDBKeyFromSerializedValueAndKeyPath):
        (WebCore::injectIDBKeyIntoSerializedValue):
        * bindings/v8/IDBBindingUtilities.h:
        * platform/chromium/PlatformBridge.h:
        * storage/IDBKeyPathBackendImpl.cpp:
        (IDBKeyPathBackendImpl::injectIDBKeyIntoSerializedValue):
        * storage/IDBKeyPathBackendImpl.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::injectKeyIntoKeyPath):
        (WebCore::IDBObjectStoreBackendImpl::selectKeyForPut):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/chromium/IDBKeyPathBackendImpl.cpp:
        (WebCore::IDBKeyPathBackendImpl::injectIDBKeyIntoSerializedValue):

2011-02-16  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] Add support for layoutTestController.setWillSendRequestClearHeader
        https://bugs.webkit.org/show_bug.cgi?id=54537

        Headers removed from the SoupMessage should be also removed from
        the ResourceRequest when updating the latter from the former.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage):

2011-02-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: split all the functions of Inspector backend API by domain.
        https://bugs.webkit.org/show_bug.cgi?id=54558

        We have a number of functions from different domains in single instance of InspectorBackend.
        It'd be better to split the functions by their domains.
        As example 'evaluate' will be moved from InspectorBackend to RuntimeAgent container.

        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.evaluateInTargetWindow):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype.restoreDOMBreakpoints):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.DOMBreakpoint.prototype._enable):
        (WebInspector.DOMBreakpoint.prototype._disable):
        (WebInspector.EventListenerBreakpoint.prototype._enable):
        (WebInspector.EventListenerBreakpoint.prototype._disable):
        (WebInspector.XHRBreakpoint.prototype._enable):
        (WebInspector.XHRBreakpoint.prototype._disable):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getStylesAsync):
        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
        (WebInspector.CSSStyleModel.prototype.getInlineStyleAsync):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet.createForId):
        (WebInspector.CSSStyleSheet.prototype.setText):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.requestClearMessages):
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent.itemAction):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._deleteCookie):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.getChildNodesAsync):
        (WebInspector.DOMAgent.prototype.setAttributeAsync):
        (WebInspector.DOMAgent.prototype.removeAttributeAsync):
        (WebInspector.DOMAgent.prototype.setTextNodeValueAsync):
        (WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync):
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.EventListeners.getEventListenersForNodeAsync):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage.prototype.getEntries):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.getTableNames):
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.enableDebugger):
        (WebInspector.DebuggerModel.prototype.disableDebugger):
        (WebInspector.DebuggerModel.prototype.continueToLocation):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpointBySourceId):
        (WebInspector.DebuggerModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.setDocument):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype.handleCopyEvent):
        (WebInspector.ElementsPanel.prototype.setSearchingForNode):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
        ():
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionWatchSidebarPane.prototype.setExpression):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onAddRequestHeaders):
        (WebInspector.ExtensionServer.prototype._onReload):
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotProfileType.prototype.buttonClicked):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager):
        (WebInspector.NetworkManager.prototype.reset):
        (WebInspector.NetworkManager.prototype.requestContent):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._openInNewTab):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView):
        (WebInspector.CPUProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._clearProfiles):
        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):
        (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._toggleProfiling):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.resolveNode):
        (WebInspector.RemoteObject.prototype.getProperties):
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.pushNodeToFrontend):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameTreeElement.prototype.onselect):
        (WebInspector.FrameTreeElement.prototype.set hovered):
        (WebInspector.FrameResourceTreeElement.prototype.ondblclick):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.requestSource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions):
        (WebInspector.ScriptsPanel.prototype._togglePause):
        (WebInspector.ScriptsPanel.prototype._stepOverClicked):
        (WebInspector.ScriptsPanel.prototype._stepIntoClicked):
        (WebInspector.ScriptsPanel.prototype._stepOutClicked):
        (WebInspector.ScriptsPanel.prototype.toggleBreakpointsClicked):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._hidePopup):
        * inspector/front-end/TestController.js:
        (WebInspector.TestController.prototype.notifyDone):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkersSidebarPane.prototype.setInstrumentation):
        * inspector/front-end/inspector.js:
        (WebInspector.highlightDOMNode):
        (WebInspector.doLoadedDone):
        (WebInspector.openResource):
        (WebInspector.documentKeyDown):

2011-02-16  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] events missing when a document is (re)loaded
        https://bugs.webkit.org/show_bug.cgi?id=25831

        Make sure webArea returns a proper name and that a signal
        'state-change::defunct' is emitted when detaching the wrapper.

        Test: platform/gtk/accessibility/document-reload-events.html

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_name): Returns the current document's title
        as fallback mechanism for webArea objects.
        (webkit_accessible_detach): Emit 'state-change::defunct' function
        as soon as the wrapper is detached from the related core object.

2011-02-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Pixel tests differences on 10.6.6 32bit vs. 64bit
        https://bugs.webkit.org/show_bug.cgi?id=54474

        When generating a SVG pixel test baseline with a vanilla 10.6.6 installation on a 32bit machine (Core Duo MBP)
        and comparing the run with a software-identical 64bit machine (Core 2 Duo MBP), there are about 250 differences.

        These fall in two categories:
        a) 1px differences in text AA, or when drawing circles (all _below_ a tolerance of 0.01). Only visible in the subtracted difference image.
           The reason is probably CGFloat being typedefed to double on 64bit machines, and float on 32bit machines.
           AffineTransform stores doubles, so on 32bit machines we loose precision from AffineTransform -> CGAffineTransform.

        b) Failures >0.1% (text origin/scale is slightly different, user-visible).
           Caused by several sources of numerical instabilities within the SVG rendering code.

           -> SVGPreserveAspectRatio::getCTM() computes an AffineTransform using doubles as input parameters, but floats are passed (like everywhere else in SVG).
              This method is used to compute the viewBox AffineTransform, that affects the rendering of every content in the document. RenderSVGRoot concats
              this transformation matrix to the GraphicsContext CTM, resulting in a source of numerical imprecision.

           -> SVGInlineTextBox::paintTextWithShadows() calculates a scaling factor for text, to scale up the specified font size, to the actual on-screen size.
              SVGInlineTextBox uses the scaled Font object, to draw in an unscaled context, that gets scaled up again afterwards.
              context->scale(1 / scalingFactor); scaledFont.drawText(); context->scale(scalingFactor);

              To remove the scale from the current GraphicsContext CTM, "context->scale(FloatSize(1 / scalingFactor, ...)" is used. As AffineTransform stores
              doubles internally, it's likely that "context->scale(FloatSize(1 / ctm.a(), .." doesn't give you a matrix with a=1, but something close to 1.
              Using "context->concatCTM(AffineTransform().scale(1 / ctm.a(), ..." could be used as workaround, to preserve double precision.
              Fixing that brings us down to just a few pixel tests that differ between 32 & 64bit. There is still numerical imprecision, as floating-point
              number representations aren't always precise. Unfortunately CoreGraphics doesn't provide a public way to just set a CTM, it only allows to concat them.
              Fortunately CGContextSetCTM() is available, as private method, that allows me to switch the context CTM to any arbitary CGAffineTransform.

              -> Add GraphicsContext::setCTM(const AffineTransform&) and implement it for all platforms (each explicitely exposes a 'setCTM' concept, except CG)
                 Use CGContextSetCTM() for CG, which appears to be present since at least 10.4, Cairo is using it for the same purpose since some years!

              -> Instead of scaling the GraphicsContext before drawing text, grab the current CTM using context->getCTM(), scale it by '1 / scalingFactor'
                 normalize the transform (look for values close to 0/1 using float precision, and round!), and assign it using context->setCTM(normalizedTransform).
                 After drawing, just switch back to the preserved original CTM, both operations need GraphicsContext::setCTM.
                 This fixes all pixel test differences between 32/64 bit machines that fall into category b).
                 The use of GraphicsContext::setCTM() allows to switch between arbitary context transformations _without_ inducing accumulated rounding imprecision.

        These combined patches fix the pixel test baseline changes.

        Updated existing Snow Leopard pixel test baseline with a 32bit machine, passes here with tolerance 0.
        The 64bit machine passes the baseline with tolerance 0.01.

        * platform/graphics/GraphicsContext.h: Add setCTM(const AffineTransform&) method.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setCTM): Implement setCTM.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::setCTM): Ditto.
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setCTM): Ditto.
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::setCTM): Ditto.
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::setCTM): Ditto.
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::setCTM): Ditto.
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::setCTM): Ditto.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setCTM): Ditto.
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setCTM): Ditto.
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::setCTM): Ditto.
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        (WebCore::GraphicsContextPlatformPrivate::setCTM): Ditto.
        (WebCore::GraphicsContext::setCTM):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::setCTM): Ditto.
        * rendering/svg/SVGInlineTextBox.cpp: Use setCTM() to switch to a scale-free AffineTransform, and also to switch back to the original CTM after rendering text.
        (WebCore::normalizeTransform):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        (WebCore::SVGInlineTextBox::paintTextWithShadows):
        * svg/SVGPreserveAspectRatio.cpp: s/double/float/.
        (WebCore::SVGPreserveAspectRatio::getCTM):
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGSVGElement.cpp: Simplify viewport() code, avoid using doubles.
        (WebCore::SVGSVGElement::viewport):

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

        Reviewed by Dirk Schulze.

        SVGAnimateElement incorrectly uses Color::nameForRenderTreeAsText()
        https://bugs.webkit.org/show_bug.cgi?id=54547

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::applyResultsToTarget):

2011-02-14  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Landing detailed heap snapshots, part 3.
        https://bugs.webkit.org/show_bug.cgi?id=54385

        Provide node classes for data grid views:
         - summary -- list of objects by constuctor;
         - diff -- summaries btw two snapshots;
         - explorer -- explore heap graph;
         - dominators tree;

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DetailedHeapshotGridNodes.js: Added.
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotFilteredOrderedIterator):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.incInstancesCount):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.get instancesCount):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.next):
        (WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.resetInstancesCount):
        (WebInspector.HeapSnapshotEdgesProvider):
        (WebInspector.HeapSnapshotNodesProvider):
        * inspector/front-end/PleaseWaitMessage.js:
        (WebInspector.PleaseWaitMessage.prototype.get instance):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

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

        Unreviewed, rolling out r78655.
        http://trac.webkit.org/changeset/78655
        https://bugs.webkit.org/show_bug.cgi?id=54543

        Causes too many test failures in chromium (Requested by
        mnaganov on #webkit).

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * storage/IDBRequest.cpp:
        * storage/IDBRequest.h:

2011-02-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move Database and DOMStorage related things from InspectorAgent to the corresponding agents.

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

        Some set of instrumentation calls should work even if we have no InspectorFrontend instance and corresponding agents.
        At the moment we are using InspectorAgent instance for such calls.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::pushDataCollectedOffline):
        (WebCore::InspectorAgent::didCommitLoad):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorOfflineResourcesBase::~InspectorOfflineResourcesBase):
        (WebCore::InspectorOfflineResourcesBase::InspectorOfflineResourcesBase):
        (WebCore::InspectorAgent::databaseAgentResources):
        (WebCore::InspectorAgent::domStorageAgentResources):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::Resources::clear):
        (WebCore::InspectorDOMStorageAgent::Resources::pushDataCollectedOffline):
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::createOfflineStorage):
        (WebCore::InspectorDOMStorageAgent::selectDOMStorage):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageResourceForId):
        (WebCore::InspectorDOMStorageAgent::didUseDOMStorage):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore::InspectorDOMStorageAgent::create):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::Resources::clear):
        (WebCore::InspectorDatabaseAgent::Resources::pushDataCollectedOffline):
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::createOfflineStorage):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        (WebCore::InspectorDatabaseAgent::selectDatabase):
        * inspector/InspectorDatabaseAgent.h:
        (WebCore::InspectorDatabaseAgent::create):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::didUseDOMStorageImpl):

2011-02-15  John Sullivan  <sullivan@apple.com>

        Reviewed by Antti Koivisto.

        Dan Bernstein came up with this fix while we debugged it. I just typed.

        https://bugs.webkit.org/show_bug.cgi?id=54532
        On platforms without platformWidgets, going Back to a scrolled page 
        draws at the top-left before drawing at the restored scroll position
        
        <rdar://problem/8998838>
        
        * page/FrameView.cpp:
        (WebCore::FrameView::performPostLayoutTasks):
        Don't send the didFirstLayout and didFirstVisuallyNonEmptyLayout callbacks
        for nested layouts. Doing so was causing ScrollView::setScrollPosition()
        to short-circuit.

2011-02-15  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        [Qt][V8] Buildfix. Add missing USE(JSC) guard.

        * plugins/qt/PluginViewQt.cpp:

2011-02-15  Ami Fischman  <fischman@chromium.org>

        Reviewed by David Levin.

        Remove the artificial -32px shift for media controls in mediaDocuments
        so that they overlap the canvas as they do in non-mediaDocuments.
        This also fixes test_shell failing to update the media slider (see
        linked crbug below).

        https://bugs.webkit.org/show_bug.cgi?id=27798
        http://crbug.com/72623

        Test: media/video-controls-in-media-document.html
        Added a render test that asserts that the controls show up in the
        expected spot (0,208) instead of below the canvas (0,240).

        * css/mediaControlsChromium.css:

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

        Reviewed by Darin Adler.

        Extract a function to process ancestor and their sibling nodes from processContents
        https://bugs.webkit.org/show_bug.cgi?id=54425

        Extracted processAncestorsAndTheirSiblings.

        * dom/Range.cpp:
        (WebCore::Range::processContents): Calls processContents.
        (WebCore::Range::processAncestorsAndTheirSiblings): Extracted from processContents.
        * dom/Range.h:

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

        Reviewed by Darin Fisher.

        [Chromium] Rendering error of spin buttons on layers
        https://bugs.webkit.org/show_bug.cgi?id=54427

        Test: fast/forms/input-appearance-spinbutton-layer.html

        * rendering/RenderThemeChromiumWin.cpp:
          Add checks for multiple ThemePainter instances.
        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton):
          Avoid to create multiple ThemePainter instances.

2011-02-15  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Fix race condition in JavaScriptAudioNode
        https://bugs.webkit.org/show_bug.cgi?id=54518

        No new tests since audio API is not yet implemented.

        * webaudio/JavaScriptAudioNode.cpp:
        (WebCore::JavaScriptAudioNode::process):

2011-02-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Throwing in an IndexedDB error or success event should lead to the transaction aborting
        https://bugs.webkit.org/show_bug.cgi?id=54249

        When an exception is thrown but not handled  within an IDBRequests success/error event,
        we should abort the transaction.

        Test: storage/indexeddb/exception-in-event-aborts.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::uncaughtExceptionInEventHandler):
        * dom/EventTarget.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * storage/IDBRequest.h:

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

        Reviewed by Darin Adler.

        To determine image properties, CG allocates memory which isn't included in CachedImage's decoded size
        https://bugs.webkit.org/show_bug.cgi?id=53281

        When determining properties of an image (such as its size), CG ends up
        decoding part of the image.  This patch adds accounting for this extra
        decoded size so a cache prune can clean up the allocations.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::destroyMetadataAndNotify):
        Clearing the source destroys the extra decoded data.  Report this
        change in decoded size to the image observer.
        (WebCore::BitmapImage::cacheFrame):
        The first decoded frame subsumes the data decoded when determining
        image properties, so we subtract it out here.
        (WebCore::BitmapImage::didDecodeProperties):
        Reports the extra decoded size to the image's observer.
        (WebCore::BitmapImage::size):
        (WebCore::BitmapImage::currentFrameSize):
        (WebCore::BitmapImage::getHotSpot):
        (WebCore::BitmapImage::frameCount):
        (WebCore::BitmapImage::isSizeAvailable):
        (WebCore::BitmapImage::repetitionCount):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::bytesDecodedToDetermineProperties):
        The default value is 0 to match the current behavior on other
        platforms.
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::bytesDecodedToDetermineProperties):
        Add a constant value for bytesDecodedToDetermineProperties(), measured
        by tracing malloc/calloc calls while asking an image source for its
        properties.

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

        Reviewed by Alexey Proskuryakov.

        requestAnimationFrame callbacks should not fire within a modal dialog
        https://bugs.webkit.org/show_bug.cgi?id=53188

        requestAnimationFrame callbacks shouldn't fire while a modal dialog is up (like a window.alert()).
        This matches Firefox and other async APIs.  This patch moves the callback servicing into its own
        controller class which receives notifications on suspend/resume.

        Test: fast/animation/request-animation-frame-during-modal.html

        * WebCore.gypi:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setJavaScriptPaused):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::suspendScriptedAnimationControllerCallbacks):
        (WebCore::Document::resumeScriptedAnimationControllerCallbacks):
        (WebCore::Document::webkitRequestAnimationFrame):
        (WebCore::Document::webkitCancelRequestAnimationFrame):
        (WebCore::Document::serviceScriptedAnimations):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::suspendScriptedAnimationControllerCallbacks):
        (WebCore::ScriptExecutionContext::resumeScriptedAnimationControllerCallbacks):
        * dom/ScriptedAnimationController.cpp: Added.
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::suspend):
        (WebCore::ScriptedAnimationController::resume):
        (WebCore::ScriptedAnimationController::registerCallback):
        (WebCore::ScriptedAnimationController::cancelCallback):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        * dom/ScriptedAnimationController.h: Added.
        (WebCore::ScriptedAnimationController::create):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2011-02-14  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Add initial support for per-origin quotas to IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=54421

        Add support for non-persistent per-origin quotas. If one is
        specified, it overrides the default.

        No tests as this is only exposed via the Chromium webkit API.

        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        (WebCore::IDBFactoryBackendImpl::setQuota):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:

2011-02-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        XSLT with output method HTML and images crashes in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=54462

        http://trac.webkit.org/changeset/75577 created Document::setContent but
        didn't notice that the code paths combined into Document::setContent
        were subtly different.  In particular, some of the code paths called
        parser->finish() whereas other did not.

        The difference is that an explicit call to parser->finish() is required
        in the case where there is no frame because explicitClose doesn't call
        endIfNotLoadingMainResource if there is no frame.  This patch moves
        that logic inside explicitClose, which is more natural.

        This patch also removes removeAllChildren, which has not effect in this
        situation and should never have been added in the first place.

        Test: fast/parser/xslt-with-html.xml

        * dom/Document.cpp:
        (WebCore::Document::setContent):
        (WebCore::Document::explicitClose):

2011-02-15  Oliver Hunt  <oliver@apple.com>

        Fix EFL build for
        https://bugs.webkit.org/show_bug.cgi?id=54415

        * CMakeLists.txt:

2011-02-15  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/54487> Minor header clean up in RenderLayerBacking.cpp

        Reviewed by Darin Adler.

        * rendering/RenderLayerBacking.cpp: Remove unused
        WebGLRenderingContext.h header, and move GraphicsContext3D.h
        into a #if ENABLE(WEBGL) || ENABLE(ACCELERATED_2D_CANVAS)/#endif
        block.

2011-02-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough and Geoff Garen.

        Refactor handles and weak pointers to become nicer and more automatic
        https://bugs.webkit.org/show_bug.cgi?id=54415

        Update WebCore to use the new Global<> type rather than ProtectedJSValue
        and gc[Un]Protect.  Also update to use new WeakGCPtr APIs, and remove now
        unnecessary destructors.

        * ForwardingHeaders/collector/handles/Global.h: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::JSCallbackData):
        * bindings/js/JSCustomVoidCallback.h:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::forgetDOMNode):
        (WebCore::cacheDOMNodeWrapper):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDataGridDataSource.h:
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::setWrapper):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptCachedFrameData.h:
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptArguments):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createWindowShell):
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::attachDebugger):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptCallback::call):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::ScriptObject):
        * bindings/js/ScriptObject.h:
        * bindings/js/ScriptState.cpp:
        (WebCore::ScriptStateProtectedPtr::ScriptStateProtectedPtr):
        (WebCore::ScriptStateProtectedPtr::get):
        * bindings/js/ScriptState.h:
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::isFunction):
        (WebCore::ScriptValue::deserialize):
        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::hasNoValue):
        * bindings/js/ScriptWrappable.h:
        (WebCore::ScriptWrappable::ScriptWrappable):
        (WebCore::ScriptWrappable::setWrapper):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::~WorkerScriptController):
        (WebCore::WorkerScriptController::initScript):
        (WebCore::WorkerScriptController::evaluate):
        * bindings/js/WorkerScriptController.h:
        (WebCore::WorkerScriptController::workerContextWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_Construct):
        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::Instance):
        (JSC::Bindings::Instance::~Instance):
        (JSC::Bindings::Instance::willDestroyRuntimeObject):
        (JSC::Bindings::Instance::willInvalidateRuntimeObject):
        * bridge/jsc/BridgeJSC.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::invalidate):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::RootObject):
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::globalObject):
        (JSC::Bindings::RootObject::updateGlobalObject):
        * bridge/runtime_root.h:
        * dom/EventListener.h:
        * dom/EventTarget.h:
        (WebCore::EventTarget::markJSEventListeners):
        * xml/XMLHttpRequest.cpp:
        
        Qt bindings courtesy of Csaba Osztrogonác
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeConnectionMethod::call):
        (JSC::Bindings::QtConnectionObject::QtConnectionObject):
        (JSC::Bindings::QtConnectionObject::execute):
        (JSC::Bindings::QtConnectionObject::match):
        * bridge/qt/qt_runtime.h:

2011-02-15  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Autocorrection should respect undo.
        https://bugs.webkit.org/show_bug.cgi?id=52221
        <rdar://problem/8663399>

        Manual test: manual-tests/autocorrection/undo-autocorrection.html

        When user undoes an autocorrection, we need to do four things:
        1. Revert the change in text that has been made by correction.
        2. Revert the selection to pre-correction state so that user can immediately continue typing.
        3. Add appropriate markers to reverted text so that it won't be corrected again and/or shown
           as misspelled.
        4. If applicable, notify spell checking service to record this reversion.

        To achieve these, this patch introduces following changes:
        1. Created SpellingCorrectionCommand so that correction can be undone in similar way as any
           other editing command. SpellingCorrectionCommand is a composition of SetSelectionCommand,
           SpellingCorrectionRecordUndoCommand and ReplaceSelectionCommand.
        2. Created SetSelectionCommand so that undo command can restore selection state.
        3. Added member function recordAutocorrectionResponse() to editor client.

        To improve readability, this patch also consolidates various boolean arguments in SelectionController::setSelection()
        and ReplaceSelectionCommand::ReplaceSelectionCommand(). These boolean arguments have been
        replaced by enum variable.

        * WebCore.exp.in: Updated for changes in Editor and ReplaceSelectionCommand.

        * WebCore.xcodeproj/project.pbxproj: Updated for new source files.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Adopted new signature of ReplaceSelectionCommand::create().

        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment): Ditto.
        (WebCore::Editor::unappliedEditing): Cleaned up trailing whitespace.
        (WebCore::Editor::reappliedEditing): Ditto.
        (WebCore::Editor::selectComposition): Adopted new signature of SelectionController::setSelection().
        (WebCore::Editor::confirmComposition): Ditto.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Rearranged code to reduce the
            level of deeply nested if statement. Adopted SpellingCorrectionCommand.
        (WebCore::Editor::applyCorrectionPanelInfo): Adopted SpellingCorrectionCommand.
        (WebCore::Editor::unappliedSpellCorrection): Function for adding markers to reverted text and
            for notifiying editor client about undone correction.
        (WebCore::Editor::changeSelectionAfterCommand): Adopted new signature of SelectionController::setSelection().
        (WebCore::Editor::respondToChangedSelection): Use SelectionController::SetSelectionOptions
            instead of boolean variables.

        * editing/Editor.h: Added Editor::unappliedSpellCorrection().

        * editing/EditorCommand.cpp:
        (WebCore::executeInsertFragment): Adopted new signature of ReplaceSelectionCommand::create().

        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply): Ditto.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand): Replaced all boolean arguments
            with an enum value.

        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplaceSelectionCommand::create): Ditto.

        * editing/SelectionController.cpp: Adopted new signature of SelectionController::setSelection().
        (WebCore::SelectionController::moveTo):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::respondToNodeModification):
        (WebCore::SelectionController::setBase):
        (WebCore::SelectionController::setExtent):
        (WebCore::SelectionController::setSelectedRange):

        * editing/SelectionController.h:
        (WebCore::SelectionController::setSelection): Replaced all boolean arguments with an enum value.

        * editing/SetSelectionCommand.cpp: Added.
        (WebCore::SetSelectionCommand::SetSelectionCommand):
        (WebCore::SetSelectionCommand::doApply):
        (WebCore::SetSelectionCommand::doUnapply):

        * editing/SetSelectionCommand.h: Added.
        (WebCore::SetSelectionCommand::create):

        * editing/mac/SpellingCorrectionCommand.cpp: Added.
        (WebCore::SpellingCorrectionRecordUndoCommand::create):
        (WebCore::SpellingCorrectionRecordUndoCommand::SpellingCorrectionRecordUndoCommand):
        (WebCore::SpellingCorrectionRecordUndoCommand::doApply):
        (WebCore::SpellingCorrectionRecordUndoCommand::doUnapply):
        (WebCore::SpellingCorrectionCommand::SpellingCorrectionCommand):
        (WebCore::SpellingCorrectionCommand::doApply):

        * editing/mac/SpellingCorrectionCommand.h: Added.
        (WebCore::SpellingCorrectionCommand::create):

        * loader/EmptyClients.h: Updated for the new function declared in EditorClient.
        (WebCore::EmptyEditorClient::recordAutocorrectionResponse):

        * manual-tests/autocorrection/undo-autocorrection.html: Added.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Adopted new signature of ReplaceSelectionCommand::create().

        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag): Ditto.

        * page/EditorClient.h: Added EditorClient::recordAutocorrectionResponse().

2011-02-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Speculative fix for <rdar://problem/8998498> CrashTracer: [USER] 
        8 crashes in WebProcess calling setOverlayScrollerState:forceImmediately:

        My best guess is that this is crashing because 
        willRemoveVerticalScrollbar()/Horizontal was not being called
        properly from the RenderLayer destructor. 
        
        Call willRemoveVerticalScrollbar()/Horizontal from destroyScrollbar()
        so that all current and future scrollbar-destroyers will properly 
        call this function. And only do it for native scrollers.
        (WebCore::RenderLayer::destroyScrollbar):
        (WebCore::RenderListBox::destroyScrollbar):

        For consistency's sake, I also moved didAddVerticalScrollbar()
        /Horizontal to createScrollbar(). Again, only call for native 
        scrollers.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderListBox::createScrollbar):

        These functions no longer call didAdd/willRemove.
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::setHasVerticalScrollbar):
        
        Remove unnecessary ScrollableArea::-prefix
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):

2011-02-15  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Cleanup Some Potential ENABLE(INSPECTOR) Related Building Issues
        https://bugs.webkit.org/show_bug.cgi?id=54048

        * WebCore.exp.in: moved inspector only export into ENABLE(INSPECTOR) block.
        * bindings/js/ScriptHeapSnapshot.h: include no longer needed.

2011-02-15  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.
 
        [chromium] clearRect() is incorrect in accelerated 2D canvas.
        https://bugs.webkit.org/show_bug.cgi?id=54497

        When doing GPU-Canvas2D clearRect() using the fast path (glClear()),
        we were not correctly converting from canvas to screen coordinates. 
        Fixed by inverting the rectangle in Y, and changing
        SharedGraphicsContext3D::scissor to take glScissor-like parameters.

        Covered by fast/canvas/canvas-strokeRect.html.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::clearRect):
        Flip the Y coord of the rectangle passed to scissor().
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::scissor):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        Give scissor() the same param types as GraphicsContext3D::scissor().

2011-02-15  Pratik Solanki  <psolanki@apple.com>

        Move WTF_USE_CFNETWORK to Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=54168

        Reviewed by Darin Adler.

        * config.h: Remove WTF_USE_CFNETWORK.

2011-02-15  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Allow controlling minimum DOMTimer interval on a per-page basis
        https://bugs.webkit.org/show_bug.cgi?id=54312

        Renamed DOMTimer::minTimerInterval and setMinTimerInterval to
        defaultMinTimerInterval and setDefaultMinTimerInterval, made them
        private and exposed them via Settings::defaultMinDOMTimerInterval
        and setDefaultMinDOMTimerInterval. Added new
        Settings::setMinDOMTimerInterval and minDOMTimerInterval.

        The storage for the minimum timer interval currently lives in the
        Page, though this could be moved to the Settings object if
        desired. The accessor methods on the Page are private and exposed
        to Settings by making Settings a friend, so the abstraction
        barrier is clear at the API level.

        Adjusting the interval both upward and downward may cause the fire
        times of the active timers on the page to be adjusted, if they
        would be affected by the clamping value. This is needed to reduce
        latency when bringing a tab to the foreground, in particular if
        the minimum timer interval was decreased from a very high value to
        a very low value.

        A new method, setMinimumTimerInterval, has been added to
        LayoutTestController, implemented in all ports of DumpRenderTree,
        and used in new layout tests.

        Ideally changing the page's minimum timer interval would affect
        dedicated workers, but this is too much to do in an initial patch,
        so a FIXME has been added.

        Tested with:
          - The new layout tests on the WebKit Mac and Chromium (Mac,
            Linux) DRT ports.
          - Hooked up the new API in Chromium and ran some simple manual
            tests.

        Tests: fast/dom/timer-increase-min-interval-and-reset-part-1.html
               fast/dom/timer-increase-min-interval-and-reset-part-2.html
               fast/dom/timer-increase-min-interval.html
               fast/dom/timer-increase-then-decrease-min-interval.html

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::minimumTimerInterval):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::adjustMinimumTimerInterval):
        (WebCore::ScriptExecutionContext::minimumTimerInterval):
        * dom/ScriptExecutionContext.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::fired):
        (WebCore::DOMTimer::adjustMinimumTimerInterval):
        (WebCore::DOMTimer::intervalClampedToMinimum):
        * page/DOMTimer.h:
        (WebCore::DOMTimer::defaultMinTimerInterval):
        (WebCore::DOMTimer::setDefaultMinTimerInterval):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setMinimumTimerInterval):
        (WebCore::Page::minimumTimerInterval):
        * page/Page.h:
        * page/Settings.cpp:
        (WebCore::Settings::setDefaultMinDOMTimerInterval):
        (WebCore::Settings::defaultMinDOMTimerInterval):
        (WebCore::Settings::setMinDOMTimerInterval):
        (WebCore::Settings::minDOMTimerInterval):
        * page/Settings.h:
        * platform/Timer.h:
        (WebCore::TimerBase::augmentFireInterval):
        (WebCore::TimerBase::augmentRepeatInterval):

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

        Reviewed by Beth Dakin.

        Fix scrollbar rendering crash when rendered into a layer
        https://bugs.webkit.org/show_bug.cgi?id=54494

        Remove code added in r78394 which was intended to find out whether
        a scrollbar was being rendered into a compositing layer. r78612 
        obviated the need for this code.

        * page/FrameView.h:
        * platform/ScrollableArea.h:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:

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

        Let Xcode have its way with the project.
        
        * WebCore.xcodeproj/project.pbxproj:

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

        Fix Mac builds that don't use rubber-band scrolling
        by moving m_drawingIntoLayer out of the #ifdef.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):

2011-02-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Freetype] Better map CSS font weight to Fontconfig font weight
        https://bugs.webkit.org/show_bug.cgi?id=54323

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::fontWeightToFontconfigWeight): Added this helper to map between CSS and
        Fontconfig font weights.
        (WebCore::FontCache::createFontPlatformData): Use the new helper instead of just
        deciding between bold and regular.

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

        Reviewed by Sam Weinig.

        Fix scrollbar rendering crash when rendered into a layer
        https://bugs.webkit.org/show_bug.cgi?id=54494
        
        The scroller delegate was failing to return a layer in a case
        where the scroller was still rendering into a GraphicsLayer, because
        even though WebCore had switched out of compositing mode, the
        DrawingAreaImpl was still rendering into its nonCompositedContent
        layer. This happens when the m_exitCompositingTimer timer hasn't fired
        yet.
        
        The fix is to track whether we're drawing into a layer via the
        GraphicsContext, rather than asking about compositing layers.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setIsCALayerContext):
        (WebCore::GraphicsContext::isCALayerContext):
        Getter and setter for the bit that says if we're rendering into a CALayer.

        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        Store a bool for whether this context targets a layer.

        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents): Call setIsCALayerContext(true).
        
        * platform/mac/ScrollAnimatorMac.h:
        (WebCore::ScrollAnimatorMac::setIsDrawingIntoLayer):
        (WebCore::ScrollAnimatorMac::isDrawingIntoLayer):
        New methods to get and set a flag that says when we're
        drawing into a layer, so that the delegate can get at this state.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterDelegate layer]): Use isDrawingIntoLayer()
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac): Init the flag.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::unregisterScrollbar): Whitespace.
        (WebCore::ScrollbarThemeMac::paint): Push the "isDrawingIntoLayer"
        state down onto ScrollAnimatorMac, getting it from the GraphicsContext.

2011-02-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add NPP_GetSitesWithData and NPP_URLRedirectNotify to the NPAPI headers
        https://bugs.webkit.org/show_bug.cgi?id=54481

        We should really sync all headers with the NPAPI repository, but doing that
        lead to build errors so I just added what was needed.

        * bridge/npapi.h:
        Add new functions.

        * bridge/nptypes.h:
        Sync with the official NPAPI repository, adding 64-bit integer types and
        removing a duplicate license header.

        * plugins/npfunctions.h:
        Add new functions.

2011-02-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=54486
        Crashes under CachedResourceLoader::revalidateResource
        
        CachedResourceLoader might get deleted from under one of its methods.
        Try to catch a more informative crash stack.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::setAutoLoadImages):
        (WebCore::CachedResourceLoader::load):
        (WebCore::CachedResourceLoader::loadDone):
        (WebCore::CachedResourceLoader::preload):
        (WebCore::CachedResourceLoader::requestPreload):
        * loader/cache/CachedResourceLoader.h:

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

        Reviewed by Darin Adler.

        Optimize Color::serialized()
        https://bugs.webkit.org/show_bug.cgi?id=54452

        Apply the optimizations from CSSPrimitiveValue::cssText() [CSS_RGBCOLOR]
        to Color::serialized() - build the serialized color strings manually
        instead of using String::format().

        * platform/graphics/Color.cpp:
        (WebCore::appendHexNumber):
        (WebCore::Color::serialized):

2011-02-15  Jarred Nicholls  <jarred@sencha.com>

        Reviewed by Alexey Proskuryakov.

        XMLHttpRequest::abort() doesn't clear response data
        https://bugs.webkit.org/show_bug.cgi?id=54118

        Properly clear all buffer data on abort, so no memory hangs around unnecessarily.

        No new tests because there is no observable effect except for less memory used.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::abort):

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

        Reviewed by Darin Adler.

        Rename Color::name() to Color::nameForRenderTreeAsText()
        https://bugs.webkit.org/show_bug.cgi?id=54464

        Color::name() returns the color as either #RRGGBB or #RRGGBBAA.
        Since the latter is not a valid CSS color, it can't be re-parsed
        by WebKit, and should only be used in DRT dumps.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::extractTextStyles):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * platform/graphics/Color.cpp:
        (WebCore::Color::nameForRenderTreeAsText):
        * platform/graphics/Color.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::externalRepresentation):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::writeRenderSVGTextBox):
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::cssText):

2011-02-15  Andras Becsi  <abecsi@webkit.org>

        Rubber-stamped by Andreas Kling.

        [Qt] Typo fix.

        No new tests needed.

        * WebCore.pro: add missing ASCII to header name.

2011-02-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: test whether inspector gets populated with databases and storages upon opening.
        https://bugs.webkit.org/show_bug.cgi?id=54469

        Tests: http/tests/inspector-enabled/database-open.html
               http/tests/inspector-enabled/dom-storage-open.html

        * inspector/front-end/DOMStorage.js:
        * inspector/front-end/Database.js:
        (WebInspector.DatabaseDispatcher.prototype.addDatabase):

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

        Reviewed by Darin Adler.

        Share the helper functions used by Latin-1 and UTF-8 text codecs
        https://bugs.webkit.org/show_bug.cgi?id=54446

        Move MachineWord, UCharByteFiller and the other helper functions
        into TextCodecASCIIFastPath.h where they can be used by both
        TextCodecUTF8 and TextCodecLatin1.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/TextCodecASCIIFastPath.h: Added.
        (WebCore::isAllASCII):
        (WebCore::copyASCIIMachineWord):
        (WebCore::isAlignedToMachineWord):
        (WebCore::alignToMachineWord):
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::decode):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::decode):

2011-02-15  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Kent Tamura.

        Code style issue in WebCore/dom/InputElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=54428

        Remove 2 extra spaces in InputElement.cpp line 221.

        Code style fix, No new tests.

        * dom/InputElement.cpp:
        (WebCore::InputElement::handleBeforeTextInsertedEvent):

2011-02-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] Video player sets system volume to 100%
        https://bugs.webkit.org/show_bug.cgi?id=54140

        Don't explicitely set volume at startup and use the
        GstStreamVolume interface with cubic volume scale when
        updating/retrieving the volume value. This gives a much better
        user-experience.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2011-02-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sketch script-src for Content Security Policy
        https://bugs.webkit.org/show_bug.cgi?id=54381

        This patch provides a sketch of the script-src directive.  We still do
        not parse the value of the directive, and the wiring into the rest of
        WebCore is incorrect, but those are things we can fix in future
        patches.  For the momemnt, this patch lets us test what we're doing.

        Test: http/tests/security/contentSecurityPolicy/script-loads-with-img-src.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirective::CSPDirective):
        (WebCore::CSPDirective::allows):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::canLoadExternalScriptFromSrc):
        (WebCore::ContentSecurityPolicy::parse):
        (WebCore::ContentSecurityPolicy::emitDirective):
        * page/ContentSecurityPolicy.h:

2011-02-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Andreas Kling.

        svg/custom/use-css-no-effect-on-shadow-tree.svg produces empty image on Chromium Linux after r58556
        https://bugs.webkit.org/show_bug.cgi?id=54460
        
        Don't use fast path for SVG. There are some additional rules for shadow trees that are not
        implemented on fast path.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::checkSelector):

2011-02-15  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        Part 1.

        Introduce CodeGenerators.pri and add common includepaths to WebCore.pri,
        thus unnecessary duplications can be removed from project files.

        No new tests needed.

        * CodeGenerators.pri: Copied from Source/WebCore/WebCore.pri.
        Don't add non-source generated files to SOURCES.
        * DerivedSources.pro: Change WebCore.pri to CodeGenerators.pri.
        * WebCore.pri: Move code generation rules to CodeGenerators.pri.
        * WebCore.pro: Move common options to WebCore.pri.

2011-02-15  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Crash in WebCore::FrameLoader::continueLoadAfterNavigationPolicy
        https://bugs.webkit.org/show_bug.cgi?id=54219

        Ensures we do not start a new navigation while we are in the process of
        stopping a navigation.  Also adds a manual test, since the crash can
        only be reproduced using the back button and not history.back().

        * loader/FrameLoader.cpp:
        * manual-tests/navigation-during-onload-triggered-by-back.html: Added.
        * manual-tests/resources/navigation-during-onload-container.html: Added.

2011-02-15  Bill Budge  <bbudge@chromium.org>

        Reviewed by David Levin.

        SubresourceLoader should expose finish time
        https://bugs.webkit.org/show_bug.cgi?id=54287

        No tests needed, exposes no new functionality

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        * loader/DocumentThreadableLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/SubresourceLoaderClient.h:
        (WebCore::SubresourceLoaderClient::didFinishLoading):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::didFinishLoading):
        * loader/cache/CachedResourceRequest.h:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didFinishLoading):
        * loader/icon/IconLoader.h:

2011-02-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        Enable fast path selector checking for child and subselector combinators
        https://bugs.webkit.org/show_bug.cgi?id=54360

        * css/CSSStyleSelector.cpp:
        (WebCore::isFastCheckableSelector):
        (WebCore::fastCheckSingleSelector):
        (WebCore::checkClassValue):
        (WebCore::checkIdValue):
        (WebCore::checkTagValue):
        (WebCore::CSSStyleSelector::SelectorChecker::fastCheckSelector):

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

        Reviewed by Pavel Feldman.

        Web Inspector: console auto-scroll is broken when there are both scrollers.
        https://bugs.webkit.org/show_bug.cgi?id=54273

        * inspector/front-end/utilities.js:
        (Element.prototype.isScrolledToBottom): use clientHeight instead of offsetHeight to determine
        whether the element is scrolled to the bottom.

2011-02-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: highlighter works incorrect at build.chromium.org WebKit cells
        https://bugs.webkit.org/show_bug.cgi?id=53910

        Use enclosingBoundingBox for the absolute margin quad as the reference box for a tooltip.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::drawNodeHighlight):

2011-02-15  Dirk Schulze  <krit@webkit.org>

        Rubber-stamped by Nikolas Zimmermann.

        SVG animation doesn't support attribute value 'inherit'
        https://bugs.webkit.org/show_bug.cgi?id=54410

        Accidently replaced start value RegularPropertyValue for m_fromPropertyValueType
        and m_toPropertyValueType by CurrentColorValue before landing. Check for property
        value type 'inherit' on color validation was missing.

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::calculateFromAndByValues):

2011-02-15  Adam Roben  <aroben@apple.com>

        Windows build fix after r78533

        * WebCore.vcproj/WebCore.vcproj: Fix bad XML syntax.

2011-02-15  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Antti Koivisto.

        SharedBuffer::buffer() does not do what you think.
        https://bugs.webkit.org/show_bug.cgi?id=54420

        No new tests.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::resourceContentBase64):
        * platform/SharedBuffer.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):

2011-02-15  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG animation doesn't support attribute value 'inherit'
        https://bugs.webkit.org/show_bug.cgi?id=54410

        SVG animation does not support 'inherit' as value for CSS property animations. With the patch, SVG determines
        if the attribute of the target element is an animatable CSS Property and computes the style during the
        animation.

        This fixes the following tests on the W3C test suite:
        * animate-elem-84-t.svg
        * animate-elem-85-t.svg

        Tests: svg/animations/animate-currentColor.html
               svg/animations/animate-inherit-css-property.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::adjustForCurrentColor):
        (WebCore::adjustForInheritance):
        (WebCore::SVGAnimateElement::calculateAnimatedValue): When a property value is 'inherit' or 'currentColor'
        during the animation, get the computed style of the property since the values could be animated themselves.
        (WebCore::inheritsFromProperty):
        (WebCore::attributeValueIsCurrentColor):
        (WebCore::SVGAnimateElement::calculateFromAndToValues): Check if 'from', 'by' or 'to' value has the
        string 'inherit' or 'currentColor' and if the attribute supports one of these values.
        (WebCore::SVGAnimateElement::calculateFromAndByValues): Ditto.
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::isTargetAttributeCSSProperty): Check if target element is stylable and
        the attribute is an animatable CSS property by using the CSS property map in SVGStyledElement.
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue): s/target/targetElement/ for consistency.
        * svg/SVGAnimationElement.h:
        * svg/SVGStyledElement.cpp: 
        (WebCore::SVGStyledElement::isAnimatableCSSProperty): Checks if the CSS property is animatable.
        * svg/SVGStyledElement.h:
        * svg/animation/SMILTimeContainer.cpp: Use the new function isTargetAttributeCSSProperty to determine
        if the target element is stylable and the attribute is an animatable CSS property.
        (WebCore::SMILTimeContainer::baseValueFor):

2011-02-15  Antti Koivisto  <antti@apple.com>

        Reviewed by Andreas Kling.

        r78499 causes assertion failure in http/tests/xmlhttprequest/cache-override.html
        https://bugs.webkit.org/show_bug.cgi?id=54418
        
        Check for zero buffer length.

        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::decode):

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

        Unreviewed build fix.

        * page/EditorClient.h: Changed GrammarDetail forward declaration from class to struct.

2011-01-26  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        Refactoring: Extract TextCheckerClient from EditorClient
        https://bugs.webkit.org/show_bug.cgi?id=53213
        
        Created new abstract class TextCheckerClient. The class has
        spellcheck related API which is split.
        This is the first step for sharing spell-checking codebase
        between ports. A standalone TextCheckerClient implementation
        should be done in future changes.

        No new tests. No behavioral change.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetSpelling):
        * editing/Editor.cpp: Replacing some client() call with textChecker().
        (WebCore::Editor::textChecker): Added.
        (WebCore::Editor::ignoreSpelling):
        (WebCore::Editor::learnSpelling):
        (WebCore::Editor::isSelectionMisspelled):
        (WebCore::Editor::guessesForMisspelledSelection):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::correctionPanelTimerFired):
        * editing/Editor.h:
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::SpellChecker):
        * editing/TextCheckingHelper.cpp: Replacing some client() call with textChecker().
        (WebCore::TextCheckingHelper::findFirstMisspelling):
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::findFirstBadGrammar):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        * loader/EmptyClients.h: Added EmptyTextCheckerClient.
        (WebCore::EmptyTextCheckerClient::ignoreWordInSpellDocument):
        (WebCore::EmptyTextCheckerClient::learnWord):
        (WebCore::EmptyTextCheckerClient::checkSpellingOfString):
        (WebCore::EmptyTextCheckerClient::getAutoCorrectSuggestionForMisspelledWord):
        (WebCore::EmptyTextCheckerClient::checkGrammarOfString):
        (WebCore::EmptyTextCheckerClient::checkTextOfParagraph):
        (WebCore::EmptyTextCheckerClient::getGuessesForWord):
        (WebCore::EmptyTextCheckerClient::requestCheckingOfString):
        (WebCore::EmptyEditorClient::textChecker):
        * page/EditorClient.h: Extracted TextCheckerClient.
        * page/Page.h:
        * platform/text/TextCheckerClient.h: Added.
        (WebCore::TextCheckerClient::~TextCheckerClient):

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

        Reviewed by Adam Barth.

        Add EditorClient callbacks to override isDOMPasteAllowed and javaScriptCanAccessClipboard
        https://bugs.webkit.org/show_bug.cgi?id=52417

        Added two callback functions, canCopyCut and canPaste to EditorClient. These functions
        returns true iff the current frame should be able to copy/cut and paste respectively.
        They take the default value determined by isDOMPasteAllowed and javaScriptCanAccessClipboard.

        These callbacks allows embedders to decide whether or not copy/cut/paste should be enabled
        per frame and thus per origin rather than per page.

        No new tests are added since this is a WebKit/WebCore interface change.

        * editing/EditorCommand.cpp:
        (WebCore::supportedCopyCut): Calls canCopyCut.
        (WebCore::supportedPaste): Calls canPaste.
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::canCopyCut): Added.
        (WebCore::EmptyEditorClient::canPaste): Added.
        * page/EditorClient.h:

2011-02-14  Jeremy Orlow  <jorlow@chromium.org>

        efl build fix

        * CMakeLists.txt:

2011-02-11  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Finish up implementing the new event model in IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=54331

        We shouldn't have our own event subclasses. Instead, we
        should just fire Event's with the proper type and bubble
        settings. All the attributes on the events before should
        just be on the request. IDBRequest should throw if they're
        accessed before the success event fires.

        * WebCore.gypi:
        * bindings/generic/RuntimeEnabledFeatures.h:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/Event.cpp:
        * dom/Event.h:
        * page/DOMWindow.idl:
        * storage/IDBAbortEvent.h: Removed.
        * storage/IDBCompleteEvent.cpp: Removed.
        * storage/IDBCompleteEvent.h: Removed.
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::~IDBDatabase):
        * storage/IDBDatabaseException.h:
        * storage/IDBDatabaseException.idl:
        * storage/IDBErrorEvent.cpp: Removed.
        * storage/IDBErrorEvent.h: Removed.
        * storage/IDBErrorEvent.idl: Removed.
        * storage/IDBEvent.h: Removed.
        * storage/IDBEvent.idl: Removed.
        * storage/IDBEventDispatcher.cpp:
        (WebCore::IDBEventDispatcher::dispatch):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::result):
        (WebCore::IDBRequest::errorCode):
        (WebCore::IDBRequest::webkitErrorMessage):
        (WebCore::IDBRequest::source):
        (WebCore::IDBRequest::transaction):
        (WebCore::IDBRequest::readyState):
        (WebCore::IDBRequest::resetReadyState):
        (WebCore::IDBRequest::onError):
        (WebCore::createSuccessEvent):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBRequest.h:
        * storage/IDBRequest.idl:
        * storage/IDBSuccessEvent.cpp: Removed.
        * storage/IDBSuccessEvent.h: Removed.
        * storage/IDBSuccessEvent.idl: Removed.
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):
        (WebCore::IDBTransaction::dispatchEvent):

2011-02-14  Enrica Casucci  <enrica@apple.com>

        Copy/paste from a WebKit window to a TextEdit window loses fonts.
        <rdar://problem/8623090>
        https://bugs.webkit.org/show_bug.cgi?id=54416
        
        Reviewed by Dan Bernstein.
        
        We don't have the complete solution that fixes this problem for WebKit2 yet.
        This patch fixes the regression in WebKit.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): For WebKit2 use only plain text,
        for WebKit use the original API to create the NSAttributedString.

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

        Reviewed by Alexey Proskuryakov.

        Strikethrough disappears when posting a message on odnoklassniki.ru
        https://bugs.webkit.org/show_bug.cgi?id=53475

        Changing the behavior of the strikethrough execCommand when styleWithCSS
        is false. We formerly created <s> tags, which was different than both IE
        and FF and caused problems with some rich text editors that would strip
        out unexpected tags such as <s>.

        Test: editing/execCommand/strikethrough-uses-strike-tag.html

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

2011-02-14  Pratik Solanki  <psolanki@apple.com>

        Remove dead code in FormDataStreamCFNet.cpp
        https://bugs.webkit.org/show_bug.cgi?id=54401

        Reviewed by Darin Adler.

        The static functions in this file are no longer reachable. We added a conditional branch to
        use new CFNetwork functions in r30329 and later made that code path permanent in r41517
        which made these functions unreachable.

        * platform/network/cf/FormDataStreamCFNet.cpp:

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

        Reviewed by Darin Adler.

        GraphicsContext: Add clip(IntRect) overload for Qt
        https://bugs.webkit.org/show_bug.cgi?id=54365

        Qt has special code paths for clipping to integer rectangles.
        Add a GraphicsContext::clip() overload to allow us to take
        advantage of the optimized code.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clip):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clip):

2011-02-14  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add built-in decoder for UTF-8 for improved performance
        https://bugs.webkit.org/show_bug.cgi?id=53898

        Covered by existing tests; not adding new tests at this time.

        This patch now handles errors in the same way the existing codecs do,
        and so passes our tests. The first version failed some tests because
        of incorrect error handling. The second version was missing one line
        of code that made it decode incomplete sequences at the end of the
        buffer twice.

        * platform/text/TextCodecICU.cpp:
        (WebCore::create): Renamed from newTextCodecICU, made a static member
        function, and added a call to adoptPtr.
        (WebCore::TextCodecICU::registerEncodingNames): Renamed from
        registerExtendedEncodingNames since this class is no longer used for
        base codecs. Removed aliases for UTF-8; now handled by TextCodecUTF8.
        (WebCore::TextCodecICU::registerCodecs): Renamed.
        (WebCore::fallbackForGBK): Renamed to conform to our current style.

        * platform/text/TextCodecICU.h: Updated for above changes. Changed
        indentation. Made most functions private, including virtual function
        overrides. Marked ICUConverterWrapper noncopyable.

        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::registerEncodingNames): Added the UTF-8 aliases
        that were formerly added by TextCodecICU.
        (WebCore::nonASCIISequenceLength): Fixed bug where this would return 4 for
        bytes F5-FF instead of failing.
        (WebCore::decodeNonASCIISequence): Tweaked coding style.
        (WebCore::appendCharacter): Added. Makes it easier to share code between
        the partial-character handling and main loop.
        (WebCore::TextCodecUTF8::decode): Fixed buffer size computation for case
        where there is a partial sequence. Fixed partial sequence handling so that
        goto is no longer needed, since compilers sometimes make poor code when
        goto is involved. Added a loop for partial sequences since we consume only
        one byte when a partial sequence is invalid. Fixed logic in main decoding
        loop so goto is not needed. Used early-exit style in both loops so the main
        flow is not nested inside if statements. Added correct error handling for
        flush when a partial sequence remains, which involved wrapping the function
        in yet another loop.

        * platform/text/TextCodecUTF8.h: Made virtual function overrides private.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps): Added calls to TextCodecUTF8. Removed
        calls to TextCodecICU. Added FIXMEs for other codecs that no longer need
        to be included here.
        (WebCore::extendTextCodecMaps): Updated for the name change of the
        TextCodecICU functions.

2011-02-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add basic parser for Content Security Policy
        https://bugs.webkit.org/show_bug.cgi?id=54379

        The parser in this patch is very basic.  It just segments the CSP
        header into directives.  The exactly syntax will likely change a bit as
        we discuss the details in public-web-security, but this parser will
        allow us to make progress.

        Sadly, this patch does not contain any tests.  That's because CSP
        policies do not have any observable effects yet.  Hopefully we'll get
        enough sketched out in the next couple patches to begin writing tests.

        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPDirective::CSPDirective):
        (WebCore::CSPDirective::name):
        (WebCore::CSPDirective::value):
        (WebCore::ContentSecurityPolicy::~ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::parse):
        * page/ContentSecurityPolicy.h:

2011-02-14  Andrew Wason  <rectalogic@rectalogic.com>

        Reviewed by Kenneth Russell.

        [Qt] WebKit fails to compile for Qt when WebGL enabled
        https://bugs.webkit.org/show_bug.cgi?id=53431

        No new tests.

        * WebCore.pro:
          Add source and header files and include directory to Qt project.
        * html/canvas/WebGLRenderingContext.cpp:
          File uses 'emit' which is a Qt keyword - #undef emit.
        * platform/graphics/gpu/qt: Added.
        * platform/graphics/gpu/qt/DrawingBufferQt.cpp: Added.
          Partial implementation of DrawingBuffer for Qt.
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::didReset):
        (WebCore::DrawingBuffer::platformLayer):
        (WebCore::DrawingBuffer::platformColorBuffer):
        * platform/graphics/qt/Extensions3DQt.cpp:
          Noop implementation for pure virtual methods added to Extensions3D.h
        (WebCore::Extensions3DQt::blitFramebuffer):
        (WebCore::Extensions3DQt::renderbufferStorageMultisample):
        * platform/graphics/qt/Extensions3DQt.h:
          Declare new methods added to Extensions3D.h
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
          Remove method implementations no longer in GraphicsContext3D.h.
          Change m_syntheticErrors to use unsigned int to match new
          GC3Denum type.
        (WebCore::GraphicsContext3D::create):
         Change return type to match GraphicsContext3D.h
        (WebCore::GraphicsContext3D::lineWidth):
         Change argument type to GC3Dfloat to match GraphicsContext3D.h
        (WebCore::GraphicsContext3D::getUniformLocation):
         Change return type to GC3Dfloat to match GraphicsContext3D.h
        (WebCore::GraphicsContext3D::getExtensions):
         Need to call get() on OwnPtr.
        (WebCore::GraphicsContext3D::getImageData):
         Rename enum values to match declarations in GraphicsContext3D.h

2011-02-14  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        <select> elements don't honor border:0px in chromium-linux
        https://bugs.webkit.org/show_bug.cgi?id=51152

        No new tests, covered by existing pixel results (fast/forms/basic-selects.html
        convers lots of cases).

        * css/themeChromiumLinux.css:
        (select):
        * platform/chromium/PlatformBridge.h:
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::paintButton):
        (WebCore::RenderThemeChromiumLinux::paintMenuList):
          match border logic in RenderThemeChromiumWin.cpp:
          http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderThemeChromiumWin.cpp#L463

2011-02-14  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Fix rendering of ISO-8859-8 when dir="rtl".
        https://bugs.webkit.org/show_bug.cgi?id=52128

        Test: fast/text/international/iso-8859-8.html

        * platform/text/BidiResolver.h: Add VisualDirectionOverride enum.
        (WebCore::::createBidiRunsForLine): For lines with visual direction override,
        create bidi runs without resolving bidi levels (one run per render object), 
        set bidi level as 0 or 1 depending on LTR or RTL override, 
        and reverse runs for RTL override.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::constructLine): Set inline box bidi level the same as
        BidiRun's bidi level without special handling of VisualDirectionOverride.
        (WebCore::RenderBlock::layoutInlineChildren): Pass in VisualDirectionOverride 
        to createBidiRunsForLine().

2011-02-14  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Crash on application exit after constructing and destroying a QWebView twice
        https://bugs.webkit.org/show_bug.cgi?id=54000

        Check the value is valid before use it.

        * platform/qt/SharedTimerQt.cpp:
        (WebCore::SharedTimerQt::~SharedTimerQt):

2011-02-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: 304 Not Modified responses have a yellow icon in Web Inspector Resources panel
        https://bugs.webkit.org/show_bug.cgi?id=33220

        * inspector/front-end/ResourceHeadersView.js:
        (WebInspector.ResourceHeadersView.prototype._refreshHTTPInformation):

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

        Reviewed by James Robinson.

        [chromium] Modify LayerTilerChromium to use TilingData.
        https://bugs.webkit.org/show_bug.cgi?id=54143

        Most of the previous data in LayerTilerChromium is now calculated
        from TilingData.  TilingData was modified to allow for a dynamic
        tile size and page size.  LayerTilerChromium also gets its own
        shader with a texture transform to handle drawing from a texture
        that is larger than a tile.

        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::updateAndDrawRootLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::tilerSharedValues):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::create):
        (WebCore::LayerTilerChromium::LayerTilerChromium):
        (WebCore::LayerTilerChromium::setTileSize):
        (WebCore::LayerTilerChromium::reset):
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::tileIndex):
        (WebCore::LayerTilerChromium::tileContentRect):
        (WebCore::LayerTilerChromium::tileLayerRect):
        (WebCore::LayerTilerChromium::layerSize):
        (WebCore::LayerTilerChromium::layerTileSize):
        (WebCore::LayerTilerChromium::invalidateEntireLayer):
        (WebCore::LayerTilerChromium::draw):
        (WebCore::LayerTilerChromium::resizeLayer):
        (WebCore::LayerTilerChromium::growLayerToContain):
        (WebCore::LayerTilerChromium::drawTexturedQuad):
        (WebCore::LayerTilerChromium::SharedValues::SharedValues):
        (WebCore::LayerTilerChromium::SharedValues::~SharedValues):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::SharedValues::tilerShaderProgram):
        (WebCore::LayerTilerChromium::SharedValues::shaderSamplerLocation):
        (WebCore::LayerTilerChromium::SharedValues::shaderMatrixLocation):
        (WebCore::LayerTilerChromium::SharedValues::shaderAlphaLocation):
        (WebCore::LayerTilerChromium::SharedValues::shaderTexTransformLocation):
        (WebCore::LayerTilerChromium::SharedValues::initialized):
        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::computeNumTiles):
        (WebCore::TilingData::TilingData):
        (WebCore::TilingData::setTotalSize):
        (WebCore::TilingData::setMaxTextureSize):
        (WebCore::TilingData::tileSizeX):
        (WebCore::TilingData::tileSizeY):
        (WebCore::TilingData::textureOffset):
        (WebCore::TilingData::recomputeNumTiles):
        * platform/graphics/gpu/TilingData.h:

2011-02-14  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [Text editor] First implementation of the editable TextViewer without optimization
        https://bugs.webkit.org/show_bug.cgi?id=54388

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.set readOnly):
        (WebInspector.TextEditorChunkedPanel):
        (WebInspector.TextEditorChunkedPanel.prototype._buildChunks):
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorChunkedPanel.prototype.beginDomUpdates):
        (WebInspector.TextEditorChunkedPanel.prototype.endDomUpdates):
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
        (WebInspector.TextEditorGutterChunk.prototype.set expanded):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.set readOnly):
        (WebInspector.TextEditorMainPanel.prototype._buildChunks):
        (WebInspector.TextEditorMainPanel.prototype._highlightDataReady):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype.textChanged):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates.return):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMUpdates):
        (WebInspector.TextEditorMainPanel.prototype._handleDOMSubtreeModified):
        (WebInspector.TextEditorMainPanel.prototype._applyDomUpdates):
        (WebInspector.TextEditorMainPanel.prototype._collectLinesFromDiv):
        (WebInspector.TextEditorMainChunk.prototype.addDecoration):
        (WebInspector.TextEditorMainChunk.prototype.removeDecoration):
        (WebInspector.TextEditorMainChunk.prototype.set expanded):

2011-02-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: use call frame column to determine execution line in source frame.
        https://bugs.webkit.org/show_bug.cgi?id=54001

        - Make call frame line and column zero based
        - Set execution line in source frame based on call frame line:column
        - Determine currently hit breakpoint based on call frame line:column

        * bindings/js/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::JavaScriptCallFrame):
        * bindings/js/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::create):
        (WebCore::JavaScriptCallFrame::line):
        (WebCore::JavaScriptCallFrame::column):
        (WebCore::JavaScriptCallFrame::update):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::createCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::updateCallFrameAndPauseIfNeeded):
        * bindings/v8/DebuggerScript.js:
        ():
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._debuggerPaused):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.continueToLocation):
        (WebInspector.DebuggerModel.prototype._pausedScript):
        (WebInspector.DebuggerModel.prototype._breakpointForCallFrame):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._clearCurrentExecutionLine):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._setTextViewerDecorations):
        (WebInspector.SourceFrame.prototype.setExecutionLocation):
        (WebInspector.SourceFrame.prototype.clearExecutionLocation):
        (WebInspector.SourceFrame.prototype._setExecutionLocation):
        (WebInspector.SourceFrame.prototype._breakpointAdded):
        (WebInspector.SourceFrame.prototype._continueToLine):
        (WebInspector.SourceFrame.prototype._originalLocationToTextViewerLineNumber):

2011-02-14  Christian Dywan  <christian@lanedo.com>

        Reviewed by Gustavo Noronha Silva.

        Regression: Back, Forward, Reload hidden in context menu
        https://bugs.webkit.org/show_bug.cgi?id=54393

        * page/ContextMenuController.cpp: Always show Back, Forward,
            Reload and Stop context menu items for the GTK+ port.

2011-02-14  Johnny Ding  <jnd@chromium.org>

        Reviewed by Andreas Kling.

        Move the finiteness check into common code.

        Test covered by canvas/philip/tests/2d.path.isPointInPath.nonfinite.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::isPointInPath):

2011-02-14  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Kent Tamura.

        Bug 54377 - Clean up RenderTextControlSingleLine::createSubtreeIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=54377

        Rearranged the condition blocks, removed superfluous conditions:
        .) if-statements where it's already clear that a search field is being generated
        .) testing for spin-buttons on field types that can never have them.

        createInnerBlockStyle(): only search fields create an inner block, and
        these can never have spin buttons.

        No new tests. (Refactoring - covered by existing tests)

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle):
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):

2011-02-10  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactoring, extract SourceMapping from SourceFrameContent.
        https://bugs.webkit.org/show_bug.cgi?id=54195

        Add SourceMapping interface with two implementations - IdenticalSourceMapping and SourceMappingForFormattedScript.
        Rewrite SourceFrameContent based on SourceMapping. Make SourceFrame unaware of source mapping details.

        * inspector/front-end/ResourceView.js:
        (WebInspector.SourceFrameContentProviderForResource.prototype.requestContent):
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.locationToPosition):
        (WebInspector.ScriptFormatter.positionToLocation):
        (WebInspector.ScriptFormatter.prototype.formatContent.didFormatChunks):
        (WebInspector.ScriptFormatter.prototype.formatContent):
        (WebInspector.ScriptFormatter.prototype._splitContentIntoChunks):
        (WebInspector.SourceMappingForFormattedScript):
        (WebInspector.SourceMappingForFormattedScript.prototype.fromScriptLocation):
        (WebInspector.SourceMappingForFormattedScript.prototype.toScriptLocation):
        (WebInspector.SourceMappingForFormattedScript.prototype.originalPositionToFormattedLocation):
        (WebInspector.SourceMappingForFormattedScript.prototype._convertPosition):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.SourceFrameContentProviderForScript.prototype.requestContent):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype._shouldDisplayBreakpoint):
        (WebInspector.SourceFrame.prototype.setExecutionLine):
        (WebInspector.SourceFrame.prototype.clearExecutionLine):
        (WebInspector.SourceFrame.prototype._breakpointAdded):
        (WebInspector.SourceFrame.prototype.formatSource.didFormat):
        (WebInspector.SourceFrame.prototype.formatSource):
        (WebInspector.SourceFrame.prototype._continueToLine):
        (WebInspector.SourceFrame.prototype._setBreakpoint):
        (WebInspector.SourceFrame.prototype._findBreakpoint):
        (WebInspector.SourceFrameContentProvider.prototype.requestContent):
        * inspector/front-end/SourceFrameContent.js:
        (WebInspector.SourceFrameContent):
        (WebInspector.SourceFrameContent.prototype.sourceFrameLineNumberToScriptLocation):
        (WebInspector.SourceFrameContent.prototype.scriptLocationToSourceFrameLineNumber):
        (WebInspector.SourceFrameContent.prototype._sourceIDForSourceFrameLineNumber):
        (WebInspector.SourceMapping):
        (WebInspector.SourceMapping.prototype.fromScriptLocation):
        (WebInspector.SourceMapping.prototype.toScriptLocation):
        (WebInspector.IdenticalSourceMapping):
        (WebInspector.IdenticalSourceMapping.prototype.fromScriptLocation):
        (WebInspector.IdenticalSourceMapping.prototype.toScriptLocation):
        * inspector/front-end/utilities.js:
        (String.prototype.lineEndings):

2011-02-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [REGRESSION introduced in r77950] Develop -> Start Debugging JavaScript does not open Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=54277

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::stopUserInitiatedProfiling):
        (WebCore::InspectorAgent::showAndEnableDebugger):
        (WebCore::InspectorAgent::showPanel):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::showAndEnableDebugger):
        (WebCore::InspectorController::stopUserInitiatedProfiling):

2011-02-14  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Andreas Kling.

        css style="max-width:none" works wrong
        https://bugs.webkit.org/show_bug.cgi?id=53743

        Fix a bug that "max-width:none" works wrong.
        See also: http://trac.webkit.org/changeset/13462

        Test: fast/css/max-width-none.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): For max-width of none,
        set it to Length(undefinedLength, Fixed), which is the correct
        value.

2011-02-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Andreas Kling.

        REGRESSION (r77834): Assertion failing in svg/custom/use-multiple-on-nested-disallowed-font.svg
        https://bugs.webkit.org/show_bug.cgi?id=54344
        
        Intead of recomputing, just mark style selector dirty if it is invalidated in the middle of a style recalc.

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

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

        Reviewed by Kent Tamura.

        [Chromium] Fix wrong popup position for RTL(again)
        https://bugs.webkit.org/show_bug.cgi?id=54375

        Fix right position bug introduce by https://bugs.webkit.org/show_bug.cgi?id=53567, because the previous fix was correct for the current behaviour, but not good for http://crbug.com/60427. To calculate the correct right offset value and apply to the position, change WebCore::PopupContainer::layout() to return right offset value and use the returned value to calculate position.

        No new tests. However we can check manually with select_dropdown_box_alignment.html, autofill_alignment.html, select_alignment.html, select_dropdown_box_alignment.html, autofill-popup-width-and-item-direction.html

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::layoutAndCalculateWidgetRect): Change the input parameter to take popupInitialCoordinate again. And calculate correct right position with returned right offset from layoutAndGetRightOffset().
        (WebCore::PopupContainer::showPopup): Change the passing parameter to layoutAndCalculateWidgetRect().
        (WebCore::PopupContainer::layoutAndGetRightOffset): Change the name from layout() and to return rightOffset value.
        (WebCore::PopupContainer::refresh): Change the passing parameter to layoutAndCalculateWidgetRect().
        * platform/chromium/PopupMenuChromium.h: Change the function name and parameters.

2011-02-14  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, rolling out r78451.
        http://trac.webkit.org/changeset/78451
        https://bugs.webkit.org/show_bug.cgi?id=53898

        It is causing crashes in some bots

        * platform/text/TextCodecICU.cpp:
        (WebCore::newTextCodecICU):
        (WebCore::TextCodecICU::registerBaseEncodingNames):
        (WebCore::TextCodecICU::registerBaseCodecs):
        (WebCore::TextCodecICU::registerExtendedEncodingNames):
        (WebCore::TextCodecICU::registerExtendedCodecs):
        (WebCore::ErrorCallbackSetter::~ErrorCallbackSetter):
        (WebCore::getGbkEscape):
        (WebCore::urlEscapedEntityCallback):
        (WebCore::gbkCallbackEscape):
        (WebCore::gbkUrlEscapedEntityCallack):
        (WebCore::gbkCallbackSubstitute):
        * platform/text/TextCodecICU.h:
        (WebCore::ICUConverterWrapper::ICUConverterWrapper):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::registerEncodingNames):
        (WebCore::nonASCIISequenceLength):
        (WebCore::decodeNonASCIISequence):
        (WebCore::TextCodecUTF8::decode):
        * platform/text/TextCodecUTF8.h:
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):

2011-02-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=54376
        Make sorting of matched rules faster
        
        - use std::sort
        - cache specificity, it is slow to compute
        - inline compare function

        * css/CSSStyleSelector.cpp:
        (WebCore::RuleData::specificity):
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::compareRules):
        (WebCore::CSSStyleSelector::sortMatchedRules):
        (WebCore::RuleData::RuleData):
        (WebCore::CSSStyleSelector::matchPageRules):
        * css/CSSStyleSelector.h:

2011-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add built-in decoder for UTF-8 for improved performance
        https://bugs.webkit.org/show_bug.cgi?id=53898

        Covered by existing tests; not adding new tests at this time.

        This patch now handles errors in the same way the existing codecs do,
        and so passes our tests. The previous version failed some tests because
        of incorrect error handling.

        * platform/text/TextCodecICU.cpp:
        (WebCore::create): Renamed from newTextCodecICU, made a static member
        function, and added a call to adoptPtr.
        (WebCore::TextCodecICU::registerEncodingNames): Renamed from
        registerExtendedEncodingNames since this class is no longer used for
        base codecs. Removed aliases for UTF-8; now handled by TextCodecUTF8.
        (WebCore::TextCodecICU::registerCodecs): Renamed.
        (WebCore::fallbackForGBK): Renamed to conform to our current style.

        * platform/text/TextCodecICU.h: Updated for above changes. Changed
        indentation. Made most functions private, including virtual function
        overrides. Marked ICUConverterWrapper noncopyable.

        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::registerEncodingNames): Added the UTF-8 aliases
        that were formerly added by TextCodecICU.
        (WebCore::nonASCIISequenceLength): Fixed bug where this would return 4 for
        bytes F5-FF instead of failing.
        (WebCore::decodeNonASCIISequence): Tweaked coding style.
        (WebCore::appendCharacter): Added. Makes it easier to share code between
        the partial-character handling and main loop.
        (WebCore::TextCodecUTF8::decode): Fixed buffer size computation for case
        where there is a partial sequence. Fixed partial sequence handling so that
        goto is no longer needed, since compilers sometimes make poor code when
        goto is involved. Added a loop for partial sequences since we consume only
        one byte when a partial sequence is invalid. Fixed logic in main decoding
        loop so goto is not needed. Used early-exit style in both loops so the main
        flow is not nested inside if statements. Added correct error handling for
        flush when a partial sequence remains, which involved wrapping the function
        in yet another loop.

        * platform/text/TextCodecUTF8.h: Made virtual function overrides private.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps): Added calls to TextCodecUTF8. Removed
        calls to TextCodecICU. Added FIXMEs for other codecs that no longer need
        to be included here.
        (WebCore::extendTextCodecMaps): Updated for the name change of the
        TextCodecICU functions.

2011-02-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/8995490> WebCoreAuthenticationClientAsChallengeSender doesn't implement some necessary methods.

        * platform/network/mac/AuthenticationMac.mm:
        (-[WebCoreAuthenticationClientAsChallengeSender performDefaultHandlingForAuthenticationChallenge:]):
        (-[WebCoreAuthenticationClientAsChallengeSender rejectProtectionSpaceAndContinueWithChallenge:]):

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

        Reviewed by Andreas Kling.

        Repeating gradients drawn incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=53502
        
        The 'forward-fill' logic for repeating gradients used the wrong
        starting stop index (0 rather than the original first index), which
        resulted in incorrect gradients if backwards-fill had already been
        applied.

        Test: fast/gradients/css3-repeating-end-fill.html

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):

2011-02-13  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        Unused variable result in RenderBlock::addOverflowFromFloats()
        https://bugs.webkit.org/show_bug.cgi?id=54363

        Remove the unused variable.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromFloats):

2011-02-13  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Anders Carlsson.

        WebCore fails to build with Clang's -Woverloaded-virtual
        https://bugs.webkit.org/show_bug.cgi?id=54367

        * loader/PingLoader.h:
        (WebCore::PingLoader::didReceiveData): Change the method signature to match the signature
        in the base class.

2011-02-13  Nico Weber  <thakis@chromium.org>

        Reviewed by Anders Carlsson.

        RenderBR::width() tries but fails to override RenderText::width()
        https://bugs.webkit.org/show_bug.cgi?id=54301

        The superclass method's signature changed, e.g. in
        http://trac.webkit.org/changeset/57215, but the subclass was not
        updated.

        * rendering/RenderBR.h:
        (WebCore::RenderBR::width):

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

        Reviewed by Dirk Schulze.

        Canvas: 2d.fillStyle.parse.system.html fails
        https://bugs.webkit.org/show_bug.cgi?id=39168

        Based on previous work by Julien Chaffraix <jchaffraix@codeaurora.org>
        and Jan Erik Hanssen <jhanssen@sencha.com>

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor): Changed the function to better match our
        early return policy. Also we now return false when we don't parse the color.
        This is needed for createFromString to fallback to using parseSystemColor.

        (WebCore::CSSParser::parseSystemColor): Made use of the RenderTheme to get
        the system colors.

        * css/CSSParser.h: Added the new parseSystemColor method.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeColor): Pass the document to createFromString.
        (WebCore::CanvasRenderingContext2D::setFillColor): Ditto.

        * html/canvas/CanvasStyle.cpp:
        (WebCore::parseColor):
        (WebCore::parseColorOrCurrentColor):
        (WebCore::CanvasStyle::createFromString): Try to parse the color using CSSParser::parseColor
        and fall back to parseSystemColor if it did not work.

        * html/canvas/CanvasStyle.h: Added the new Document* parameter to createFromString.

2011-02-13  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Adam Barth.

        Add a compile-time option to completely disable WebArchive support.
        https://bugs.webkit.org/show_bug.cgi?id=52712

        Add an ENABLE(WEB_ARCHIVE) compile-time setting and use it for all WebArchive code.

        ArchiveResource and ArchiveResourceCollection are notably still compiled in. They are used
        in Safari for functionality such as "Save Image As" and Image copy & paste independent of
        WebArchive support.

        Ports Affected:
            WebArchive support is currently enabled for all ports that define PLATFORM(CF) apart from Qt.
            This patch preserves this behavior except that it also disables support in the Chromium port.

        No behavior changes so no new tests.

        * WebCore.gyp/WebCore.gyp: Don't compile LegacyWebArchive.cpp and friends.
        * WebCore.pro: Don't compile ArchiveFactory.cpp in Qt port.
        * loader/DocumentLoader.cpp: Surround WebArchive code with #ifdef.
        (WebCore::DocumentLoader::commitLoad):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::archiveResourceForURL):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::finishedLoadingDocument):
        * loader/FrameLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::start):
        * loader/archive/ArchiveFactory.cpp: Remove #ifdef since feature is now enabled/disabled wholesale.
        (WebCore::archiveMIMETypes):
        * page/Settings.cpp:
        * page/Settings.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):

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

        Reviewed by Andreas Kling.

        [Qt] QtWebKit does not properly handle D&D of a percent-encoded URL.
        https://bugs.webkit.org/show_bug.cgi?id=53320

        The encoding that was done is corrected in the fix.  
        Replaced the KURL encoding function with QUrl API.

        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asURL):

2011-02-13  Leo Yang  <leo.yang.c@gmail.com>

        Reviewed by Andreas Kling.

        Unnecessary call of containingBlock() in RenderBoxModelObject::relativePositionOffsetX()
        https://bugs.webkit.org/show_bug.cgi?id=54351

        We were calling containingBlock() twice if the left is not auto. We only need to call it
        once because we can use 'cb' variable in the following line.

        No functionality change, no new tests.

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

2011-02-13  Jarred Nicholls  <jarred@sencha.com>

        Reviewed by Simon Fraser.

        getComputedStyle returns wrong value for margin-right
        https://bugs.webkit.org/show_bug.cgi?id=13343
        
        Matching IE, Firefox, and Opera behavior by returning the computed margin
        values as specified, rather than the used/auto values (calculated via RenderBox).
        Also CSS 2.1+ compliant by returning margin percentage as specified, if applicable.
        Note: Firefox and Opera return calculated fixed lengths for percentage margins, IE
        returns the specified percentage.

        Tests: fast/css/getComputedStyle/getComputedStyle-margin-auto.html
               fast/css/getComputedStyle/getComputedStyle-margin-length.html
               fast/css/getComputedStyle/getComputedStyle-margin-percentage.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2011-02-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        crypto.getRandomValues should throw TYPE_MISMATCH_ERR
        https://bugs.webkit.org/show_bug.cgi?id=54346

        As requested by Sam.

        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues):

2011-02-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=54349
        Inline some accessors in PrintContext

        No change in behavior, so no tests.

        * WebCore.exp.in:
        * page/PrintContext.cpp:
        * page/PrintContext.h:
        (WebCore::PrintContext::pageCount):
        (WebCore::PrintContext::pageRect):
        Inline pageCount() and pageRect() to match pageRects().

2011-02-13  Sam Weinig  <sam@webkit.org>

        Roll r78424 [Extra scrolling required when scrolling with a scroll wheel (Mighty Mouse)] back
        in with fixes to make it work with render layers.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimatorMac::adjustScrollXPositionIfNecessary):
        (WebCore::ScrollAnimatorMac::adjustScrollYPositionIfNecessary):
        (WebCore::ScrollAnimatorMac::adjustScrollPositionIfNecessary):
        (WebCore::ScrollAnimatorMac::immediateScrollToPoint):
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaX):
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaY):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::contentsSize):
        (WebCore::RenderLayer::visibleHeight):
        (WebCore::RenderLayer::visibleWidth):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::visibleHeight):
        (WebCore::RenderListBox::visibleWidth):
        * rendering/RenderListBox.h:

2011-02-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Some Scrollbar functions assume an attached ScrollableArea but can be called without one
        https://bugs.webkit.org/show_bug.cgi?id=54262

        Make sure that all calls to the scrollable area are null checked.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::mouseMoved):

2011-02-13  Sam Weinig  <sam@webkit.org>

        Roll out r78424. It broke a bunch of tests.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimatorMac::immediateScrollToPoint):
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaX):
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaY):
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::contentsSize):
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:

2011-02-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        WK2: Extra scrolling required when scrolling with a scroll wheel (Mighty Mouse)
        <rdar://problem/8984760> 

        When going down the smooth scroll path, constrained scrolls (such as those from a
        Mighty Mouse) were being correctly constrained at the ScrollView level, but the 
        duplicate values being stored by the animator were not being constrained correctly.

        In order to implement the constraint at this level, more of the ScrollableArea's API
        needed to be filled in for RenderLayer and RenderListBox.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scrollToOffsetWithoutAnimation): Call immediateScrollToPoint to stay
        consistent and get the desired behavior.

        (WebCore::ScrollAnimatorMac::adjustScrollXPositionIfNecessary):
        (WebCore::ScrollAnimatorMac::adjustScrollYPositionIfNecessary):
        (WebCore::ScrollAnimatorMac::adjustScrollPositionIfNecessary):
        (WebCore::ScrollAnimatorMac::immediateScrollToPoint):
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaX):
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaY):
        Ensure that the scroll animators view of the current scroll position is the
        same as the scrollable areas by correctly clamping the value.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::contentsSize): Correct implementation
        to use the scroll size, not the visible size.
        (WebCore::RenderLayer::visibleHeight):
        (WebCore::RenderLayer::visibleWidth):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::visibleHeight):
        (WebCore::RenderListBox::visibleWidth):
        * rendering/RenderListBox.h:
        Add implementations for visibleHeight/visibleWidth.

2011-02-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        crypto.getRandomValues should support all integer array types
        https://bugs.webkit.org/show_bug.cgi?id=54342

        As discussed on whatwg, we should support all the integer array types.

        Test: security/crypto-random-values-types.html

        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues):

2011-02-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Mark Rowe.

        Use /dev/urandom as the OSRandomSource on OS(DARWIN)
        https://bugs.webkit.org/show_bug.cgi?id=54279

        Update the ifdef.  OS(UNIX) includes OS(DARWIN), so this change is
        should be a NOP.

        * config.h:

2011-02-11  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Allow turning off multisampling through web preference settings
        https://bugs.webkit.org/show_bug.cgi?id=54321

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create): Disable multisampling in WebGL if web reference says so.
        * page/Settings.cpp: Add a flag for multisampling preference.
        (WebCore::Settings::Settings):
        (WebCore::Settings::setOpenGLMultisamplingEnabled):
        * page/Settings.h: Ditto.
        (WebCore::Settings::openGLMultisamplingEnabled):

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

        Reviewed by Tony Chang.

        Deploy EditingStyle in applyBlockStyle and applyInlineStyle
        https://bugs.webkit.org/show_bug.cgi?id=53911

        Deployed EditingStyle in ApplyStyleCommand::applyBlockStyle and ApplyStyleCommand::applyInlineStyle.
        Extracted EditingStyle::extractAndRemoveTextDirection from applyInlineStyle.
        Also added propertiesToInclude to the argument list of EditingStyle's constructor that takes Node*
        so that splitAncestorsWithUnicodeBidi can call EditingStyle::textDirection to obtain the text direction.

        No new tests are added since this is a refactoring.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::doApply): Passes EditingStyle* to applyBlockStyle and applyInlineStyle.
        (WebCore::ApplyStyleCommand::applyBlockStyle): Takes EditingStyle*.
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi): Changed the type of allowedDirection
        from int to WritingDirection. Uses EditingStyle's textDirection to obtain the writing direction.
        (WebCore::ApplyStyleCommand::applyInlineStyle): Takes EditingStyle*.
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Allows style to be null; exit early instead.
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Asserts that style is not null.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Allows style to be null.
        * editing/ApplyStyleCommand.h: Includes WritingDirection.h; prototype changes.
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::EditingStyle): Added PropertiesToInclude to the argument.
        (WebCore::EditingStyle::init): Supports PropertiesToInclude.
        (WebCore::EditingStyle::extractAndRemoveTextDirection): Extracted from applyInlineStyle.
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::create): Supports PropertiesToInclude.

2011-02-12  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Jeremy Orlow.

        Implement IDBObjectStore::clear
        https://bugs.webkit.org/show_bug.cgi?id=54193

        Test: storage/indexeddb/objectstore-clear.html

        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::clear):
        * storage/IDBObjectStore.h:
        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::clear):
        (WebCore::doDelete):
        (WebCore::IDBObjectStoreBackendImpl::clearInternal):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBObjectStoreBackendInterface.h:

2011-02-12  Adam Barth  <abarth@webkit.org>

        Another attempt to fix the EFL build.  Looks like we're missing one
        more file.

        * CMakeLists.txt:

2011-02-12  Adam Barth  <abarth@webkit.org>

        Attempt to fix the EFL build.  Apparently the CMake build had no
        concept of ArrayBuffers.

        * CMakeLists.txt:

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

        Unreviewed build fix.

        * dom/Range.cpp:
        (WebCore::lengthOfContentsInNode): Replaced static const unsigned LengthOfContentsInNode.
        (WebCore::Range::processContents):
        (WebCore::Range::processContentsBetweenOffsets):

2011-02-12  Adam Barth  <abarth@webkit.org>

        CPP files belong in SOURCES not in HEADERS.  There are more errors like
        this for other disabled features, but I'm not fixing them in this
        patch.

        * WebCore.pro:

2011-02-12  Adam Barth  <abarth@webkit.org>

        Apparently lines in .pro files need to be \-terminated.

        * WebCore.pro:

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

        Reviewed by Darin Adler.

        Extract a function to process contents for one node from Range::processContents
        https://bugs.webkit.org/show_bug.cgi?id=54282

        Extracted Range::processContentsBetweenOffsets, which process contents of a node
        between two offsets. This function is used for the simple case where the start
        and the end containers are of the same node, and to process start and end containers
        in the complex case.

        When the function takes a non-null fragment (simple case), it appends the processed
        contents to the fragment; character data and processing instruction's contents are copied
        between the offsets, and descendants are copied for node of other types (not node itself).

        When the fragment is null (complex case), the function copies contents of character data,
        processing instruction, and node of other types (including node itself).

        No new tests are added since this is a refactoring.

        * dom/Range.cpp:
        (WebCore::highestAncestorUnderCommonRoot): Added.
        (WebCore::Range::processContents): Calls highestAncestorUnderCommonRoot and
        processContentsBetweenOffsets.
        (WebCore::Range::processContentsBetweenOffsets): Added.
        * dom/Range.h:

2011-02-12  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Qt Windows build.

        * WebCore.pro:

2011-02-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Kenneth Russell.

        Enable ArrayBuffers by default
        https://bugs.webkit.org/show_bug.cgi?id=54310

        As discussed on webkit-dev, ArrayBuffers are used by a bunch of
        different APIs, implemented by Firefox, and appear to be stable.
        Keeping them conditional is a large mantainance burden than it's worth.

        * DerivedSources.cpp:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebGLEnabled):
        * bindings/js/JSArrayBufferCustom.cpp:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDataViewCustom.cpp:
        * bindings/js/JSFloat32ArrayCustom.cpp:
        * bindings/js/JSInt16ArrayCustom.cpp:
        * bindings/js/JSInt32ArrayCustom.cpp:
        * bindings/js/JSInt8ArrayCustom.cpp:
        * bindings/js/JSUint16ArrayCustom.cpp:
        * bindings/js/JSUint32ArrayCustom.cpp:
        * bindings/js/JSUint8ArrayCustom.cpp:
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        * bindings/v8/custom/V8DataViewCustom.cpp:
        * bindings/v8/custom/V8Float32ArrayCustom.cpp:
        * bindings/v8/custom/V8Int16ArrayCustom.cpp:
        * bindings/v8/custom/V8Int32ArrayCustom.cpp:
        * bindings/v8/custom/V8Int8ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint16ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint32ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint8ArrayCustom.cpp:
        * html/canvas/ArrayBuffer.cpp:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/ArrayBufferView.cpp:
        * html/canvas/ArrayBufferView.idl:
        * html/canvas/DataView.cpp:
        * html/canvas/DataView.idl:
        * html/canvas/Float32Array.cpp:
        * html/canvas/Float32Array.idl:
        * html/canvas/Int16Array.cpp:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.cpp:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.cpp:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.cpp:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.cpp:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.cpp:
        * html/canvas/Uint8Array.idl:
        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues):
        * page/Crypto.h:
        * page/Crypto.idl:
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2011-02-11  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Background image positioning on RTL text
        https://bugs.webkit.org/show_bug.cgi?id=32862

        When the style of InlineFlowBox is right-to-left, the strips should be rearranged in reverse order.

        Tests: fast/inline/inline-box-background-long-image.html
               fast/inline/inline-box-background-repeat-x.html
               fast/inline/inline-box-background-repeat-y.html
               fast/inline/inline-box-background.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):

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

        Unreviewed, rolling out r78044.
        http://trac.webkit.org/changeset/78044
        https://bugs.webkit.org/show_bug.cgi?id=54318

        Broke Safari extensions (Requested by eseidel on #webkit).

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

2011-02-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8976456> Scrollbars for overflow
        areas never appear for WKScrollbarPainter scrollers

        Call ScrollableArea::didAddVerticalScrollbar() and 
        ScrollableArea::willRemoveVerticalScrollbar() when
        appropriate for RenderLayers.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):

2011-02-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        KURL should remove default port numbers when cannonicalizing urls (to match every other browser)
        https://bugs.webkit.org/show_bug.cgi?id=54090

        * platform/KURL.cpp:
        (WebCore::isDefaultPortForScheme):
        (WebCore::KURL::parse):

2011-02-11  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        Need makeContextCurrent() called in prepareForSoftwareDraw(), in the case that skia's backend
        is the gpu. This matches the pattern in GraphicsContext3DOpenGL.cpp

        No new tests. All existing canvas layouttests exercise this code path

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::prepareForSoftwareDraw):

2011-02-11  Adam Klein  <adamk@chromium.org>

        Reviewed by Darin Adler.

        Check for empty scheme before accessing URLSchemeMaps in SchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=54304

        This avoids potential crashes in HashMap, as WTF's StringHash doesn't
        accept empty Strings.

        * platform/SchemeRegistry.cpp:
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsNoAccess):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsSecure):
        (WebCore::SchemeRegistry::shouldLoadURLSchemeAsEmptyDocument):

2011-02-11  Adam Klein  <adamk@chromium.org>

        Reviewed by Darin Fisher.

        [fileapi] Add support for filesystem: URI handling
        https://bugs.webkit.org/show_bug.cgi?id=53529

        There are two major parts to this patch: one is to add an
        implementation of Entry.toURI to the FileSystem API.
        The other is to implement security origin checking for this
        new scheme.

        All changes are guarded by the FILE_SYSTEM feature. An accompanying
        Chromium change, to support loading of filesystem: URIs, has recently
        been submitted as Chromium r74082.

        Spec:
          http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#methods-2
        Proposed URI format, and discussion of security origin issues:
          http://lists.w3.org/Archives/Public/public-webapps/2011JanMar/0218.html

        Tests: fast/filesystem/directory-entry-to-uri.html
               fast/filesystem/file-entry-to-uri.html
               fast/filesystem/filesystem-uri-origin.html
               http/tests/security/filesystem-iframe-from-remote.html

        * fileapi/Entry.cpp:
        (WebCore::Entry::toURI):
        * fileapi/Entry.h:
        * fileapi/Entry.idl:
        - Added toURI method to the IDL, omitting the MIME type argument
          specified in the spec as it will soon be removed.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        - crack the filesystem: URI to get at the origin of the site
        (WebCore::SecurityOrigin::canDisplay):
        - canDisplay for filesystem: URIs is equivalent to canRequest
        * platform/AsyncFileSystem.cpp:
        (WebCore::AsyncFileSystem::create):
        (WebCore::AsyncFileSystem::openFileSystem):
        * platform/AsyncFileSystem.h:
        (WebCore::AsyncFileSystem::type):
        - Exposed filesystem type to allow toURI to use it as part of the
          path.
        (WebCore::AsyncFileSystem::AsyncFileSystem):
        * platform/SchemeRegistry.cpp:
        (WebCore::canDisplayOnlyIfCanRequestSchemes):
        (WebCore::SchemeRegistry::canDisplayOnlyIfCanRequest):
        (WebCore::SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest):
        - Generalized canDisplayOnlyIfCanRequest as it applies to both
          filesystem: and blob: URIs.
        * platform/SchemeRegistry.h:

2011-02-11  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8961061> CrashTracer: [USER] 
        1 crash at com.apple.WebCore: 
        -[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:] + 62

        Must check for null _animator.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterControllerDelegate scrollAnimatorDestroyed]):
        (-[ScrollbarPainterControllerDelegate contentAreaRectForScrollerImpPair:]):
        (-[ScrollbarPainterControllerDelegate inLiveResizeForScrollerImpPair:]):
        (-[ScrollbarPainterControllerDelegate mouseLocationInContentAreaForScrollerImpPair:]):
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):

2011-02-11  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Throw exception when AudioContext's createBuffer() fails to properly decode audio file data
        https://bugs.webkit.org/show_bug.cgi?id=54158

        No new tests since audio API is not yet implemented.

        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        (WebCore::JSAudioContext::createBuffer):
        * bindings/v8/custom/V8AudioContextCustom.cpp:
        (WebCore::V8AudioContext::createBufferCallback):
        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::createBusFromInMemoryAudioFile):
        * webaudio/AudioContext.idl:

2011-02-11  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        Fix toDataURL() to use device->readPixels() if need be, rather than always dereferencing
        the address returned by getPixels() (as the device may not be backed by a CPU bitmap)
        https://bugs.webkit.org/show_bug.cgi?id=54224

        No new tests. Existing canvas tests exercise this...
        fast/canvas/script-tests/canvas-createPattern-fillRect-shadow.html

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::toDataURL):

2011-02-11  Andrew Wason  <rectalogic@rectalogic.com>

        Reviewed by David Levin.

        Files missing ENABLE_VIDEO #ifdef
        https://bugs.webkit.org/show_bug.cgi?id=53390

        No new tests.

        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
          Wrap methods and declarations that use HTMLVideoElement
          with #if ENABLE(VIDEO).

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

        Unreviewed, rolling out r78331.
        http://trac.webkit.org/changeset/78331
        https://bugs.webkit.org/show_bug.cgi?id=54295

        This patch broke 11 tests in GTK bots (Requested by svillar on
        #webkit).

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_name):
        (webkit_accessible_detach):

2011-02-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GDOM] Video element needs proper wrapping
        https://bugs.webkit.org/show_bug.cgi?id=54231

        Use the same strategy as the one used for the audio tag to wrap
        video as well. No layout tests because this only adds API.

        * bindings/gobject/GNUmakefile.am:
        * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp:
        (WebKit::createVideoWrapper):
        (WebKit::createHTMLElementWrapper):

2011-02-11  Dirk Schulze  <krit@webkit.org>

        Reviewed by Andreas Kling.

        SVGStyledElement::fillAttributeToPropertyTypeMap triggers a clang warning (-Woverloaded-virtual)
        https://bugs.webkit.org/show_bug.cgi?id=54259

        Renamed fillAttributeToPropertyTypeMap with passed map to fillPassedAttributeToPropertyTypeMap to
        avoid overloading a virtual function.

        No change of functionality. Just fixing a build warning, so no new tests.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::fillAttributeToPropertyTypeMap):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::fillAttributeToPropertyTypeMap):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::fillAttributeToPropertyTypeMap):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::fillAttributeToPropertyTypeMap):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::fillPassedAttributeToPropertyTypeMap):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::fillAttributeToPropertyTypeMap):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::fillAttributeToPropertyTypeMap):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::fillAttributeToPropertyTypeMap):
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::fillPassedAttributeToPropertyTypeMap):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::fillAttributeToPropertyTypeMap):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::fillAttributeToPropertyTypeMap):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::fillAttributeToPropertyTypeMap):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::fillAttributeToPropertyTypeMap):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::fillAttributeToPropertyTypeMap):
        * svg/SVGMissingGlyphElement.cpp:
        (WebCore::SVGMissingGlyphElement::fillAttributeToPropertyTypeMap):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::fillAttributeToPropertyTypeMap):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::fillAttributeToPropertyTypeMap):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::fillAttributeToPropertyTypeMap):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::fillAttributeToPropertyTypeMap):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::fillAttributeToPropertyTypeMap):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::fillAttributeToPropertyTypeMap):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::fillPassedAttributeToPropertyTypeMap):
        * svg/SVGStyledElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::fillAttributeToPropertyTypeMap):
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::fillPassedAttributeToPropertyTypeMap):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::fillPassedAttributeToPropertyTypeMap):
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::fillAttributeToPropertyTypeMap):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::fillAttributeToPropertyTypeMap):
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::fillAttributeToPropertyTypeMap):

2011-02-11  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] click on error message in console doesn't scroll into view
        https://bugs.webkit.org/show_bug.cgi?id=54089

        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):
        (WebInspector.Drawer.prototype.hide):
        (WebInspector.Drawer.prototype.resize):
        (WebInspector.Drawer.prototype.immediatelyFinishAnimation):
        (WebInspector.Drawer.prototype._cancelAnimationIfNeeded):
        (WebInspector.Drawer.prototype._animateDrawerHeight.animationFinished):
        (WebInspector.Drawer.prototype._animateDrawerHeight):
        (WebInspector.Drawer.prototype._statusBarDragging):
        * inspector/front-end/inspector.js:
        (WebInspector.animateStyle):
        (WebInspector.animateStyle.forceComplete):
        (WebInspector.animateStyle.cancel):
        (WebInspector.showSourceLine):

2011-02-10  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Make DocumentWriter a member of DocumentLoader
        instead of FrameLoader.
        https://bugs.webkit.org/show_bug.cgi?id=50489

        Refactor, no new tests.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::explicitClose):
        (WebCore::Document::lastModified):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::updateURLForPushOrReplaceState):
        * dom/Document.h:
        (WebCore::Document::setDocumentLoader):
        (WebCore::Document::loader):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::setFrame):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::writer):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/DocumentWriter.h:
        (WebCore::DocumentWriter::setFrame):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::notifier):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2011-02-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make InspectorAgent own sub-agents, align agent creation/deletion routines.
        https://bugs.webkit.org/show_bug.cgi?id=54227

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::domContentLoadedEventFired):
        (WebCore::InspectorAgent::loadEventFired):
        (WebCore::InspectorAgent::startTimelineProfiler):
        (WebCore::InspectorAgent::stopTimelineProfiler):
        * inspector/InspectorAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::startListening):
        (WebCore::InspectorDOMAgent::stopListening):
        (WebCore::InspectorDOMAgent::mainDOMContentLoaded):
        (WebCore::InspectorDOMAgent::loadEventFired):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore::InspectorDOMStorageAgent::create):
        * inspector/InspectorDOMStorageResource.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        (WebCore::InspectorDatabaseAgent::selectDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        * inspector/InspectorDatabaseAgent.h:
        (WebCore::InspectorDatabaseAgent::FrontendProvider::create):
        (WebCore::InspectorDatabaseAgent::FrontendProvider::~FrontendProvider):
        (WebCore::InspectorDatabaseAgent::FrontendProvider::frontend):
        (WebCore::InspectorDatabaseAgent::FrontendProvider::clearFrontend):
        (WebCore::InspectorDatabaseAgent::FrontendProvider::FrontendProvider):
        (WebCore::InspectorDatabaseAgent::create):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::loadEventFiredImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::domContentLoadedEventFired):
        (WebCore::InspectorInstrumentation::loadEventFired):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        (WebCore::InspectorState::mute):
        (WebCore::InspectorState::updateCookie):
        * inspector/InspectorState.h:
        (WebCore::InspectorState::~InspectorState):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::restore):
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::didCommitLoad):
        (WebCore::InspectorTimelineAgent::setFrontend):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::create):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):

2011-02-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: command line API $0 regressed.
        https://bugs.webkit.org/show_bug.cgi?id=54283

        * inspector/InjectedScriptSource.js:

2011-02-11  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Andreas Kling.

        [Qt][S60] Vertical borders of buttons and frames are misaligned
        https://bugs.webkit.org/show_bug.cgi?id=51169

        Force anti-aliasing for lines and rects when using OpenVG backend on Symbian.
        OpenVG cannot guarantee rendering to be on pixel in floating point co-ordinates
        without anti-aliasing. Patch idea by Laszlo Agocs.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):

2011-02-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] events missing when a document is (re)loaded
        https://bugs.webkit.org/show_bug.cgi?id=25831

        Make sure webArea returns a proper name and that a signal
        'state-change::defunct' is emitted when detaching the wrapper.

        Test: platform/gtk/accessibility/document-reload-events.html

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_name): Returns the current document's title
        as fallback mechanism for webArea objects.
        (webkit_accessible_detach): Emit 'state-change::defunct' function
        as soon as the wrapper is detached from the related core object.

2011-02-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: command line's API inspect() is broken.
        https://bugs.webkit.org/show_bug.cgi?id=54275

        Test: inspector/command-line-api.html

        * inspector/InjectedScriptSource.js:

2011-02-11  Adam Barth  <abarth@webkit.org>

        Turns out window.crypto is supposed to be readonly.

        * page/DOMWindow.idl:

2011-02-11  Adam Barth  <abarth@webkit.org>

        Actually add Crypto.cpp to the Windows build.  I'm terrible.

        * WebCore.vcproj/WebCore.vcproj:

2011-02-11  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Windows build.  Apparently we don't support
        conditional attributes on functions.  This patch makes the whole Crypto
        interface conditional on ArrayBuffer support.

        * page/DOMWindow.idl:
        * page/Crypto.cpp:
        * page/Crypto.h:
        * page/Crypto.idl:

2011-02-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        Enable ancestor identifier filtering for tree building
        https://bugs.webkit.org/show_bug.cgi?id=54241
        
        Call CSSStyleSelector::push/popParent() during tree building too, fix up the parent
        element stack as needed.
        
        This roughly halves the remaining time in style matching over a typical page load.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::pushParentStackFrame):
        (WebCore::CSSStyleSelector::popParentStackFrame):
        (WebCore::CSSStyleSelector::pushParent):
        (WebCore::CSSStyleSelector::popParent):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::ParentStackFrame::ParentStackFrame):
        * dom/Document.h:
        (WebCore::Document::styleSelectorIfExists):
        * dom/Element.cpp:
        (WebCore::Element::beginParsingChildren):
        (WebCore::Element::finishParsingChildren):
        * dom/Element.h:

2011-02-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        WebKit should have a cryptographic RNG
        https://bugs.webkit.org/show_bug.cgi?id=22049

        Add crypto.getRandomValues.  Yes, all these diffs are required to
        expose a single function to the DOM.

        Test: security/crypto-random-values.html

        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * ForwardingHeaders/wtf/CryptographicallyRandomNumber.h: Added.
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * config.h:
        * page/Crypto.cpp: Added.
        (WebCore::Crypto::Crypto):
        (WebCore::Crypto::getRandomValues):
        * page/Crypto.h: Added.
        (WebCore::Crypto::create):
        * page/Crypto.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::crypto):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalCrypto):
        * page/DOMWindow.idl:

2011-02-11  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix.

        [GTK] Build break with 2.18.3
        https://bugs.webkit.org/show_bug.cgi?id=54057

        * platform/gtk/ScrollbarThemeGtk2.cpp: Include GtkVersioning.h

2011-02-11  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Adam Barth.

        Templatize KURLGooglePrivate::init
        https://bugs.webkit.org/show_bug.cgi?id=53749

        No new tests. Refactoring.

        * platform/KURLGoogle.cpp:
        (WebCore::KURLGooglePrivate::init):
        * platform/KURLGooglePrivate.h:

2011-02-10  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Seidel.

        Convert ContainerNode::firstElementChild() to a free function.
        https://bugs.webkit.org/show_bug.cgi?id=54269

        No new tests. No change in behavior.
        
        It seemed incorrect to have a method on ContainerNode that had the
        concept of an Element but couldn't return an Element*, but a method on
        Element could not be called by holders of ContainerNodes or other
        non-Element ContainerNode subclasses. A free function can both return
        an Element* and be called by anyone with a ContainerNode*.

        * dom/ContainerNode.h:
        (WebCore::ContainerNode::lastChild):
        (WebCore::Node::lastChild):
        * dom/Document.cpp:
        (WebCore::Document::cacheDocumentElement):
        * dom/Element.cpp:
        (WebCore::Element::firstElementChild):
        * dom/Element.h:
        (WebCore::firstElementChild):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):

2011-02-10  Mads Ager  <ager@chromium.org>

        Reviewed by Nate Chapin.

        [V8] Don't crash on exception getting event handler function
        https://bugs.webkit.org/show_bug.cgi?id=54216

        Check for exceptions when attempting to get the handleEvent property
        of an event-handler object.

        Test: fast/dom/exception-getting-event-handler.html

        * bindings/v8/V8EventListener.cpp:
        (WebCore::V8EventListener::getListenerFunction):

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

        Reviewed by James Robinson.

        [Chromium] Layout Test canvas/philip/tests/2d.composite.globalAlpha.fill.html with --accelerated-2d-canvas.
        https://bugs.webkit.org/show_bug.cgi?id=53857

        globalAlpha is not applied to fillPath() and fillRect().

        Test: fast/canvas/2d.composite.globalAlpha.fillPath.html and canvas/philip/tests/2d.composite.globalAlpha.fill.html with --accelerated-2d-canvas.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::State::applyAlpha): Append a new function to apply global alpha when fillRect() and fillPath() are called.
        (WebCore::GLES2Canvas::fillRect): Global alpha is applied to m_fillColor.
        (WebCore::GLES2Canvas::fillPath): Global alpha is applied to m_fillColor.

2011-02-10  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        Remove an unneeded argument from HTMLDocument::create().
        https://bugs.webkit.org/show_bug.cgi?id=54268
        
        Now that HTMLTreeBuilder no longer uses a dummy HTMLDocument for
        fragment parsing, there isn't a need to explicitly specify a baseURL
        when constructing an HTMLDocument. We can remove the unneeded argument.
        
        Also fix some style issues in Document.h and HTMLDocument.h caught by
        check-webkit-style.

        No new tests. No change in behavior.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):

2011-02-10  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Cached JavaScript Parser Data Being Left in Memory Cache
        https://bugs.webkit.org/show_bug.cgi?id=54245

        Added logic in CachedScript to clear SourceProviderCache data in
        destroyDecodedData().  Added and changed CachedScript timeout to
        act similar to CachedImage.  Changed didAddClient to call super
        class method instead of duplicating the logic in the derived
        classes.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didAddClient):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::didAddClient):
        (WebCore::CachedScript::allClientsRemoved):
        (WebCore::CachedScript::script):
        (WebCore::CachedScript::destroyDecodedData):
        * loader/cache/CachedScript.h:

2011-02-10  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by David Levin.

        Fix style in KURLGooglePrivate
        https://bugs.webkit.org/show_bug.cgi?id=54228

        Replace occurrences of NULL with 0, '\0' or null (as applicable),
        to appease check-webkit-style.

        No new tests. This is a style fix.

        * platform/KURLGoogle.cpp:
        * platform/KURLGooglePrivate.h:

2011-02-10  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
        https://bugs.webkit.org/show_bug.cgi?id=48719
        
        The HTML5 fragment parsing algorithm specifies that a new Document
        should be created to serve as the temporary parent of fragment nodes
        during parsing. Document creation is expensive and accounts for ~38% of
        the Peacekeeper DOM performance regression. Avoid the cost of creating
        a dummy document by using the already-created DocumentFragment as the
        root node during fragment parsing.
        
        With this patch, the regression in Peacekeeper from Safari 5.0.3 to ToT
        is ~24%.

        Test: fast/parser/fragment-parser-doctype.html

        * dom/ContainerNode.h:
        (WebCore::ContainerNode::firstElementChild): Add a method that returns
        the first element-typed child from a ContainerNode.
        * dom/Document.cpp:
        (WebCore::Document::cacheDocumentElement): Call
        ContainerNode::firstElementChild() to retrieve and cache the document
        element.
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::HTMLConstructionSite): Initialize the
        root ContainerNode.
        (WebCore::HTMLConstructionSite::detach): Clear the reference to the
        root ContainerNode.
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        Attach the new element to the root ContainerNode.
        (WebCore::HTMLConstructionSite::insertDoctype): Ditto.
        (WebCore::HTMLConstructionSite::insertCommentOnDocument): Ditto.
        * html/parser/HTMLConstructionSite.h: Store a pointer to a
        ContainerNode that will be used as the root node for document parsing.
        This node might or might not be the same as m_document.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): Initialize the
        HTMLConstructionSite with the correct root ContainerNode based on
        whether or not we're parsing a fragment.
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
        Remove m_dummyDocumentForFragmentParsing.
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished): If the
        fragment has a context element, store only the children of the root
        element (HTML5 Section 10.4, Step 7).
        * html/parser/HTMLTreeBuilder.h:

2011-02-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Oliver Hunt.

        Speculative fix for <rdar://problem/8971107> CrashTracer: 6 crashes
        in WebProcess at com.apple.AppKit: 
        -[NSAnimation(NSInternal) _advanceTimeWithTimer:] + 154

        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPartAnimation scrollAnimatorDestroyed]):

2011-02-09  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        IndexedDB event targets need to ensure their wrappers aren't garbage collected
        https://bugs.webkit.org/show_bug.cgi?id=54144

        hasActivityPending should return true as long as it's possible that we'll
        fire more event listeners on our event targets. It is still possible for
        user generated events to run into problems, but I'm not sure how to address
        that yet (or how big of a deal it is).

        There's really no way to test this deterministically. Testing by hand makes
        it seem like this patch works as expected though.

        * storage/IDBCursorBackendImpl.cpp:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        (WebCore::IDBDatabase::~IDBDatabase):
        (WebCore::IDBDatabase::hasPendingActivity):
        (WebCore::IDBDatabase::stop):
        * storage/IDBDatabase.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::hasPendingActivity):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::enqueueEvent):
        * storage/IDBRequest.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::finished):
        (WebCore::IDBTransaction::hasPendingActivity):
        (WebCore::IDBTransaction::dispatchEvent):
        (WebCore::IDBTransaction::canSuspend):
        (WebCore::IDBTransaction::contextDestroyed):
        (WebCore::IDBTransaction::enqueueEvent):
        * storage/IDBTransaction.h:

2011-02-10  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] create pkg-config files for mingw
        https://bugs.webkit.org/show_bug.cgi?id=54238

        (mingw is mostly the same as unix)

        This change was applied in the Qt repository (qt/src/3rdparty/webkit),
        so we should do the same here in QtWebKit.

        Patch by Mark Brand <mabrand@mabrand.nl>, reviewed (there) by
        Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
        45fe2dddc3a0677b9ec9fce09f07cd4129e37afa

        * WebCore.pro:

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

        Reviewed by Antti Koivisto.

        RenderStyle: Remove duplicate comparison of InheritedFlags::_text_transform
        https://bugs.webkit.org/show_bug.cgi?id=54246

        * rendering/style/RenderStyle.h:

2011-02-10  Dirk Schulze  <krit@webkit.org>

        Reviewed by Andreas Kling.

        SVG animation avoid unnecessary adjust for currentColor
        https://bugs.webkit.org/show_bug.cgi?id=54243

        At the moment we try to adjust every animation value for currentColor - independent of the animation type.
        Since the value is a string and the target element may needs to get called by getElementById, this could
        be an expensive and unnecessary operation. Also after we adjust for currentColor, we save the result back
        as a string and parse it to Color afterwards again.
        With the patch we just adjust an animation value, if we use color animation. The color won't get saved and
        parsed as a string again.

        No change of functionality, no new tests.

        * svg/SVGAnimateElement.cpp:
        (WebCore::adjustForCurrentColor):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::calculateFromAndByValues):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::startedActiveInterval):

2011-02-10  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Remove the use of deprecated qFindChildren()
        https://bugs.webkit.org/show_bug.cgi?id=54232

        This was applied on the Qt repository and affects QtWebKit there.
        (13833beb641289c45faed337848d37280195aadc)

        The side effect of this change is that we won't be able to build
        QtWebKit with MSVC 6, as it doesn't support member template functions
        (not sure if that's possible today anyway).

        Original patch from Olivier Goffart <olivier.goffart@nokia.com>, with
        review reported as being from the mailing list.

        The changes are result of the following commands:

            git grep -O"sed -i 's/qF\(indChildr*e*n*<[^>]*>\)(this,* */f\\1(/'" qFindChild
            git grep -O"sed -i 's/qF\(indChildr*e*n*<[^>]*>\)(&\([^\(),]*\),* */\\2.f\\1(/'" qFindChild
            git grep -O"sed -i 's/qF\(indChildr*e*n*<[^>]*>\)(\([^\(),]*()\),* */\\2->f\\1(/'" qFindChild
            git grep -O"sed -i 's/qF\(indChildr*e*n*<[^>]*>\)(\([^\(),]*\):\([^\(),]*\),* */(\\2:\\3)->f\\1(/'" qFindChild
            git grep -O"sed -i 's/qF\(indChildr*e*n*<[^>]*>\)(\([^\(),]*\),* */\\2->f\\1(/'" qFindChild

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

2011-02-10  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Rename build target from "embedded" to "qpa"
        https://bugs.webkit.org/show_bug.cgi?id=54233

        This flag is used by Qt's configure script to enable a QPA build
        ("QPA is a window system agnostic implementation of Qt" --
        previously known as lighthouse).

        On the Qt repository, this was changed by two commits:

        13a0b4935900093607f2b3b7688e1452d22770fd
        (from embedded to embedded_lite)

        9716e12e0f5590ebc23ad9fb7ba75c6a3c5aadab
        (from embedded_lite to qpa)

        * WebCore.pro:

2011-02-10  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Incorporate algorithm for processing paths into GPU-renderable triangle meshes
        https://bugs.webkit.org/show_bug.cgi?id=45521

        Adding an implementation of Loop and Blinn's GPU accelerated path
        rendering algorithm from GPU Gems 3. This implementation pays
        particular attention to the efficiency of the curve subdivision
        phase needed for correct rendering. It utilizes the OpenGL utility
        library tessellator for triangulation of the interior of the
        shape. The regions handled by Loop and Blinn's algorithm are
        handled by the local triangulator previously incorporated.

        No tests yet; pixel tests will eventually be used to verify this
        algorithm and prevent regressions.

        * platform/graphics/gpu/LoopBlinnPathProcessor.cpp: Added.
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::Segment):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::setup):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::kind):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::getPoint):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::next):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::prev):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::setNext):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::setPrev):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::contour):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::subdivide):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::boundingBox):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::numCrossingsForXRay):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::numberOfTriangles):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::getTriangle):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::numberOfInteriorVertices):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::getInteriorVertex):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::markedForSubdivision):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::setMarkedForSubdivision):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::toString):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::computeBoundingBox):
        (WebCore::LoopBlinnPathProcessorImplementation::Contour::Contour):
        (WebCore::LoopBlinnPathProcessorImplementation::Contour::add):
        (WebCore::LoopBlinnPathProcessorImplementation::Contour::subdivide):
        (WebCore::LoopBlinnPathProcessorImplementation::Contour::begin):
        (WebCore::LoopBlinnPathProcessorImplementation::Contour::end):
        (WebCore::LoopBlinnPathProcessorImplementation::Contour::isOrientedCounterClockwise):
        (WebCore::LoopBlinnPathProcessorImplementation::Contour::setIsOrientedCounterClockwise):
        (WebCore::LoopBlinnPathProcessorImplementation::Contour::boundingBox):
        (WebCore::LoopBlinnPathProcessorImplementation::Contour::fillSide):
        (WebCore::LoopBlinnPathProcessorImplementation::Contour::setFillSide):
        (WebCore::LoopBlinnPathProcessorImplementation::Segment::triangulate):
        (WebCore::LoopBlinnPathProcessor::LoopBlinnPathProcessor):
        (WebCore::LoopBlinnPathProcessor::~LoopBlinnPathProcessor):
        (WebCore::LoopBlinnPathProcessor::process):
        (WebCore::LoopBlinnPathProcessor::buildContours):
        (WebCore::LoopBlinnPathProcessor::allSegmentsOverlappingY):
        (WebCore::LoopBlinnPathProcessor::determineSidesToFill):
        (WebCore::LoopBlinnPathProcessor::determineOrientation):
        (WebCore::SweepData::SweepEvent::SweepEvent):
        (WebCore::SweepData::SweepEvent::setup):
        (WebCore::SweepData::SweepEvent::x):
        (WebCore::SweepData::SweepEvent::entry):
        (WebCore::SweepData::SweepEvent::interval):
        (WebCore::SweepData::SweepEvent::operator<):
        (WebCore::SweepData::trianglesOverlap):
        (WebCore::LoopBlinnPathProcessor::subdivideCurves):
        (WebCore::LoopBlinnPathProcessor::conditionallySubdivide):
        (WebCore::LoopBlinnPathProcessor::subdivideCurvesSlow):
        (WebCore::TessellationState::vertexCallback):
        (WebCore::TessellationState::combineCallback):
        (WebCore::TessellationState::edgeFlagCallback):
        (WebCore::LoopBlinnPathProcessor::tessellateInterior):
        * platform/graphics/gpu/LoopBlinnPathProcessor.h: Added.

2011-02-10  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Remove the use of deprecated qVariant*
        https://bugs.webkit.org/show_bug.cgi?id=54229

        This was applied on the Qt repository and affects QtWebKit there.
        (633f3f45e5420663cf4ceadea79e62fea44cd2eb)

        The side effect of this change is that we won't be able to build
        QtWebKit with MSVC 6, as it doesn't support member template functions
        (not sure if it's possible today anyway).

        Original patch from Olivier Goffart <olivier.goffart@nokia.com>, with
        review reported as being from the mailing list.

        The changes are result of the following commands:

            git grep -O"sed -i 's/qVariantValue</qvariant_cast</'" qVariantValue
            git grep -O"sed -i 's/qVariantSetValue(\([^&*\(),]*\), */\\1.setValue(/'" qVariantSetValue
            git grep -O"sed -i 's/qVariantSetValue *<\([^>]*\)> *(\([^&*\(),]*\), */\\2.setValue<\\1>(/'" qVariantSetValue
            git grep -O"sed -i 's/qVariantCanConvert *<\([^>]*\)> *(\([^&*\(),]*\))/\\2.canConvert<\\1>()/g'" qVariantCanConvert
            git grep -O"sed -i 's/qVariantCanConvert *<\([^>]*\)> *(\([^&*\(),]*([^&*\(),]*)\))/\\2.canConvert<\\1>()/g'" qVariantCanConvert
            git grep -O"sed -i 's/qVariantFromValue\( *[(<]\)/QVariant::fromValue\\1/'" qVariantFromValue

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::commitLoad):

2011-02-10  Nico Weber  <thakis@chromium.org>

        Reviewed by Darin Adler.

        Fix clang warning "WebCore::HTMLAreaElement::getRect' hides overloaded virtual function [-Woverloaded-virtual]"
        https://bugs.webkit.org/show_bug.cgi?id=54221

        The method name conflicts with ContainerNode::getRect() so rename it to
        computeRect(). Rename getPath() to computePath() for consistency as
        well.

        No intended functionality change, covered by existing tests.

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::elementRect):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::computePath):
        (WebCore::HTMLAreaElement::computeRect):
        * html/HTMLAreaElement.h:
        * page/SpatialNavigation.cpp:
        (WebCore::virtualRectForAreaElementAndDirection):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintFocusRing):

2011-02-10  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Default focus ring is too wide
        https://bugs.webkit.org/show_bug.cgi?id=51854

        We now respect the outline property and html.css defines the outline of the focus
        ring to be 5px. This is propagated until GraphicsContext::drawFocusRing which uses
        it as the pen size. We should ignore the size and keep a default one. I also
        reverted the SolidLine to DotLine so that the selection looks nicer. Chromium Skia,
        CG Win, Haiku, WinCE ports also ignore the width.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::drawFocusRingForPath):
        (WebCore::GraphicsContext::drawFocusRing):

2011-02-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Soup] ResourceHandleSoup does not ever call didSendData for file uploads
        https://bugs.webkit.org/show_bug.cgi?id=52090

        Call didSendData as body data is uploaded to the server. This is necessary
        for XHR upload events to function properly.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): Add two new members.
        One to track the total amount of body data and one to track the total amount of
        body data sent so far.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::wroteBodyDataCallback): Added.
        (WebCore::addFormElementsToSoupMessage): Split this out into a helper function.
        Will now now sum the total amount of body data.
        (WebCore::startHttp): Attach a wrote-body-data signal handler.

2011-02-10  Bill Budge  <bbudge@chromium.org>

        Reviewed by David Levin.

        Add fields to ResourceRequest and ResourceResponse in preparation for adding CORS support to AssociatedURLLoader.
        https://bugs.webkit.org/show_bug.cgi?id=53925

        * platform/network/chromium/ResourceRequest.cpp:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/chromium/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::downloadToFile):
        (WebCore::ResourceRequest::setDownloadToFile):
        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::downloadFilePath):
        (WebCore::ResourceResponse::setDownloadFilePath):

2011-02-10  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGAnimateElement needs information about the animated attribute type
        https://bugs.webkit.org/show_bug.cgi?id=53442

        For animations, we need to know the SVG property type for a XML attribute. A global static mapping between
        attribute name and a type is not possible, since one attribute name can be bound to different property types:
        x can be a SVGNumberList, a SVGNumber or a SVGLength. So we have to ask every target element, if it supports
        the animated attribute and of which type it is. Just for CSS properties we can share an explicit mapping between
        the name and the type. This is done in a static map in SVGStyledElement. All other mappings are stored in local static
        HashMaps for all SVG elements with animated properties. These maps get filled once with the fillAttributeToPropertyTypeMap function
        that needs to be included in every SVG element. The function is not virtual in base classes for performance reasons.

        No change of functionality, so no new test cases.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::attributeToPropertyTypeMap):
        (WebCore::SVGAElement::fillAttributeToPropertyTypeMap):
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::attributeToPropertyTypeMap):
        (WebCore::SVGAltGlyphElement::fillAttributeToPropertyTypeMap):
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::determinePropertyType):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::attributeToPropertyTypeMap):
        (WebCore::SVGCircleElement::fillAttributeToPropertyTypeMap):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::attributeToPropertyTypeMap):
        (WebCore::SVGClipPathElement::fillAttributeToPropertyTypeMap):
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::attributeToPropertyTypeMap):
        (WebCore::SVGComponentTransferFunctionElement::fillAttributeToPropertyTypeMap):
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::attributeToPropertyTypeMap):
        (WebCore::SVGCursorElement::fillAttributeToPropertyTypeMap):
        * svg/SVGCursorElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeToPropertyTypeMap):
        (WebCore::SVGElement::animatedPropertyTypeForAttribute):
        * svg/SVGElement.h:
        (WebCore::SVGElement::fillAttributeToPropertyTypeMap):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::attributeToPropertyTypeMap):
        (WebCore::SVGEllipseElement::fillAttributeToPropertyTypeMap):
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEBlendElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEColorMatrixElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEComponentTransferElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::attributeToPropertyTypeMap):
        (WebCore::SVGFECompositeElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEConvolveMatrixElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEDiffuseLightingElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEDisplacementMapElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEFloodElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEGaussianBlurElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEImageElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::attributeToPropertyTypeMap):
        (WebCore::SVGFELightElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEMergeElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEMergeNodeElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEMorphologyElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::attributeToPropertyTypeMap):
        (WebCore::SVGFEOffsetElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::attributeToPropertyTypeMap):
        (WebCore::SVGFESpecularLightingElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::attributeToPropertyTypeMap):
        (WebCore::SVGFETileElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::attributeToPropertyTypeMap):
        (WebCore::SVGFETurbulenceElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::attributeToPropertyTypeMap):
        (WebCore::SVGFilterElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::fillAttributeToPropertyTypeMap):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::attributeToPropertyTypeMap):
        (WebCore::SVGFontElement::fillAttributeToPropertyTypeMap):
        * svg/SVGFontElement.h:
        (WebCore::SVGFontElement::rendererIsNeeded):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::attributeToPropertyTypeMap):
        (WebCore::SVGForeignObjectElement::fillAttributeToPropertyTypeMap):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::attributeToPropertyTypeMap):
        (WebCore::SVGGlyphElement::fillAttributeToPropertyTypeMap):
        * svg/SVGGlyphElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::fillAttributeToPropertyTypeMap):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::attributeToPropertyTypeMap):
        (WebCore::SVGImageElement::fillAttributeToPropertyTypeMap):
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::attributeToPropertyTypeMap):
        (WebCore::SVGLineElement::fillAttributeToPropertyTypeMap):
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::attributeToPropertyTypeMap):
        (WebCore::SVGLinearGradientElement::fillAttributeToPropertyTypeMap):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::attributeToPropertyTypeMap):
        (WebCore::SVGMPathElement::fillAttributeToPropertyTypeMap):
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::attributeToPropertyTypeMap):
        (WebCore::SVGMarkerElement::fillAttributeToPropertyTypeMap):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::attributeToPropertyTypeMap):
        (WebCore::SVGMaskElement::fillAttributeToPropertyTypeMap):
        * svg/SVGMaskElement.h:
        * svg/SVGMissingGlyphElement.cpp:
        (WebCore::SVGMissingGlyphElement::attributeToPropertyTypeMap):
        (WebCore::SVGMissingGlyphElement::fillAttributeToPropertyTypeMap):
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::attributeToPropertyTypeMap):
        (WebCore::SVGPathElement::fillAttributeToPropertyTypeMap):
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::attributeToPropertyTypeMap):
        (WebCore::SVGPatternElement::fillAttributeToPropertyTypeMap):
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::attributeToPropertyTypeMap):
        (WebCore::SVGPolyElement::fillAttributeToPropertyTypeMap):
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::attributeToPropertyTypeMap):
        (WebCore::SVGRadialGradientElement::fillAttributeToPropertyTypeMap):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::attributeToPropertyTypeMap):
        (WebCore::SVGRectElement::fillAttributeToPropertyTypeMap):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::attributeToPropertyTypeMap):
        (WebCore::SVGSVGElement::fillAttributeToPropertyTypeMap):
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::attributeToPropertyTypeMap):
        (WebCore::SVGScriptElement::fillAttributeToPropertyTypeMap):
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::attributeToPropertyTypeMap):
        (WebCore::SVGStopElement::fillAttributeToPropertyTypeMap):
        * svg/SVGStopElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::cssPropertyToTypeMap):
        (WebCore::SVGStyledElement::animatedPropertyTypeForCSSProperty):
        (WebCore::SVGStyledElement::fillAttributeToPropertyTypeMap):
        * svg/SVGStyledElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::fillAttributeToPropertyTypeMap):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::attributeToPropertyTypeMap):
        (WebCore::SVGSwitchElement::fillAttributeToPropertyTypeMap):
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::attributeToPropertyTypeMap):
        (WebCore::SVGSymbolElement::fillAttributeToPropertyTypeMap):
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::attributeToPropertyTypeMap):
        (WebCore::SVGTRefElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::attributeToPropertyTypeMap):
        (WebCore::SVGTSpanElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::attributeToPropertyTypeMap):
        (WebCore::SVGTextElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::attributeToPropertyTypeMap):
        (WebCore::SVGTextPathElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::attributeToPropertyTypeMap):
        (WebCore::SVGTitleElement::fillAttributeToPropertyTypeMap):
        * svg/SVGTitleElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::attributeToPropertyTypeMap):
        (WebCore::SVGUseElement::fillAttributeToPropertyTypeMap):
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::attributeToPropertyTypeMap):
        (WebCore::SVGViewElement::fillAttributeToPropertyTypeMap):
        * svg/SVGViewElement.h:

2011-02-10  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Andreas Kling.

        Fix a Warning after removing FileSystem support for the inspector.

        * WebCore.pro:

2011-02-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Anders Carlsson.

        AX: AX needs to stop using WebCoreViewFactory
        https://bugs.webkit.org/show_bug.cgi?id=54153

        WebKit2 no longer uses WebCoreViewFactory, which means that accessibility code needs
        to get off of it and use WebCoreSystemInterface, like other clients.

        * WebCore.exp.in:
        * accessibility/AXObjectCache.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * accessibility/mac/AccessibilityObjectWrapper.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper unregisterUniqueIdForUIElement]):
        (CFAutoreleaseHelper):
        (AXObjectIsTextMarker):
        (AXObjectIsTextMarkerRange):
        (AXTextMarkerRange):
        (AXTextMarkerRangeStart):
        (AXTextMarkerRangeEnd):
        (textMarkerForVisiblePosition):
        (-[AccessibilityObjectWrapper textMarkerForVisiblePosition:]):
        (visiblePositionForTextMarker):
        (-[AccessibilityObjectWrapper visiblePositionForTextMarker:]):
        (visiblePositionForStartOfTextMarkerRange):
        (visiblePositionForEndOfTextMarkerRange):
        (textMarkerRangeFromMarkers):
        (AXAttributeStringSetElement):
        (-[AccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        (textMarkerRangeFromVisiblePositions):
        (-[AccessibilityObjectWrapper textMarkerRangeFromVisiblePositions:endPosition:]):
        (-[AccessibilityObjectWrapper visiblePositionRangeForTextMarkerRange:]):
        (-[AccessibilityObjectWrapper textMarkerRangeForSelection]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        * editing/mac/SelectionControllerMac.mm:
        (WebCore::accessibilityConvertScreenRect):
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-02-10  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] In trunk with Qt Multimedia the full screen mode doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=54201

        Add files for the fullscreen video playback handling. It also fix
        a missing header.

        * WebCore.pro:

2011-02-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Remove FileSystem support from the inspector.
        https://bugs.webkit.org/show_bug.cgi?id=50695

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.idl:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorFileSystemAgent.cpp: Removed.
        * inspector/InspectorFileSystemAgent.h: Removed.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl):
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        (WebCore::InspectorInstrumentation::markResourceAsCachedImpl):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveContentLengthImpl):
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::scriptImportedImpl):
        (WebCore::InspectorInstrumentation::networkStateChangedImpl):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatusImpl):
        (WebCore::InspectorInstrumentation::retrieveResourceAgent):
        * inspector/front-end/FileSystemView.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

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

        Unreviewed, rolling out r78219.
        http://trac.webkit.org/changeset/78219
        https://bugs.webkit.org/show_bug.cgi?id=54215

        breaks editing/style/iframe-onload-crash.html on GTK 64-bit
        Debug (Requested by philn-tp on #webkit).

        * dom/Document.h:
        * dom/DocumentFragment.h:
        * dom/Element.h:
        * dom/Node.h:
        * dom/Text.h:
        * editing/htmlediting.cpp:
        (WebCore::editingIgnoresContent):
        (WebCore::canHaveChildrenForEditing):
        * editing/htmlediting.h:
        * html/HTMLBRElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLDataGridElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFrameElementBase.h:
        * html/HTMLHRElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLMeterElement.h:
        * html/HTMLOutputElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLProgressElement.h:
        * wml/WMLBRElement.h:
        * wml/WMLDoElement.h:
        * wml/WMLImageElement.h:
        * wml/WMLInputElement.h:
        * wml/WMLSelectElement.h:

2011-02-10  Andras Becsi  <abecsi@webkit.org>

        Rubber-stamped by Csaba Osztrogonác.

        [Qt][V8] Fix the build.

        No new tests needed.

        * bindings/v8/WorkerContextExecutionProxy.cpp: add missing CString header.
        * loader/cache/CachedScript.h: do not use extra qualification for base class enum.

2011-02-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [STYLES] Suggest CSS property values once Up/Down is pressed with an empty input
        https://bugs.webkit.org/show_bug.cgi?id=54205

        * inspector/front-end/CSSCompletions.js:
        (WebInspector.CSSCompletions):
        (WebInspector.CSSCompletions.prototype._firstIndexOfPrefix):
        * inspector/front-end/CSSKeywordCompletions.js:
        (WebInspector.CSSKeywordCompletions.forProperty):
        * inspector/front-end/StylesSidebarPane.js:
        ():
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.complete):

2011-02-10  Renata Hodovan  <reni@webkit.org>

        Reviewed by Dirk Schulze.

        SVGFESpecularLightingElement doesn't support dynamic invalidation, when attributes change.
        https://bugs.webkit.org/show_bug.cgi?id=54186

        The dynamic changes are captured by the svgAttributeChange function, and invalidate the filter primitive if necessary.

        Tests: svg/dynamic-updates/SVGFESpecularLightingElement-dom-in-attr.html
               svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularConstant-attr.html
               svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularExponent-attr.html
               svg/dynamic-updates/SVGFESpecularLightingElement-dom-suraceScale-attr.html
               svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-in-prop.html
               svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularConstant-prop.html
               svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularExponent-prop.html
               svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-suraceScale-prop.html

        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::svgAttributeChanged):
        * svg/SVGFESpecularLightingElement.h:

2011-02-10  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Error messages are not displayed for the last line in a script
        https://bugs.webkit.org/show_bug.cgi?id=54204

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.addMessage):
        (WebInspector.SourceFrame.prototype._addMessageToSource):
        (WebInspector.SourceFrame.prototype._createConditionElement):

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

        Reviewed by Eric Seidel.

        Make canHaveChildrenForEditing more efficient
        https://bugs.webkit.org/show_bug.cgi?id=53564

        Improved the performance (1-2% in release and 20% in debug) by adding virtual member function
        canContainRangeEndPoint to Node. It returns true whenever the associated node can have be a container
        node for a position.

        As of this revision, canContainRangeEndPoint returns true on Document, DocumentFragment, Text nodes
        and any elements except:

        HTML: applet, br, button, datagrid, embed, frame, frameset, hr, img, input,
              meter, object, output, progress, and select.

        WML: br, do, img, input, and select.

        No new tests are added since this change cannot be tested directly.

        * dom/Document.h:
        (WebCore::Document::canContainRangeEndPoint): Added; returns false.
        * dom/DocumentFragment.h:
        (WebCore::DocumentFragment::canContainRangeEndPoint): Added; returns true.
        * dom/Element.h:
        (WebCore::Element::canContainRangeEndPoint): Ditto.
        * dom/Node.h:
        (WebCore::Node::canContainRangeEndPoint): Added; returns false.
        * dom/Text.h:
        (WebCore::Text::canContainRangeEndPoint): Added; returns true.
        * editing/htmlediting.cpp: Removed editingIgnoresContent and canHaveChildrenForEditing.
        * editing/htmlediting.h:
        (WebCore::editingIgnoresContent): Moved from htmlediting.cpp; made it inline.
        (WebCore::canHaveChildrenForEditing): Ditto.
        * html/HTMLBRElement.h:
        (WebCore::HTMLBRElement::canContainRangeEndPoint): Added; returns false.
        * html/HTMLButtonElement.h:
        (WebCore::HTMLButtonElement::canContainRangeEndPoint): Ditto.
        * html/HTMLDataGridElement.h:
        (WebCore::HTMLDataGridElement::canContainRangeEndPoint): Ditto.
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElementWithState::canContainRangeEndPoint): Ditto.
        * html/HTMLFrameElementBase.h:
        (WebCore::HTMLFrameElementBase::canContainRangeEndPoint): Ditto.
        * html/HTMLHRElement.h:
        (WebCore::HTMLHRElement::canContainRangeEndPoint): Ditto.
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::canContainRangeEndPoint): Ditto.
        * html/HTMLMeterElement.h:
        (WebCore::HTMLMeterElement::canContainRangeEndPoint): Ditto.
        * html/HTMLOutputElement.h:
        (WebCore::HTMLOutputElement::canContainRangeEndPoint): Ditto.
        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::canContainRangeEndPoint): Ditto.
        * html/HTMLProgressElement.h:
        (WebCore::HTMLProgressElement::canContainRangeEndPoint): Ditto.
        * wml/WMLBRElement.h:
        (WebCore::WMLBRElement::canContainRangeEndPoint): Ditto.
        * wml/WMLDoElement.h:
        (WebCore::WMLDoElement::canContainRangeEndPoint): Ditto.
        * wml/WMLImageElement.h:
        (WebCore::WMLImageElement::canContainRangeEndPoint): Ditto.
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::canContainRangeEndPoint): Ditto.
        * wml/WMLSelectElement.h:
        (WebCore::WMLSelectElement::canContainRangeEndPoint): Ditto.

2011-02-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: define interface per domain in Inspector.idl.
        https://bugs.webkit.org/show_bug.cgi?id=54135

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:

2011-02-10  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: [regression] Fix syncing heights of the gutter and main panel lines, and add 2px padding-left
        https://bugs.webkit.org/show_bug.cgi?id=54098

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype._updatePanelOffsets):
        (WebInspector.TextViewer.prototype._syncScroll):
        (WebInspector.TextViewer.prototype._syncDecorationsForLine):
        (WebInspector.TextEditorChunkedPanel.prototype._totalHeight):
        (WebInspector.TextEditorChunkedPanel.prototype.resize):
        (WebInspector.TextEditorGutterPanel):
        (WebInspector.TextEditorGutterChunk.prototype.set expanded):
        (WebInspector.TextEditorGutterChunk.prototype.get height):
        (WebInspector.TextEditorMainChunk.prototype.get height):
        * inspector/front-end/textViewer.css:
        (.webkit-line-content):

2011-02-10  takano takumi  <takano@apple.com>

        Reviewed by Dan Bernstein.

        A full-width character rotated leftward 90 degrees in text-combine
        https://bugs.webkit.org/show_bug.cgi?id=54169

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineText):
        - Fixed by resetting font's orientation to horizontal when we decided to make combined text.
        Otherwise the text will be unexpectedly rotated in showGlyphsWithAdvances() in FontMac.mm.

2011-02-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=50306
        <rdar://problem/8976152> REGRESSION: WebChromeClient::shouldReplaceWithGeneratedFileForUpload()
        uses an initialized result value (breaks form submission with clang-built WebKit)

        No new test, because I can't reproduce the observable effect with my gcc build.

        * platform/network/FormData.cpp: (WebCore::FormData::appendKeyValuePairItems): Restore an
        empty path check - an empty path was causing an exception in Foundation.

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

        Reviewed by Pavel Feldman.

        Web Inspector: Network & Resource panels make multiple requests for images with no content
        https://bugs.webkit.org/show_bug.cgi?id=54085

        - Added success parameter to resourceContent
        - NetworkManager.requestContent() now returns empty for zero-length resources, null for errors

        * inspector/Inspector.idl:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::resourceData):
        (WebCore::InspectorResourceAgent::resourceContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.requestContent):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.requestContent):
        (WebInspector.Resource.prototype._contentURL):

2011-02-10  Renata Hodovan  <reni@webkit.org>

        Reviewed by Dirk Schulze.

        Move the light source implementations into their own files.
        https://bugs.webkit.org/show_bug.cgi?id=53996

        Splitting LightSource.cpp into 3 files.

        No new tests are added since this is a refactoring.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/DistantLightSource.cpp: Added.
        (WebCore::DistantLightSource::initPaintingData):
        (WebCore::DistantLightSource::updatePaintingData):
        (WebCore::DistantLightSource::setAzimuth):
        (WebCore::DistantLightSource::setElevation):
        (WebCore::DistantLightSource::externalRepresentation):
        * platform/graphics/filters/LightSource.cpp:
        * platform/graphics/filters/PointLightSource.cpp: Added.
        (WebCore::PointLightSource::initPaintingData):
        (WebCore::PointLightSource::updatePaintingData):
        (WebCore::PointLightSource::setX):
        (WebCore::PointLightSource::setY):
        (WebCore::PointLightSource::setZ):
        (WebCore::operator<<):
        (WebCore::PointLightSource::externalRepresentation):
        * platform/graphics/filters/SpotLightSource.cpp: Added.
        (WebCore::SpotLightSource::initPaintingData):
        (WebCore::SpotLightSource::updatePaintingData):
        (WebCore::SpotLightSource::setX):
        (WebCore::SpotLightSource::setY):
        (WebCore::SpotLightSource::setZ):
        (WebCore::SpotLightSource::setPointsAtX):
        (WebCore::SpotLightSource::setPointsAtY):
        (WebCore::SpotLightSource::setPointsAtZ):
        (WebCore::SpotLightSource::setSpecularExponent):
        (WebCore::SpotLightSource::setLimitingConeAngle):
        (WebCore::operator<<):
        (WebCore::SpotLightSource::externalRepresentation):

2011-02-10  Avi Drissman  <avi@google.com>

        Reviewed by Darin Fisher.

        <option> should implement the dir attribute. Mac Chromium version, followup to r76983, r77654.
        https://bugs.webkit.org/show_bug.cgi?id=50969

        Use manual test Source/WebCore/manual-tests/pop-up-alignment-and-direction.html added in r76983.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::updateFromElement):
        * platform/chromium/PopupMenuChromium.h:

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

        Reviewed by Jeremy Orlow.

        IndexedDB: Update the semantics of put()
        https://bugs.webkit.org/show_bug.cgi?id=54102

        Update the semantics of put: For object stores with auto increment,
        it should be allowed to provide an explicit key, or an in-line key,
        overriding the key generator mechanism.

        This reflects the spec changes suggested here:
        http://www.w3.org/Bugs/Public/show_bug.cgi?id=11976

        Extracting key-selection logic into its own function
        to make it a bit easier on the eyes.

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::selectKeyForPut):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        * storage/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::resetAutoIncrementKeyCache):

2011-02-09  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=54103
        Implement fast path for matching simple selectors
        
        Implement a fast path for single and descendant selectors consisting
        of id, class and tag selectors only.
        
        Selectors like this are marked on style selector initialization. When 
        encountered during style matching they are resolved using a fast path.
        
        Since selectors like this are very common this speeds up style matching
        quite a bit (up to 50% on some sites according to Shark).

        * css/CSSStyleSelector.cpp:
        (WebCore::RuleData::hasFastCheckableSelector):
        (WebCore::RuleData::hasMultipartSelector):
        (WebCore::RuleData::hasTopSelectorMatchingHTMLBasedOnRuleHash):
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::CSSStyleSelector::checkSelector):
        (WebCore::selectorTagMatches):
        (WebCore::isFastCheckableSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::fastCheckSelector):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::isSelectorMatchingHTMLBasedOnRuleHash):
        (WebCore::RuleData::RuleData):
        * css/CSSStyleSelector.h:

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

        Reviewed by Dan Bernstein.

        REGRESSION (r77101) box-shadow sometimes renders incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=54160
        
        Fix an issue when ShadowBlur had a cached image buffer
        that was larger than that of the current shadow being drawn,
        and the current shadow was partially clipped out.
        
        In that situation endShadowLayer() would clip to the image
        buffer, using the size of the buffer (as it must), but failed
        to take into account the fact that we'd only cleared and painted
        into a smaller section of the buffer. So we need to additionally
        constrain the clip to cover only the valid part of the buffer.

        Test: fast/box-shadow/shadow-buffer-partial.html

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::endShadowLayer):

2011-02-09  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix for <rdar://problem/8977051> CrashTracer: 8 crashes 
        in WebProcess at com.apple.WebCore: 
        -[ScrollbarPartAnimation setCurrentProgress:] + 364

        The ScrollbarPartAnimation must be sent by reference!
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):

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

        Reviewed by Darin Adler.

        REGRESSION(r76107): Crash in VisibleSelection::toNormalizedRange
        https://bugs.webkit.org/show_bug.cgi?id=54053

        The bug was caused by RenderBlock::positionForPoint's improperly returning a shadow node inside
        RenderFileUploadControl for hit testing and VisibleSelection::toNormalizedRange's always assuming
        the position variable "s" is not null.

        Fixed the bug by always returning a null position from RenderFileUploadControl::positionForPoint,
        and also exiting early when either "s" or "e" is null in VisibleSelection::toNormalizedRange.

        Test: fast/forms/file-input-hit-test.html

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::toNormalizedRange):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::positionForPoint):
        * rendering/RenderFileUploadControl.h:

2011-02-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Overlay scrollbars crash used with a RenderListBox.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::layout):
        (WebCore::RenderListBox::contentsSize):
        (WebCore::RenderListBox::currentMousePosition):
        (WebCore::RenderListBox::setHasVerticalScrollbar):
        * rendering/RenderListBox.h:
        Implement enough of the ScrollableArea interface to get things generally
        working.

2011-02-09  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for <rdar://problem/8966868> ScrollbarPainterDelegate 
        must return a layer if layer-backed to avoid crashing

        New virtual function scrollbarWillRenderIntoCompositingLayer()
        on ScrollableArea.
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollbarWillRenderIntoCompositingLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::scrollbarWillRenderIntoCompositingLayer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollbarWillRenderIntoCompositingLayer):
        * rendering/RenderListBox.h:

        Clean up unnecessary method declarations and call 
        scrollbarWillRenderIntoCompositingLayer() to deterine if 
        we need to return a layer.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterDelegate layer]):

2011-02-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Replace static_cast<HTMLElement*> with toHTMLElement
        https://bugs.webkit.org/show_bug.cgi?id=54117

        No new tests since no new functionality was introduced.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::addChildren):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::accessibleNameForNode):
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_name):
        (webkit_accessible_get_description):
        * bindings/gobject/WebKitDOMBinding.cpp:
        (WebKit::createWrapper):
        (WebKit::kit):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::toV8):
        * dom/Document.cpp:
        (WebCore::Document::body):
        * dom/Element.cpp:
        (WebCore::Element::deprecatedCreateContextualFragment):
        * dom/Range.cpp:
        (WebCore::Range::createContextualFragment):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi):
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle):
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::shouldSplitTextElement):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        (WebCore::DeleteButtonController::show):
        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::mergeWithNeighboringLists):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::negateStyleRulesThatAffectAppearance):
        (WebCore::ReplaceSelectionCommand::handleStyleSpans):
        (WebCore::ReplaceSelectionCommand::copyStyleToChildren):
        * editing/SelectionController.cpp:
        (WebCore::scanForForm):
        (WebCore::SelectionController::currentForm):
        * editing/htmlediting.cpp:
        (WebCore::enclosingList):
        (WebCore::enclosingListChild):
        (WebCore::embeddedSublist):
        (WebCore::appendedSublist):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendElement):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::checkForNameMatch):
        (WebCore::HTMLCollection::updateNameCache):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setOuterHTML):
        (WebCore::HTMLElement::shadowAncestorOwnerForm):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setOption):
        (WebCore::HTMLSelectElement::setLength):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::createPart):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):

2011-02-09  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        Use Skia's device->readPixels() when its bitmap claims to have no pixels, as this
        handles the case when the device is backed by the GPU.
        Patch developed by bsalomon@google.com

        No new tests. Existing canvas tests suffice
        e.g. LayoutTests/canvas/philip/... 

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):

2011-02-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        document.close shouldn't affect non-script-created parsers
        https://bugs.webkit.org/show_bug.cgi?id=53689

        Tests: fast/frames/document-write-in-iframe-onload-3.html
               fast/parser/iframe-onload-document-close-with-external-script-2.html
               fast/parser/iframe-onload-document-close-with-external-script-3.html
               fast/parser/iframe-onload-document-close-with-external-script.html
               fast/parser/setTimeout-open.html

        Move our implementation of document.close closer to the spec by
        introducing the notion of a script-created parser.  This area of our
        code is somewhat hairy.  It might take a few more iterations before we
        fully come up to spec.

        * dom/Document.cpp:
        (WebCore::Document::setContent):
        (WebCore::Document::open):
        (WebCore::Document::cancelParsing):
        (WebCore::Document::close):
            - Over time, this method should converge to the spec.
        (WebCore::Document::explicitClose):
            - I'm not in love with this name.  Somehow we want to differentiate
              between Document closing itself and the document.close DOM
              method.
        (WebCore::Document::removePendingSheet):
        * dom/Document.h:
        * dom/ScriptableDocumentParser.cpp:
        (WebCore::ScriptableDocumentParser::ScriptableDocumentParser):
        * dom/ScriptableDocumentParser.h:
        (WebCore::ScriptableDocumentParser::setWasCreatedByScript):
        (WebCore::ScriptableDocumentParser::wasCreatedByScript):
            - General nonsense to keep track of whether the parser was created
              by script.
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::hasInsertionPoint):
            - I'm not sure whether this part of the change is 100% correct.  I
              think our notion of the EOF character might be subtly different
              from the notion in the spec.
        * html/parser/HTMLInputStream.h:
        (WebCore::HTMLInputStream::hasInsertionPoint):
            - Remove FIXME because we're fixing that!

2011-02-09  Abhishek Arya  <inferno@chromium.org>

        Reviewed by James Robinson.

        [Chromium] Issue 72387: Integer bounds crash in LayerTilerChromium::resizeLayer
        https://bugs.webkit.org/show_bug.cgi?id=54132
 
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::resizeLayer):

2011-02-09  Xiyuan Xia  <xiyuan@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Use #f7f7f7 for select popup background on chromium/linux
        https://bugs.webkit.org/show_bug.cgi?id=54115

        No new tests since no behavior change.

        * css/themeChromiumLinux.css:
        (select[size="1"] option):

2011-02-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION(HTML 5): HTMLDocumentParser does not report html parse errors to the console
        https://bugs.webkit.org/show_bug.cgi?id=41187

        Wire up a basic HTML parse error message.  There's a lot of room for
        improvement in this area, but this is a start.

        No tests!  See https://bugs.webkit.org/show_bug.cgi?id=54134

        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::parseError):
        * html/parser/HTMLTreeBuilder.h:

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

        Reviewed by Kenneth Russell.

        [Chromium] Issue 58536: Fix Layout Test canvas/philip/tests/2d.imageData.put.alpha.html with --accelerated-2d-canvas.
        https://bugs.webkit.org/show_bug.cgi?id=53757

          This fix is for 2d.imageData.put.alpha.html with --accelerated-2d-canvas. No new tests.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::putUnmultipliedImageData): needs to call syncSoftwareCanvas() to sync between hardware and software.
        (WebCore::ImageBuffer::putPremultipliedImageData): needs to call syncSoftwareCanvas() to sync between hardware and software.


2011-02-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Fix scaling and thread safety of FFTFrameFFTW
        https://bugs.webkit.org/show_bug.cgi?id=54045

        No new tests since audio API is not yet implemented.

        * platform/audio/FFTFrame.h:
        * platform/audio/fftw/FFTFrameFFTW.cpp:
        (WebCore::FFTFrame::FFTFrame):
        (WebCore::FFTFrame::doFFT):
        (WebCore::FFTFrame::doInverseFFT):
        (WebCore::FFTFrame::initialize):
        (WebCore::FFTFrame::cleanup):
        (WebCore::FFTFrame::realData):
        (WebCore::FFTFrame::imagData):
        (WebCore::FFTFrame::fftwPlanForSize):
        * platform/audio/mac/FFTFrameMac.cpp:
        (WebCore::FFTFrame::initialize):
        * platform/audio/mkl/FFTFrameMKL.cpp:
        (WebCore::FFTFrame::initialize):
        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):

2011-02-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: accessibilityShouldUseUniqueId doesn't need to be in the core AX object
        https://bugs.webkit.org/show_bug.cgi?id=54126

        This is a Mac-only accessibility API concept and doesn't belong in the core AX object.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::node):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityShouldUseUniqueId]):

2011-02-09  Nebojsa Ciric  <cira@chromium.org>

        Reviewed by Darin Fisher.

        Implements Locale object of JavaScript internationalization API proposal, as an
        v8 extension. Extension code is hosted in v8 project (src/extensions/experimental/i18n-extension.{cc,h})
        and in this patch we just provide flags, tests and build rules for chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=49414

        Test: fast/js/i18n-bindings-locale.html

        * WebCore.gyp/WebCore.gyp:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::experimentalI18NAPIEnabled):
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setExperimentalI18NAPIEnabled):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::createNewContext):

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

        Reviewed by Darin Adler.

        REGRESSION(r71934): Shadow DOM nodes leak via relatedTarget
        https://bugs.webkit.org/show_bug.cgi?id=52065

        * dom/Node.cpp:
        (WebCore::pullOutOfShadow): Added a helper to move a node to the outermost
            boundary of shadow DOM.
        (WebCore::Node::dispatchMouseEvent): Changed to use pullOutOfShadow.

2011-02-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Add convenience method toHTMLElement(Node*)
        https://bugs.webkit.org/show_bug.cgi?id=54105

        No new tests since no new functionality introduced.

        * html/HTMLElement.h:
        (WebCore::toHTMLElement):

2011-02-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fixed positioned elements at very top or bottom of page remain fixed but clip during rubber-banding
        <rdar://problem/7615997>
        https://bugs.webkit.org/show_bug.cgi?id=54054

        Take the overhang into account when calculating position for elements with position: fixed.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollXForFixedPosition):
        (WebCore::ScrollView::scrollYForFixedPosition):
        (WebCore::ScrollView::scrollOffsetForFixedPosition):
        * platform/ScrollView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer):
        (WebCore::RenderView::mapAbsoluteToLocalPoint):
        (WebCore::RenderView::computeRectForRepaint):

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

        Reviewed by Dirk Schulze.

        Enhance ShadowBlur to tile inset box shadows
        https://bugs.webkit.org/show_bug.cgi?id=51567
        
        Add a tiling code path to ShadowBlur for rendering inset
        box-shadows.

        Test: fast/box-shadow/inset-box-shadows.html
        
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::computeSliceSizesFromRadii): Compute the slice sizes
        for the eight-piece shadow template.
        (WebCore::ShadowBlur::templateSize): Compute the size of the template,
        given the slice sizes.
        (WebCore::ShadowBlur::drawRectShadow): Bail early if layerRect is empty
        (which probably means we're clipped out). Call templateSize() and use
        the result to decide whether to tile.
        (WebCore::ShadowBlur::drawInsetShadow): New method for inset shadows.
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling): Code moved.
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling): The non-tiling code
        path for inset shadows.
        (WebCore::ShadowBlur::drawInsetShadowWithTiling): Fill the shadow template
        buffer, paint the non-blurred area of the destination, and then call drawLayerPieces()
        to paint the eight-piece template image.
        (WebCore::ShadowBlur::drawRectShadowWithTiling): Refactored code, now
        shares the blurring code via blurAndColorShadowBuffer(), and the tiled template
        drawing via drawLayerPieces().
        (WebCore::ShadowBlur::drawLayerPieces): Draw an eight-piece image from the
        shadow template to the destination.
        (WebCore::ShadowBlur::blurAndColorShadowBuffer): Blur the pixels in the image
        buffer, and colorize them using the CompositeSourceIn operation.
        * platform/graphics/ShadowBlur.h:

2011-02-09  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Adam Barth.

        Disable script elements when a CSP header is present
        https://bugs.webkit.org/show_bug.cgi?id=53867

        Tests: http/tests/security/contentSecurityPolicy/no-policy.html
               http/tests/security/contentSecurityPolicy/script-src-in-iframe.html
               http/tests/security/contentSecurityPolicy/script-src-none.html
               http/tests/security/contentSecurityPolicy/script-src-redirect.html

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::shouldLoadExternalScriptFromSrc):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::requestPendingScript):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::canLoadExternalScriptFromSrc):
        * page/ContentSecurityPolicy.h:

2011-02-09  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r78047.

        ContextMenu.cpp and ContextMenuItem.cpp have a USE(CROSS_PLATFORM_CONTEXT_MENUS),
        so they shouldn't cause problems with correct preprocessor defines.

        * CMakeLists.txt:

2011-02-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: InspectorAgent should know nothing about InspectorController instance.

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

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::disconnectFrontend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::restoreInspectorStateFromCookie):

2011-02-09  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: source frame scroll position is not restored.
        https://bugs.webkit.org/show_bug.cgi?id=54101

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.show):
        (WebInspector.SourceFrame.prototype.hide):
        (WebInspector.SourceFrame.prototype.get scrollTop):
        (WebInspector.SourceFrame.prototype.set scrollTop):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.get scrollTop):
        (WebInspector.TextViewer.prototype.set scrollTop):
        (WebInspector.TextViewer.prototype.get scrollLeft):
        (WebInspector.TextViewer.prototype.set scrollLeft):

2011-02-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: follow up on InspectorAgent split -
        removing unnecessary methods from InspectorController.
        https://bugs.webkit.org/show_bug.cgi?id=54093

        * WebCore.exp.in:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::stopUserInitiatedProfiling):
        (WebCore::InspectorAgent::showAndEnableDebugger):
        (WebCore::InspectorAgent::enabled):
        (WebCore::InspectorAgent::showConsole):
        * inspector/InspectorAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::didClearWindowObjectInWorld):
        (WebCore::InspectorController::showConsole):
        (WebCore::InspectorController::enabled):
        (WebCore::InspectorController::inspectedPage):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.cpp:

2011-02-07  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        LayoutTests/animations/play-state.html has wrong behavior with accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=53513

        The PlatformCAAnimation::create() function which took a pointer to another
        PlatformCAAnimation was supposed to make a copy of that passed object.
        But it was doing completely the wrong thing on Mac and was leaking an object
        to boot. And the notion of copying an object using a static creation function
        is wrong in the first place. So I changed it to a member copy() function
        which would create a new PlatformCAAnimation which was a copy of 'this' and
        return it. I changed the implementation on both Mac and Win to match.

        This problem was not caught by DRT, even there is a specific test for it.
        That test just verifies that the higher level logic is working 
        properly, which it is. There's no practical way to find out if the
        layer is currently animating. There is no logic which probes that
        deeply into the layer mechanics.
        
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:

2011-02-09  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed build fix.

        [EFL] Remove double definition of ContextMenu.
        https://bugs.webkit.org/show_bug.cgi?id=50762

        When building with SHARED_CORE enabled, the symbols of ContextMenu
        were both in webkit and webcore. This removes them from webcore and
        shall be put back once the CROSS_PLATFORM_CONTEXT_MENUS is implemented
        in EFL port.

        No new tests because no new functionality.

        * CMakeLists.txt:

2011-02-09  Adam Roben  <aroben@apple.com>

        Windows Production build fix

        * WebCore.vcproj/QTMovieWinCommon.vsprops: Link against
        WebKitSystemInterface$(WebKitConfigSuffix).lib, not just WebKitSystemInterface.lib, so we
        pick up the _debug variant when appropriate.

2011-02-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Hostnames should cannonicalize to lowercase (to match every other browser)
        https://bugs.webkit.org/show_bug.cgi?id=54084

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

2011-02-09  Peter Varga  <pvarga@webkit.org>


        Reviewed by Gavin Barraclough.

        Replace PCRE with Yarr in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=53496

        No new tests needed.

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * ForwardingHeaders/pcre/pcre.h: Removed.
        * ForwardingHeaders/yarr/Yarr.h: Added.
        * ForwardingHeaders/yarr/YarrInterpreter.h: Added.
        * ForwardingHeaders/yarr/YarrPattern.h: Added.
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::Private::create):
        (WebCore::RegularExpression::Private::Private):
        (WebCore::RegularExpression::Private::compile):
        (WebCore::RegularExpression::match):

2011-02-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        [EFL] Add dummy functions for HTML5 Video's control UI
        https://bugs.webkit.org/show_bug.cgi?id=53906

        In WebKit EFL, there are no implementations for HTML5 control UI.
        First, dummy functions are added.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::extraMediaControlsStyleSheet):
        (WebCore::RenderThemeEfl::formatMediaControlsCurrentTime):
        (WebCore::RenderThemeEfl::paintMediaFullscreenButton):
        (WebCore::RenderThemeEfl::paintMediaMuteButton):
        (WebCore::RenderThemeEfl::paintMediaPlayButton):
        (WebCore::RenderThemeEfl::paintMediaSeekBackButton):
        (WebCore::RenderThemeEfl::paintMediaSeekForwardButton):
        (WebCore::RenderThemeEfl::paintMediaSliderTrack):
        (WebCore::RenderThemeEfl::paintMediaSliderThumb):
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderContainer):
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeEfl::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeEfl::paintMediaCurrentTime):
        * platform/efl/RenderThemeEfl.h:

2011-02-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make WebKit's fragment cannonicalization match other browsers
        https://bugs.webkit.org/show_bug.cgi?id=53850

        This doesn't make us match perfectly, but it brings us closer.

        * platform/KURL.cpp:
        (WebCore::appendEscapingBadChars):
        (WebCore::escapeAndAppendFragment):
        (WebCore::KURL::parse):

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

        Reviewed by Jeremy Orlow.

        IndexedDB: Cursors should skip deleted entries
        https://bugs.webkit.org/show_bug.cgi?id=53690

        Add test to check that the cursor skips deleted entries.

        Test: storage/indexeddb/cursor-skip-deleted.html

        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::currentRowExists):
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        * storage/IDBCursorBackendImpl.h:

2011-02-08  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: script formatter should not create a worker for each script.
        https://bugs.webkit.org/show_bug.cgi?id=54010

        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter):
        (WebInspector.ScriptFormatter.prototype._formatScript):
        (WebInspector.ScriptFormatter.prototype._handleMessage):
        (WebInspector.ScriptFormatter.prototype._handleError):

2011-02-08  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: sync uglifyjs parser files.
        https://bugs.webkit.org/show_bug.cgi?id=54003

        * inspector/front-end/UglifyJS/parse-js.js:
        * inspector/front-end/UglifyJS/process.js:

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

        Reviewed by Darin Adler.

        REGRESSION(71556,68059): queryCommandValue screws up background color at collapsed cursor
        https://bugs.webkit.org/show_bug.cgi?id=53196

        The bug was caused by Editor::selectionComputedStyle's modifying typing style without making a copy,
        and its removing non-inheritable properties from the typing style. Fixed the bug by making a copy
        before making the modification and not removing non-inheritable properties.

        Also fixed a bug in selectionStartCSSPropertyValue that it doesn't handle xx-small to -webkit-xxx-large
        by extracting a function from StyleChange::extractTextStyles and calling it in both extractTextStyles
        and selectionStartCSSPropertyValue.

        Test: editing/style/query-typing-style.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::legacyFontSizeFromCSSValue): Extracted from StyleChange::extractTextStyles.
        (WebCore::StyleChange::extractTextStyles): Calls legacyFontSizeFromCSSValue; this fixes the bug that
        CSS values from xx-small through -webkit-xxx-large are not accounted.
        * editing/ApplyStyleCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartCSSPropertyValue): Calls legacyFontSizeFromCSSValue.
        (WebCore::Editor::selectionComputedStyle): Makes a copy before modifying typing style.
        No longer calls removeNonEditingProperties on the copied typing style so that background-color property
        is included when merged into the style.

2011-02-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r76831): Subframes are printed blank
        <rdar://problem/8945867>

        * page/FrameView.cpp:
        (WebCore::FrameView::paintOverhangAreas):
        Don't paint overhangs when printing.

2011-02-07  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Events should propagate through IDBDatabase (for IDBRequest and IDBTransaction)
        https://bugs.webkit.org/show_bug.cgi?id=53975

        The third change in the series of overhauling IndexedDB's event model to match
        the spec (at least the version in our heads and bugs).

        Test: storage/indexeddb/transaction-event-propagation.html

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * dom/Event.cpp:
        (WebCore::Event::isIDBAbortEvent):
        (WebCore::Event::isIDBCompleteEvent):
        * dom/Event.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toIDBDatabase):
        * dom/EventTarget.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::create):
        (WebCore::IDBDatabase::IDBDatabase):
        (WebCore::IDBDatabase::scriptExecutionContext):
        (WebCore::IDBDatabase::eventTargetData):
        (WebCore::IDBDatabase::ensureEventTargetData):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::toIDBDatabase):
        (WebCore::IDBDatabase::refEventTarget):
        (WebCore::IDBDatabase::derefEventTarget):
        * storage/IDBDatabase.idl:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::backend):
        (WebCore::IDBTransaction::db):
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::scriptExecutionContext):
        (WebCore::IDBTransaction::dispatchEvent):
        (WebCore::IDBTransaction::enqueueEvent):
        * storage/IDBTransaction.h:
        (WebCore::IDBTransaction::dispatchEvent):

2011-02-08  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Add cache for GPU-accelerated path processing results
        https://bugs.webkit.org/show_bug.cgi?id=45519

        Adding a cache which holds the results of processing a path into
        interior and exterior triangle meshes, according to the path
        rendering algorithm from GPU Gems 3. No tests yet; will be tested
        in conjunction with later code.

        * platform/graphics/gpu/LoopBlinnPathCache.cpp: Added.
        (WebCore::LoopBlinnPathCache::LoopBlinnPathCache):
        (WebCore::LoopBlinnPathCache::~LoopBlinnPathCache):
        (WebCore::LoopBlinnPathCache::addVertex):
        (WebCore::LoopBlinnPathCache::clear):
        (WebCore::LoopBlinnPathCache::addInteriorVertex):
        (WebCore::LoopBlinnPathCache::numberOfInteriorEdgeVertices):
        (WebCore::LoopBlinnPathCache::interiorEdgeVertices):
        (WebCore::LoopBlinnPathCache::addInteriorEdgeVertex):
        * platform/graphics/gpu/LoopBlinnPathCache.h: Added.
        (WebCore::LoopBlinnPathCache::numberOfVertices):
        (WebCore::LoopBlinnPathCache::vertices):
        (WebCore::LoopBlinnPathCache::texcoords):
        (WebCore::LoopBlinnPathCache::numberOfInteriorVertices):
        (WebCore::LoopBlinnPathCache::interiorVertices):

2011-02-08  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Rename GraphicsContext3D::WebGLEnumType
        https://bugs.webkit.org/show_bug.cgi?id=45708

        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::getAttachedShader):
        * html/canvas/WebGLProgram.h:
        * platform/graphics/GraphicsContext3D.h:

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

        Unreviewed, rolling out r77980.
        http://trac.webkit.org/changeset/77980
        https://bugs.webkit.org/show_bug.cgi?id=54043

        "Crashes on Windows and Linux..." (Requested by leviw on
        #webkit).

        * WebCore.exp.in:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::startOfStyleRange):
        (WebCore::endOfStyleRange):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (objectAndOffsetUnignored):
        * dom/Position.cpp:
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        * dom/Range.cpp:
        (WebCore::Range::editingStartPosition):
        * editing/Editor.cpp:
        (WebCore::Editor::canDeleteRange):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        (WebCore::SelectionController::setSelectedRange):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::VisiblePosition):
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::canonicalPosition):
        (WebCore::VisiblePosition::characterAfter):
        (WebCore::VisiblePosition::localCaretRect):
        (WebCore::makeRange):
        (WebCore::startVisiblePosition):
        (WebCore::endVisiblePosition):
        (WebCore::setStart):
        (WebCore::setEnd):
        (WebCore::isFirstVisiblePositionInNode):
        (WebCore::isLastVisiblePositionInNode):
        * editing/VisiblePosition.h:
        * editing/htmlediting.cpp:
        (WebCore::firstInSpecialElement):
        (WebCore::lastInSpecialElement):
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):
        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        (WebCore::endOfBlock):
        (WebCore::startOfDocument):
        (WebCore::endOfDocument):
        (WebCore::logicalStartPositionForLine):
        (WebCore::logicalEndPositionForLine):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::setPosition):
        (WebCore::DOMSelection::extend):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::visiblePositionForIndex):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::selectSubString):

2011-02-08  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        VisibleSelection::setWithoutValidation() should allow caret selection.
        https://bugs.webkit.org/show_bug.cgi?id=53943

        Test: editing/undo/undo-paste-when-caret-is-not-in-range.html

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setWithoutValidation):

2011-02-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Remove the last remnants of the Mozilla theme drawing code
        https://bugs.webkit.org/show_bug.cgi?id=54035

        Remove all Mozilla theme drawing code.

        No new tests. This change only removes dead code.

        * GNUmakefile.am: Remove Mozilla files from the source list.
        * platform/gtk/RenderThemeGtk.h: Remove Mozilla-theme-drawing-related methods
        and add m_colormap to hold the current colormap of the widgets.
        * platform/gtk/RenderThemeGtk2.cpp: Remove Mozilla code.
        (WebCore::RenderThemeGtk::platformInit): Ditto.
        (WebCore::RenderThemeGtk::~RenderThemeGtk): Ditto.
        (WebCore::RenderThemeGtk::gtkContainer): Ditto.
        * platform/gtk/ScrollbarThemeGtk2.cpp: Ditto.
        * platform/gtk/WidgetRenderingContext.cpp: Ditto.
        (WebCore::WidgetRenderingContext::WidgetRenderingContext): Ditto.
        * platform/gtk/WidgetRenderingContext.h: Ditto.
        * platform/gtk/gtk2drawing.c: Removed.
        * platform/gtk/gtkdrawing.h: Removed.

2011-02-08  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antti Koivisto.

        Crash when logging into gmail.com with frame flattening turned on.
        https://bugs.webkit.org/show_bug.cgi?id=52449

        Frame flattening algorithm requires that layout always starts from the main frame, since layout of
        subframes impacts the layout of their parents. 
        There are places in the code that call view->layout() not on the main frame.
        Instead of changing all the callsites, I changed FrameView::layout()
        to force layout from the main frame if frame flattening is enabled.
        In addition, postLayoutTasks can trigger relayout, so make it use the timer even more.
        Move the call to SelectionController::updateAppearance() to performPostLayoutTasks(), 
        because calling the from layout() leads to a crash in pages that have a selection in an iframe.

        Tests: fast/frames/flattening/iframe-flattening-crash.html
               fast/frames/flattening/iframe-flattening-selection-crash.html

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

2011-02-08  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8913952> REGRESSION (r76301): 'plaintext-only' must be
        a supported contentEditable mode.
        https://bugs.webkit.org/show_bug.cgi?id=54041

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setContentEditable): Setting the contentEditable
        attribute to 'plaintext-only' should not throw an exception.

2011-02-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        RenderRubyRun::m_beingDestroyed is redundant
        https://bugs.webkit.org/show_bug.cgi?id=54042

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::RenderRubyRun): Removed intialization of m_beingDestroyed.
        (WebCore::RenderRubyRun::removeChild): Use the base class beingDestroyed(). 
        * rendering/RenderRubyRun.h:

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

        Reviewed by Ryosuke Niwa.

        Stop instantiating legacy editing Positions in VisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=52919

        Changing VisiblePosition completely away from legacy positions.

        No new tests since this is functionaly equivalent.

        * WebCore.exp.in: Removing the legacy VisiblePosition constructor and
        adding the PositionIsOffsetInAnchor symbol. If we must create VisiblePositions
        outside of WebCore, they should be parent anchored.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::startOfStyleRange):
        (WebCore::endOfStyleRange):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (objectAndOffsetUnignored):
        * dom/Position.cpp:
        (WebCore::Position::upstream): Fixed to correctly respect PositionIsAfterAnchor
        (WebCore::Position::downstream): ditto
        * dom/Range.cpp:
        (WebCore::Range::editingStartPosition):
        * editing/Editor.cpp:
        (WebCore::Editor::canDeleteRange):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        (WebCore::SelectionController::setSelectedRange):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::canonicalPosition):
        (WebCore::VisiblePosition::characterAfter):
        (WebCore::VisiblePosition::localCaretRect):
        (WebCore::makeRange):
        (WebCore::startVisiblePosition):
        (WebCore::endVisiblePosition):
        (WebCore::setStart):
        (WebCore::setEnd):
        (WebCore::isFirstVisiblePositionInNode):
        (WebCore::isLastVisiblePositionInNode):
        * editing/VisiblePosition.h:
        (WebCore::VisiblePosition::VisiblePosition):
        * editing/htmlediting.cpp:
        (WebCore::firstInSpecialElement):
        (WebCore::lastInSpecialElement):
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):
        * editing/visible_units.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        (WebCore::endOfBlock):
        (WebCore::startOfDocument):
        (WebCore::endOfDocument):
        (WebCore::logicalStartPositionForLine):
        (WebCore::logicalEndPositionForLine):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::setPosition):
        (WebCore::DOMSelection::extend):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::visiblePositionForIndex):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::selectSubString):

2011-02-08  Michael Saboff  <msaboff@apple.com>

        JSC::Bindings m_rootObject->isValid() assert fails when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=53716

        Changed ASSERT to be an if for the case where the RuntimeObject was
        GC'ed before RootObject::invalidate is called.  In that case there is 
        no need to remove the RuntimeObject from the RootObject.  The isValid()
        call will be false in this case, but the RuntimeObject has already
        been removed from the RootObject.  Added similar defensive code
        in RootObject::removeRuntimeObject().

        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::willDestroyRuntimeObject):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::removeRuntimeObject):

2011-02-08  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8953365> CrashTracer: 14 
        crashes in WebProcess at com.apple.WebCore: 
        -[ScrollKnobAnimation setCurrentProgress:] + 258

        This crash seems to happen when the animation is running
        and a window is closed. If the ScrollAnimator is destroyed,
        delegate calls for the animation can still run, so we have 
        to make sure we inform the delegates when the ScrollAnimator 
        is gone, and then we have to null-check it before we do 
        anything with it.

        Remove scrollbarPainterDelegate() since it's not used anymore.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        
        Add null-checks for _animator
        (-[ScrollbarPartAnimation setCurrentProgress:]):
        (-[ScrollbarPartAnimation scrollAnimatorDestroyed]):
        (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:overlayScrollerStateChangedTo:]):
        
        New function to inform the delegates that the ScrollAnimator
        is being destroyed.
        (-[ScrollbarPainterDelegate scrollAnimatorDestroyed]):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):

2011-02-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove orphan code from old parser
        https://bugs.webkit.org/show_bug.cgi?id=53984

        This code appears to be unused.

        * html/HTMLParserErrorCodes.cpp:
        * html/HTMLParserErrorCodes.h:
        * html/HTMLParserQuirks.h:
        * loader/EmptyClients.h:
        * page/ChromeClient.h:

2011-02-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Move scrollbar rendering out of gtk2drawing.c
        https://bugs.webkit.org/show_bug.cgi?id=52836

        Replace gtk2drawing.c scrollbar rendering with our own version. This
        is the last use of the Mozilla theme drawing code.

        No new tests. This should not change the rendering of the default
        theme.

        * platform/gtk/GtkVersioning.h: Add some more backported allocation setters.
        * platform/gtk/RenderThemeGtk.h: Add a getter for the scrollbar widgets.
        * platform/gtk/RenderThemeGtk2.cpp:  Initialize and add getters for scrollbar widgets.
        (WebCore::RenderThemeGtk::platformInit): Ditto.
        (WebCore::RenderThemeGtk::gtkHScrollbar): Ditto.
        (WebCore::RenderThemeGtk::gtkVScrollbar): Ditto.
        * platform/gtk/ScrollbarThemeGtk.cpp: 
        (WebCore::ScrollbarThemeGtk::paint): We only repaint the scrolled
        window background if we are repainting a button or the thumb. In that
        case also repaint the track rect.
        * platform/gtk/ScrollbarThemeGtk2.cpp: Port to WidgetRenderingContext.
        (WebCore::ScrollbarThemeGtk::ScrollbarThemeGtk): Ditto.
        (WebCore::ScrollbarThemeGtk::updateThemeProperties): Ditto.
        (WebCore::getWidgetForScrollbar): Ditto.
        (WebCore::ScrollbarThemeGtk::paintTrackBackground): Ditto.
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground): Ditto.
        (WebCore::ScrollbarThemeGtk::paintThumb): Ditto.
        (WebCore::ScrollbarThemeGtk::paintButton): Ditto.
        * platform/gtk/WidgetRenderingContext.cpp: Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintBox): Added an option which
        also adjusts a widget allocation according to the paint rect. This is
        necessary to properly draw scrollbar buttons.
        * platform/gtk/WidgetRenderingContext.h: Ditto.

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

        Reviewed by Dan Bernstein.

        Inset shadow with large offset renders incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=53882
        
        Fix an issue with inset shadows, when the shadow offset
        was larger than the box size. In this case we'd fail to
        fill the box with the shadow color.

        Test: fast/box-shadow/inset-shadow-large-offset.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::areaCastingShadowInHole): Return a rect that covers the area
        which contributes to the inset shadow.
        
        (WebCore::RenderBoxModelObject::paintBoxShadow): Use areaCastingShadowInHole()
        to compute the outerRect.

2011-02-08  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        drawElements should check if a buffer is bound to ELEMENT_ARRAY_BUFFER
        https://bugs.webkit.org/show_bug.cgi?id=54017

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::drawElements):

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

        Reviewed by Darin Adler.

        Change the rest of HTMLMediaElement shadow DOM parts to use shadowPseudoId.
        https://bugs.webkit.org/show_bug.cgi?id=53190

        This is the second part of refactoring the HTMLMediaElement to use new
        shadow DOM. The changes are mainly mechanical, except for needing to
        add a new method to RenderTheme, which indicates whether or not status
        display is being used by it. Previously, we relied on existence of a cached
        pseudo style.

        Refactoring, covered by existing tests.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId): Removed now-unused enum values.
        (WebCore::nameToPseudoTypeMap): Ditto.
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h: Ditto.
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::createPanel): Changed to use the newly-added MediaControlPanelElement.
        (WebCore::MediaControls::createCurrentTimeDisplay): Changed to use the newly-added
            MediaControlCurrentTimeDisplayElement.
        (WebCore::MediaControls::createTimeRemainingDisplay): Changed to use the newly-added
                MediaControlTimeRemainingDisplayElement.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlShadowRootElement::updateStyle): Changed to use the
            standard style resolution.
        (WebCore::MediaControlShadowRootElement::shadowPseudoId): Added.
        (WebCore::MediaControlElement::MediaControlElement): Removed the switch statement
            that is no longer necessary.
        (WebCore::MediaControlElement::styleForElement): Changed to use the standard
            style resolution.
        (WebCore::MediaControlPanelElement::MediaControlPanelElement): Added.
        (WebCore::MediaControlPanelElement::create): Added.
        (WebCore::MediaControlPanelElement::displayType): Added.
        (WebCore::MediaControlPanelElement::shadowPseudoId): Added.
        (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement):
            Removed PseudoId constructor arg.
        (WebCore::MediaControlTimelineContainerElement::rendererIsNeeded):
            Changed to use the newly-plumbed usesMediaControlStatusDisplay helper.
        (WebCore::MediaControlTimelineContainerElement::displayType): Added.
        (WebCore::MediaControlTimelineContainerElement::shadowPseudoId): Added.
        (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement):
            Removed PseudoId constructor arg.
        (WebCore::MediaControlVolumeSliderContainerElement::displayType): Added.
        (WebCore::MediaControlVolumeSliderContainerElement::shadowPseudoId): Added.
        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement):
            Removed PseudoId constructor arg.
        (WebCore::MediaControlStatusDisplayElement::rendererIsNeeded): Changed to
            use the newly-plumbed usesMediaControlStatusDisplay helper.
        (WebCore::MediaControlStatusDisplayElement::displayType): Added.
        (WebCore::MediaControlStatusDisplayElement::shadowPseudoId): Added.
        (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement):
            Removed PseudoId constructor arg.
        (WebCore::MediaControlTimeRemainingDisplayElement::create): Added.
        (WebCore::MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement): Added.
        (WebCore::MediaControlTimeRemainingDisplayElement::displayType): Added.
        (WebCore::MediaControlTimeRemainingDisplayElement::shadowPseudoId): Added.
        (WebCore::MediaControlCurrentTimeDisplayElement::create): Added.
        (WebCore::MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement): Added.
        (WebCore::MediaControlCurrentTimeDisplayElement::displayType): Added.
        (WebCore::MediaControlCurrentTimeDisplayElement::shadowPseudoId): Added.
        * rendering/MediaControlElements.h: Added/changed defs accordingly.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::usesMediaControlStatusDisplay): Added.
        * rendering/RenderThemeMac.h: Added def.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::usesMediaControlStatusDisplay): Added.
        * rendering/style/RenderStyleConstants.h: Removed now-unused enum values.

2011-02-08  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Fix pop-up button text not rendered correctly according to its direction
        in <option>.
        https://bugs.webkit.org/show_bug.cgi?id=53642
 
        In adjustInnerStyle(), if m_innerBlock's direction or unicode-bidi 
        changes, set it needs layout.

        Test: fast/text/international/pop-up-button-text-alignment-and-direction.html

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

2011-02-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix for Qt-minimal.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::hasFrontend):

2011-02-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move InspectorController's methods from InspectorAgent to InspectorController.

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

        All the Inspector API for WebCore has two parts.
        The first one is InspectorInstrumentation for WebCore.
        The second is InspectorController for WebKit.
        InspectorAgent was produced by renaming original InspectorController.
        This patch extracts WebKit related methods from InspectorAgent to InspectorController.

        * WebCore.exp.in:
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::~InspectorAgent):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::inspect):
        (WebCore::InspectorAgent::handleMousePress):
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::setFrontend):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::resourceAgent):
        (WebCore::InspectorAgent::createFrontendLifetimeAgents):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::pushDataCollectedOffline):
        (WebCore::InspectorAgent::restoreProfiler):
        (WebCore::InspectorAgent::startTimelineProfiler):
        (WebCore::PostWorkerNotificationToFrontendTask::performTask):
        (WebCore::InspectorAgent::didOpenDatabase):
        (WebCore::InspectorAgent::didUseDOMStorage):
        (WebCore::InspectorAgent::showAndEnableDebugger):
        (WebCore::InspectorAgent::enableDebugger):
        (WebCore::InspectorAgent::enabled):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::frontend):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::setInspectorFrontendClient):
        (WebCore::InspectorController::hasInspectorFrontendClient):
        (WebCore::InspectorController::didClearWindowObjectInWorld):
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::disconnectFrontendImpl):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        (WebCore::InspectorController::evaluateForTestInFrontend):
        (WebCore::InspectorController::drawNodeHighlight):
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::enabled):
        (WebCore::InspectorController::showPanel):
        (WebCore::InspectorController::frontendLoaded):
        (WebCore::InspectorController::timelineProfilerEnabled):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::profilerEnabled):
        (WebCore::InspectorController::debuggerEnabled):
        (WebCore::InspectorController::showAndEnableDebugger):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::isRecordingUserInitiatedProfile):
        (WebCore::InspectorController::setInspectorExtensionAPI):
        (WebCore::InspectorController::resume):
        (WebCore::InspectorController::hideHighlight):
        (WebCore::InspectorController::dispatchMessageFromFrontend):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorClient):
        (WebCore::InspectorController::inspectedPage):
        (WebCore::InspectorController::hasFrontend):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::sendMessageToBackend):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::setExtensionAPI):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::profilerEnabledImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::hasFrontend):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):

2011-02-08  George Wright  <gwright@rim.com>

        Reviewed by Adam Barth.

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

        Ensure that we pack the colour byte order correctly for Skia using
        Skia's SkPackARGB32 function.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::setRGBA):

2011-02-08  George Wright  <gwright@rim.com>

        Reviewed by Darin Adler.

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

        Ensure we do not pass (-1, -1) sized rects to ImageBuffer but instead
        pass the full image dimensions.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImageBuffer):

2011-02-08  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Add missing includes and forward declarations for DownloadBundle
        https://bugs.webkit.org/show_bug.cgi?id=53881

        * platform/network/cf/DownloadBundle.h:
        * platform/network/win/DownloadBundleWin.cpp:
        (WebCore::DownloadBundle::appendResumeData):

2011-02-08  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Add missing include in WKCAImageQueue
        https://bugs.webkit.org/show_bug.cgi?id=53890

        * platform/graphics/win/WKCAImageQueue.cpp:

2011-02-08  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Add missing includes and forward declarations for CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=53883

        * platform/network/cf/DNSCFNet.cpp:
        * platform/network/cf/LoaderRunLoopCF.cpp:
        * platform/network/cf/LoaderRunLoopCF.h:
        * platform/network/cf/ProxyServerCFNet.cpp:
        * platform/network/cf/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:

2011-02-08  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r77870.

        * platform/DragImage.cpp: Enable createDragImageForLink for WinCE.

2011-02-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: open network resource url in new tab upon double click.
        https://bugs.webkit.org/show_bug.cgi?id=53930

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype.createCells):
        (WebInspector.NetworkDataGridNode.prototype._openInNewTab):

2011-02-08  Yonathan Randolph  <yonathan@gmail.com>

        Reviewed by Pavel Feldman.

        Web Inspector: $x: any node should work in optional context parameter.
        https://bugs.webkit.org/show_bug.cgi?id=50138

        * inspector/InjectedScriptSource.js:

2011-02-08  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r77870.

        Remove the global namespace prefix from GlobalLock/GlobalUnlock.

        * platform/win/ClipboardUtilitiesWin.cpp:

2011-02-08  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: re-apply r77924.

        Test: inspector/console-api-on-call-frame.html

        * inspector/InjectedScriptSource.js:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):

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

        Reviewed by Tor Arne Vestbø.

        REGRESSION(r77312): Unbreak TiledBackingStore.

        Due to an off-by-one error, we were no longer rendering the
        rightmost column and bottom row of tiles.

        Covered by tst_QGraphicsWebView::widgetsRenderingThroughCache().

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::invalidate):
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::paint):
        (WebCore::TiledBackingStore::createTiles):

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

        Unreviewed, rolling out r77924.
        http://trac.webkit.org/changeset/77924
        https://bugs.webkit.org/show_bug.cgi?id=53997

        Breaks inspector tests. (Requested by pfeldman on #webkit).

        * inspector/InjectedScriptSource.js:
        (.):
        ():

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

        Reviewed by Pavel Feldman.

        Web Inspector: [refacotring] merge InspectorAgent::willSendRequest() into InspectorResourceAgent
        https://bugs.webkit.org/show_bug.cgi?id=53789
         - perform UserAgent override via InspectorInstrumentation
         - move adding extra request headers to InspectorResourceAgent
         - simplified things in InspectorState

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::applyUserAgentOverride):
        * inspector/InspectorAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::applyUserAgentOverrideImpl):
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::applyUserAgentOverride):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setExtraHeaders):
        (WebCore::InspectorResourceAgent::willSendRequest):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        (WebCore::InspectorState::restoreFromInspectorCookie):
        (WebCore::InspectorState::updateCookie):
        (WebCore::InspectorState::setValue):
        (WebCore::InspectorState::getBoolean):
        (WebCore::InspectorState::getString):
        (WebCore::InspectorState::getLong):
        (WebCore::InspectorState::getObject):
        * inspector/InspectorState.h:
        (WebCore::InspectorState::setObject):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgent):

2011-02-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not hide scope variables with command line api.
        https://bugs.webkit.org/show_bug.cgi?id=53497

        Test: inspector/console-api-on-call-frame.html

        * inspector/InjectedScriptSource.js:

2011-02-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: ignore cache upon reload via Ctrl(Cmd)+Shift+R.
        https://bugs.webkit.org/show_bug.cgi?id=53914

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::reloadPage):
        * inspector/InspectorAgent.h:
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onReload):
        * inspector/front-end/inspector.js:
        (WebInspector.documentKeyDown):

2011-02-08  Antti Koivisto  <antti@apple.com>

        Reviewed by Cameron Zwarich.

        Skip over sibling selectors when collecting descendant selector hashes 
        https://bugs.webkit.org/show_bug.cgi?id=53987
        
        Skip instead of bailing out. This will allow optimizing some sibling selector cases.

        * css/CSSStyleSelector.cpp:
        (WebCore::RuleData::RuleData):
        (WebCore::RuleData::collectIdentifierHashes):
        (WebCore::RuleData::collectDescendantSelectorIdentifierHashes):
        * css/CSSStyleSelector.h:

2011-02-07  Cris Neckar  <cdn@chromium.org>

        Reviewed by Jian Li.

        Fix null deref in DOMURL
        https://bugs.webkit.org/show_bug.cgi?id=53811

        Test: fast/files/domurl-script-execution-context-crash.html

        * html/DOMURL.cpp:
        (WebCore::DOMURL::DOMURL):

2011-02-07  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar): Remove some extraneous characters.
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar): Ditto.

2011-02-07  Xiyuan Xia  <xiyuan@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Select popup box does not align with select button when appearance is not "menulist".
        https://bugs.webkit.org/show_bug.cgi?id=53942

        Added manual test select_webkit_appearance_off_popup_alignment.html.

        * manual-tests/select_webkit_appearance_off_popup_alignment.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::layout):

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

        Reviewed by Andreas Kling.

        [Qt] - Context menu needs "Copy" as well when the selected text is a link.
        https://bugs.webkit.org/show_bug.cgi?id=40983

        Added copy option for Qt platform if selection is a link. 
        Added a test in tst_qwebpage.cpp. 

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):

2011-02-07  Mike Reed  <reed@google.com>

        Reviewed by Kenneth Russell.

        Add compile-time flag ENABLE(SKIA_GPU) to use Skia's gpu backend
        when drawing <canvas>. Disabled by default.

        No new tests. existing canvas layouttests apply

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::GetGlobalGrContext):
        (WebCore::PlatformContextSkia::isPrinting):
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):
        (WebCore::PlatformContextSkia::syncSoftwareCanvas):

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

        Reviewed by Darin Fisher.

        Removing unused code from PopupMenuChromium.
        https://bugs.webkit.org/show_bug.cgi?id=53866

       * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::layout):
        (WebCore::PopupMenuChromium::show):
        * platform/chromium/PopupMenuChromium.h:

2011-02-07  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Andreas Kling.

        HTMLOutputElement::childrenChanged() should call its base class childrenChanged()
        https://bugs.webkit.org/show_bug.cgi?id=53791

        Calls HTMLFormControlElement::childrenChanged() in HTMLOutputElement::childrenChanged().

        Test: fast/dom/HTMLOutputElement/htmloutputelement-children-removed.html

        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::childrenChanged): Calls super class's
        childrenChanged().

2011-02-07  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] cookiesEnabled could create the cookieJar on the wrong thread.
        https://bugs.webkit.org/show_bug.cgi?id=52289

        Use the QtNAMThreadSafeProxy to make sure the cookie jar is created
        in the same thread as the QNetworkAccessManager.

        * platform/network/qt/QtNAMThreadSafeProxy.cpp:
        (WebCore::QtNAMThreadSafeProxy::QtNAMThreadSafeProxy):
        (WebCore::QtNAMThreadSafeProxy::hasCookieJar):
        * platform/network/qt/QtNAMThreadSafeProxy.h:
        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookiesEnabled):

2011-02-07  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by Kenneth Russell.

        Hook up WebGraphicsContext3D::setContextLostCallback.
        https://bugs.webkit.org/show_bug.cgi?id=53722

        Test: fast/canvas/webgl/context-lost.html, comment out the line with
        extension.loseContext() and kill the GPU process "Lose context"
        message shows up.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContextLostCallback::WebGLRenderingContextLostCallback):
        (WebCore::WebGLRenderingContextLostCallback::onContextLost):
        (WebCore::WebGLRenderingContextLostCallback::~WebGLRenderingContextLostCallback):
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::~WebGLRenderingContext):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::ContextLostCallback::~ContextLostCallback):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::setContextLostCallback): stub
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::setContextLostCallback): stub

2011-02-07  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Add missing PaintInfo include in RenderThemeWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=53885

        * rendering/RenderThemeWin.cpp:

2011-02-07  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] enum QWebPage::WebAction doesn't have value QWebPage::CopyImageUrl
        https://bugs.webkit.org/show_bug.cgi?id=52974

        Add ContextMenuItemTagCopyImageUrlToClipboard into standard action but Qt platform specific.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagCopyImageUrlToClipboard):
        * platform/LocalizedStrings.h:

2011-02-07  Kenichi Ishibashi  <bashi@chromium.org>

        Reviewed by Kent Tamura.

        HTMLFormElement::formElementIndex() returns a bad index into a vector of form associated elements
        https://bugs.webkit.org/show_bug.cgi?id=53970

        Adds HTMLObjectElement::virtualForm() to make HTMLObjectElement::form()
        return the right value.

        Test: fast/dom/HTMLObjectElement/form/nested-form-element.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::virtualForm): Added.
        * html/HTMLObjectElement.h: Added virtualForm().

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

        Unreviewed Leopard build fix.

        * WebCore.xcodeproj/project.pbxproj: let XCode have developmentRegion.
        * platform/mac/DragImageMac.mm:
        (WebCore::webkit_CGCeiling): Cast the return value of ceil to CGFloat.

2011-02-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Fixing a build break on Mac caused by http://trac.webkit.org/changeset/77874

        When moving code from WebKit to WebCore we needed to move some additional
        functions previously in NSStringExtras.
        
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/DragImageMac.mm:
        (WebCore::fontFromNSFont):
        (WebCore::canUseFastRenderer):
        (WebCore::widthWithFont):
        (WebCore::webkit_CGCeiling):
        (WebCore::drawAtPoint):
        (WebCore::drawDoubledAtPoint):
        (WebCore::createDragImageForLink):

2011-02-07  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Geoff Garen.

        Tr #2, Fix the Leopard 32bit debug build.
        
        No new tests required.

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityAllInOne.cpp:

2011-02-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8946961> Fix repaint problems
        with WKScrollbarPainter scrollers while resizing the window

        Remove setPainterForPainterController() and 
        removePainterFromPainterController() since they aren't
        used anymore.
        * platform/mac/ScrollAnimatorMac.h:
        
        Return early if they alpha hasn't changed.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        
        If we're in a live resize, restore alpha to 1.
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):

2011-02-07  Beth Dakin  <bdakin@apple.com>

        Reviewed by Eric Seidel.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=53950
        USE_WK_SCROLLBAR_PAINTER in ScrollbarThemeMac should be in
        Platform.h instead

        Use hot new USE(WK_SCROLLBAR_PAINTER) from Platform.h rather
        than the silly, old in-file #define.

        * platform/mac/ScrollbarThemeMac.mm:
        (+[ScrollbarPrefsObserver appearancePrefsChanged:]):
        (WebCore::updateArrowPlacement):
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        (WebCore::ScrollbarThemeMac::usesOverlayScrollbars):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::paint):

2011-02-07  Enrica Casucci  <enrica@apple.com>

        Reviewed Adam Roben and Darin Adler.

        WebKit2: drag and drop support on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=52775
        <rdar://problem/8514409>

        * loader/EmptyClients.h: Removed createDragImageFromLink.
        * page/DragClient.h: Ditto.
        * page/DragController.cpp:
        (WebCore::DragController::startDrag): changed call to createDragImageFromLink.
        * platform/DragImage.h:
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink): Moved from DragClient.
        * platform/win/ClipboardUtilitiesWin.cpp: Added a series of functions
        to de-serialize the drag data from the map into an IDataObject.
        (WebCore::getWebLocData):
        (WebCore::texthtmlFormat):
        (WebCore::createGlobalData):
        (WebCore::getFullCFHTML):
        (WebCore::urlWFormat):
        (WebCore::urlFormat):
        (WebCore::filenameWFormat):
        (WebCore::filenameFormat):
        (WebCore::htmlFormat):
        (WebCore::smartPasteFormat):
        (WebCore::getURL):
        (WebCore::getPlainText):
        (WebCore::getTextHTML):
        (WebCore::ClipboardDataItem::ClipboardDataItem):
        (WebCore::getStringData):
        (WebCore::getUtf8Data):
        (WebCore::getCFData):
        (WebCore::setUCharData):
        (WebCore::setCharData):
        (WebCore::setCFData):
        (WebCore::getClipboardMap):
        (WebCore::getClipboardData):
        (WebCore::setClipboardData):
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/DragImageWin.cpp: Moved createDragImageForLink from DragClient
        to a platform specific file in WebCore. It makes a lot more sense here, since
        the drag image is always created in WebCore for all the other content types
        except for links.
        (WebCore::dragLabelFont):
        (WebCore::createDragImageForLink):
        * platform/win/WCDataObject.cpp: Added new way to
        construct a WCDataObject from a DragDataMap.
        (WebCore::WCDataObject::createInstance):
        (WebCore::WCDataObject::clearData):
        * platform/win/WCDataObject.h:

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

        Unreviewed, rolling out r77848.
        http://trac.webkit.org/changeset/77848
        https://bugs.webkit.org/show_bug.cgi?id=53963

        caused 6 test failures (Requested by othermaciej on #webkit).

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):

2011-02-04  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Add shaders for GPU accelerated path rendering
        https://bugs.webkit.org/show_bug.cgi?id=45520

        Refactored SolidFillShader and TexShader to call new
        generateVertex() and generateFragment() methods on base Shader
        class, and added support for the Loop/Blinn shaders. Refactored
        Loop/Blinn shader classes to derive from Shader.

        Tested these changes with several of the IE9 Testdrive demos with
        accelerated 2D canvas enabled, as well as a full layout test run
        with --platform chromium-gpu.

        * platform/graphics/gpu/LoopBlinnShader.cpp: Added.
        (WebCore::LoopBlinnShader::LoopBlinnShader):
        (WebCore::LoopBlinnShader::use):
        * platform/graphics/gpu/LoopBlinnShader.h: Added.
        * platform/graphics/gpu/LoopBlinnSolidFillShader.cpp: Added.
        (WebCore::LoopBlinnSolidFillShader::create):
        (WebCore::LoopBlinnSolidFillShader::LoopBlinnSolidFillShader):
        (WebCore::LoopBlinnSolidFillShader::use):
        * platform/graphics/gpu/LoopBlinnSolidFillShader.h: Added.
        * platform/graphics/gpu/Shader.cpp:
        (WebCore::Shader::affineTo4x4):
        (WebCore::Shader::loadShader):
        (WebCore::Shader::loadProgram):
        (WebCore::Shader::generateVertex):
        (WebCore::Shader::generateFragment):
        * platform/graphics/gpu/Shader.h:
        * platform/graphics/gpu/SolidFillShader.cpp:
        (WebCore::SolidFillShader::create):
        * platform/graphics/gpu/TexShader.cpp:
        (WebCore::TexShader::TexShader):
        (WebCore::TexShader::create):

2011-02-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/8946023> REGRESSION (r76674): SVG + BiDi text broken (text-intro-05-t.svg)
        https://bugs.webkit.org/show_bug.cgi?id=53480

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): m_indexEnd should be an
        offset into m_characters, not into the run’s characters.
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Ditto.

2011-02-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add bundle API to get the background color of a frame
        <rdar://problem/8962670>
        https://bugs.webkit.org/show_bug.cgi?id=53952

        * WebCore.exp.in: Add export.

2011-02-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Assertion failure in ~JSGlobalObject when loading apple.com HTML5
        transitions demo page
        https://bugs.webkit.org/show_bug.cgi?id=53853

        This was a long-standing bookkeeping bug uncovered by some heap refactoring.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection): Take the JSLock before
        reporting extra cost to the JavaScriptCore heap, since all use of
        JavaScriptCore is supposed to be guarded by JSLock.

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

        Reviewed by David Levin.

        Intermittent crash in fast/files/read-blob-async.html on the GTK+ debug
        bots
        https://bugs.webkit.org/show_bug.cgi?id=53104

        Covered by the existing tests.

        * fileapi/FileStreamProxy.cpp:
        (WebCore::FileStreamProxy::startOnFileThread):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::createResourceHandle):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::BlobResourceHandle):
        (WebCore::BlobResourceHandle::cancel):
        (WebCore::delayedStartBlobResourceHandle):
        (WebCore::BlobResourceHandle::start): Keep BlobResourceHandle alive
        till the delay function is called.
        (WebCore::BlobResourceHandle::doStart):
        (WebCore::doNotifyFinish):
        (WebCore::BlobResourceHandle::notifyFinish): Notify the client via the
        standalone function to prevent the handle from being disposed immediately
        by the client which will make the calls in the stack that're still bound
        to the handle suffer.
        * platform/network/BlobResourceHandle.h:
        * platform/network/ResourceHandle.h: Change cancel() to virtual so that
        BlobResourceHandle::cancel will be called when we abort a FileReader.

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

        Unreviewed, rolling out r77845.
        http://trac.webkit.org/changeset/77845
        https://bugs.webkit.org/show_bug.cgi?id=53946

        build failure (Requested by lforschler_ on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityAllInOne.cpp:

2011-02-07  Darin Adler  <darin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=53939
        fast/css/text-overflow-ellipsis.html failure after r77818/77819

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerExtendedEncodingNames):
        Add back the "utf8" synonym for "UTF-8".

2011-02-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Remove an unnecessary extra computeLogicalWidth() from line layout.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):

2011-02-07  Lucas Forschler  <lforschler@apple.com>

        Reviewed by Geoffrey Garen.

        Fix Leopard Intel Debug Build.
        <rdar://problem/8953606> REGRESSION: Can't link WebCore on 32-bit Leopard (53681)
        This could potentially break windows, since I had to change #include <filename> to #include "filename"
        
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityAllInOne.cpp:

2011-02-07  Sam Weinig  <sam@webkit.org>

        Fix build.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):

2011-02-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Add mechanism to inform the ScrollAnimator when Scrollbars are added 
        and removed.

        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::didAddVerticalScrollbar):
        (WebCore::ScrollAnimator::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimator::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimator::willRemoveHorizontalScrollbar):
        Make virtual to allow platform specific overrides.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        Call new ScrollableArea functions.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::didAddVerticalScrollbar):
        (WebCore::ScrollableArea::willRemoveVerticalScrollbar):
        (WebCore::ScrollableArea::didAddHorizontalScrollbar):
        (WebCore::ScrollableArea::willRemoveHorizontalScrollbar):
        * platform/ScrollableArea.h:
        Pipe to ScrollAnimator.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):
        (WebCore::ScrollbarThemeMac::painterForScrollbar):
        Move painter delegate registration to the new didAdd/willRemove functions.

2011-02-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Missing text match markers with accelerated content
        https://bugs.webkit.org/show_bug.cgi?id=53934

        When doing the fake paint that recomputes the text match rects, we need to
        flatten compositing layers, otherwise the rects won't be updated until the next paint call.

        (This worked by accident in WebKit1 because Safari calls -[NSWindow displayIfNeeded] on the containing
        window before asking for the text match rects).

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

2011-02-07  Antti Koivisto  <antti@apple.com>

        Reviewed by Andreas Kling.

        REGRESSION(r77740): CSSStyleSelector accessing deleted memory for svg/dom/use-transform.svg
        https://bugs.webkit.org/show_bug.cgi?id=53900
        
        Ignore link elements in shadow trees.

        * dom/Element.cpp:
        (WebCore::StyleSelectorParentPusher::StyleSelectorParentPusher):
        (WebCore::StyleSelectorParentPusher::~StyleSelectorParentPusher):
                
            Some asserts to catch cases like this.

        (WebCore::Element::attach):
        (WebCore::Element::recalcStyle):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::insertedIntoDocument):
        (WebCore::HTMLLinkElement::removedFromDocument):
        * html/HTMLLinkElement.h:

2011-02-07  Darin Adler  <darin@apple.com>

        Turn UTF-8 decoder off for now so we can look into failing tests
        without leaving the tree red.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerBaseEncodingNames): Reverting
        earlier change so this can handle UTF-8.
        (WebCore::TextCodecICU::registerBaseCodecs): Ditto.
        (WebCore::TextCodecICU::registerExtendedEncodingNames): Ditto.
        (WebCore::TextCodecICU::registerExtendedCodecs): Ditto.
        * platform/text/TextCodecICU.h: Ditto.
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps): Ditto.
        (WebCore::extendTextCodecMaps): Ditto.
        * platform/text/brew/TextCodecBrew.cpp:
        (WebCore::TextCodecBrew::registerBaseEncodingNames): Ditto.
        (WebCore::TextCodecBrew::registerBaseCodecs): Ditto.
        (WebCore::TextCodecBrew::registerExtendedEncodingNames): Ditto.
        (WebCore::TextCodecBrew::registerExtendedCodecs): Ditto.
        * platform/text/brew/TextCodecBrew.h: Ditto.
        * platform/text/gtk/TextCodecGtk.cpp:
        (WebCore::TextCodecGtk::registerBaseEncodingNames): Ditto.
        (WebCore::TextCodecGtk::registerBaseCodecs): Ditto.
        * platform/text/wince/TextCodecWinCE.cpp:
        (WebCore::TextCodecWinCE::registerBaseEncodingNames): Ditto.
        (WebCore::TextCodecWinCE::registerBaseCodecs): Ditto.
        (WebCore::TextCodecWinCE::registerExtendedEncodingNames): Ditto.
        (WebCore::TextCodecWinCE::registerExtendedCodecs): Ditto.
        * platform/text/wince/TextCodecWinCE.h: Ditto.

2011-02-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Maciej Stachowiak.

        Don't exclude overlay scrollers from the page overlay bounds
        https://bugs.webkit.org/show_bug.cgi?id=53924

        Export ScrollbarTheme::nativeTheme.

        * WebCore.exp.in:

2011-02-07  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Crash in glDrawArrays with NaCl crystal model
        https://bugs.webkit.org/show_bug.cgi?id=52831

        * html/canvas/WebGLRenderingContext.cpp: Allocate large enough buffer for atttrib0 if it's enabled and not used.
        (WebCore::WebGLRenderingContext::initVertexAttrib0):
        (WebCore::WebGLRenderingContext::simulateVertexAttrib0):
        * html/canvas/WebGLRenderingContext.h:

2011-02-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WAI-ARIA @aria-sort not exposed on rowheader and columnheader roles.
        https://bugs.webkit.org/show_bug.cgi?id=53842

        Test: platform/mac/accessibility/aria-sort.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::sortDirection):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:

2011-02-07  Darin Adler  <darin@apple.com>

        Reviewed by Antti Koivisto.

        Add built-in decoder for UTF-8 for improved performance
        https://bugs.webkit.org/show_bug.cgi?id=53898

        Correct behavior is covered by existing tests.

        * Android.mk: Added TextCodecUTF8.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/text/TextCodecICU.cpp: Removed registration of UTF-8
        since that's now handled by the built-in UTF-8 codec.
        (WebCore::TextCodecICU::registerEncodingNames): Renamed to remove
        the word "extended" since all codecs from ICU are now extended.
        (WebCore::TextCodecICU::registerCodecs): Ditto.
        * platform/text/TextCodecICU.h: Ditto.

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::decode): Added a FIXME about missing
        error handling.

        * platform/text/TextCodecUTF8.cpp: Added.
        * platform/text/TextCodecUTF8.h: Added.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps): Added TextCodecUTF8, and
        removed TextCodecICU, TextCodecBrew, and TextCodecWinCE.
        (WebCore::extendTextCodecMaps): Updated names for
        TextCodecICU and TextCodecWinCE.

        * platform/text/brew/TextCodecBrew.cpp:
        (WebCore::TextCodecBrew::registerEncodingNames): Renamed to remove
        the word "extended" since all codecs from Brew are now extended.
        (WebCore::TextCodecBrew::registerCodecs): Ditto.
        * platform/text/brew/TextCodecBrew.h: Ditto.

        * platform/text/gtk/TextCodecGtk.cpp:
        (WebCore::TextCodecGtk::registerBaseEncodingNames): Removed
        registration of UTF-8. It's questionable whether the other codecs
        here are really basic. If we think they qualify, then we should
        register them on other platforms, not just GTK.
        (WebCore::TextCodecGtk::registerBaseCodecs): Ditto.

        * platform/text/wince/TextCodecWinCE.cpp:
        (WebCore::getCodePage): Removed special case for UTF-8 since we
        no longer use this codec for UTF-8.
        (WebCore::TextCodecWinCE::registerEncodingNames): Renamed to remove
        the word "extended" since all codecs from WinCE are now extended.
        (WebCore::TextCodecWinCE::registerCodecs): Ditto.
        * platform/text/wince/TextCodecWinCE.h: Ditto.

2011-02-07  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] atk_text_get_caret_offset fails for list items
        https://bugs.webkit.org/show_bug.cgi?id=53436

        Consider list item markers when calculating the offset.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_caret_offset): Adjust the offset
        with the item marker's length for list items.
        (webkit_accessible_text_set_caret_offset): Replace usage of
        g_utf8_strlen() by calling to markerText.length().

2011-02-07  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix LayoutTests/media/restore-from-page-cache.html
        https://bugs.webkit.org/show_bug.cgi?id=53621

        Changed the networkState to MediaPlayer::Loaded when 
        MediaPlayerPrivateQt has enough data.

        Test: media/restore-from-page-cache.html

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::updateStates):

2011-01-31  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement beautification of scripts inlined in html documents.
        https://bugs.webkit.org/show_bug.cgi?id=52706

        To beautify scripts inlined in html, we need to cut individual scripts, beautify them using UglifyJS library, and
        finally paste them back to html.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter): Implement formatting of scripts inlined in html.
        (WebInspector.ScriptFormatter.prototype.formatContent.didFormatChunks):
        (WebInspector.ScriptFormatter.prototype.formatContent):
        (WebInspector.ScriptFormatter.prototype._splitContentIntoChunks):
        (WebInspector.ScriptFormatter.prototype._formatChunks.didFormat):
        (WebInspector.ScriptFormatter.prototype._formatChunks):
        (WebInspector.ScriptFormatter.prototype._buildContentFromChunks):
        (WebInspector.ScriptFormatter.prototype._formatScript.messageHandler):
        (WebInspector.ScriptFormatter.prototype._formatScript):
        * inspector/front-end/ScriptFormatterWorker.js:
        (onmessage):
        (buildMapping):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrameContent): Use SourceFrameContent and FormattedSourceFrameContent to perform operations with line numbers.
        * inspector/front-end/SourceFrameContent.js: Added.
        (WebInspector.SourceFrameContent): Helper class, holds resource text and scripts layout
        (WebInspector.SourceFrameContent.prototype.get scriptRanges):
        (WebInspector.SourceFrameContent.prototype.locationToPosition):
        (WebInspector.SourceFrameContent.prototype.positionToLocation):
        (WebInspector.SourceFrameContent.prototype.scriptLocationForLineNumber):
        (WebInspector.SourceFrameContent.prototype.scriptLocationForRange):
        (WebInspector.SourceFrameContent.prototype.lineNumberToRange):
        (WebInspector.SourceFrameContent.prototype._intersectingScriptRange):
        (WebInspector):
        (WebInspector.FormattedSourceFrameContent): Helper class, holds original and formatted versions of resource and mapping between them.
        (WebInspector.FormattedSourceFrameContent.prototype.get text):
        (WebInspector.FormattedSourceFrameContent.prototype.originalLocationToFormattedLocation):
        (WebInspector.FormattedSourceFrameContent.prototype.scriptLocationForFormattedLineNumber):
        (WebInspector.FormattedSourceFrameContent.prototype._convertPosition):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-02-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: "Reveal in elements panel" does not always work.
        https://bugs.webkit.org/show_bug.cgi?id=53775

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenu.prototype.show):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.switchToAndFocus):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired.focusElement):
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype._contextMenuEventFired):
        * inspector/front-end/inspector.js:
        (WebInspector.cancelSearch):

2011-02-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Relative .. in URL paths shouldn't skip adjacent / characters
        https://bugs.webkit.org/show_bug.cgi?id=53907

        Our new behavior matches Firefox, Chrome, and IE.

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

2011-02-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti Koivisto.

        WebKitTestRunner does not block remote resources or complain about them
        https://bugs.webkit.org/show_bug.cgi?id=42139
        <rdar://problem/8183942>

        * Configurations/WebCore.xcconfig: Allow WebKitTestRunner to link
        WebCore.
        * WebCore.exp.in: Export a handful of KURL symbols.

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

        Reviewed by Darin Adler.

        OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
        https://bugs.webkit.org/show_bug.cgi?id=52867

        * ForwardingHeaders/wtf/OwnArrayPtrCommon.h: Removed.
        * bindings/v8/NPV8Object.cpp:
        (WebCore::createValueListFromVariantArgs): Returns PassOwnArrayPtr<v8::Handle<v8::Value>> instead of
        v8::Handle<v8::Value>*.
        (_NPN_Invoke): Calls createValueListFromVariantArgs.
        (_NPN_InvokeDefault): createValueListFromVariantArgs.
        (_NPN_Construct): createValueListFromVariantArgs.
        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call): Calls adoptArrayPtr.
        (WebCore::ScriptFunctionCall::construct): Ditto.
        (WebCore::ScriptCallback::call):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::createNewContext): Ditto.
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl): Ditto
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode): Ditto,
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::parseMappedAttribute): Calls newCoordsArray.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute): Calls newLengthArray.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getAttachedShaders): Calls adoptArraYptr.
        (WebCore::WebGLRenderingContext::simulateVertexAttrib0): Ditto.
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::LRUImageBufferCache): Dito.
        * platform/Length.cpp:
        (WebCore::newCoordsArray): Returns PassOwnArrayPtr<Length> instead of Length*.
        (WebCore::newLengthArray): Returns PassOwnArrayPtr<Length> instead of Length*.
        * platform/Length.h: Prototype changes.
        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::ANGLEWebKitBridge::validateShaderSource): Calls adoptArrayPtr.
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::getDirtyRects): Ditto.
        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::getNormalizedTextRun): Ditto.
        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::glyphsToAdvances): Ditto.
        (WebCore::canRender): Ditto.
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::updateSubRect): Ditto.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas): Ditto.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::readbackHardwareToSoftware): Ditto.
        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::to16bit): Ditto.
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::getContextMenuItems): Ditto.
        * platform/win/LoggingWin.cpp:
        (WebCore::initializeWithUserDefault): Ditto.
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::fetchInfo): Ditto.

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

        Unreviewed.

        * WebCore.xcodeproj/project.pbxproj: Run sort-xcode-project-file.

2011-02-03  Dominic Cooney  <dominicc@google.com>

        Reviewed by Dimitri Glazkov.

        Convert <keygen> option elements to a shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=51379

        Covered by existing tests e.g. fast/html/keygen.html,
        html5lib/runner.html, etc.

        * css/html.css:
        (form): Cleanup.
        (keygen, select): Border radii should match so focus ring looks good.
        (keygen::-webkit-keygen-select): No margin on the shadow element.
        (select): Hoisting border radius to keygen, select rule.
        * dom/SelectElement.cpp:
        (WebCore::toSelectElement): keygen is no longer a select element.
        * html/HTMLKeygenElement.cpp: Implements keygen shadow.
        (WebCore::KeygenSelectElement::create):
        (WebCore::KeygenSelectElement::shadowPseudoId):
        (WebCore::KeygenSelectElement::KeygenSelectElement):
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        (WebCore::HTMLKeygenElement::parseMappedAttribute):
        (WebCore::HTMLKeygenElement::appendFormData):
        (WebCore::HTMLKeygenElement::formControlType):
        (WebCore::HTMLKeygenElement::reset):
        (WebCore::HTMLKeygenElement::selectShadow):
        * html/HTMLKeygenElement.h: keygen is no longer a select on C++ side.
        (WebCore::HTMLKeygenElement::canStartSelection):
        (WebCore::HTMLKeygenElement::isEnumeratable):
        (WebCore::HTMLKeygenElement::isResettable):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::ownerSelectElement): Only owned by selects.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement): Only 'select' tag name.

2011-02-06  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix coding style errors in ClipboardQt.h
        https://bugs.webkit.org/show_bug.cgi?id=43520

        Fix coding style: order of header and indentation.

        * platform/qt/ClipboardQt.h:
        (WebCore::ClipboardQt::create):
        (WebCore::ClipboardQt::clipboardData):
        (WebCore::ClipboardQt::invalidateWritableData):

2011-02-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej Stachowiak.

        Use bloom filter for descendant selector filtering
        https://bugs.webkit.org/show_bug.cgi?id=53880
        
        Bloom filter is faster than a hash set in this kind of use.
        
        Shark thinks this speeds up style matching by ~30% on sites
        with lots of descendant selectors.

        * ForwardingHeaders/wtf/BloomFilter.h: Added.
        * css/CSSStyleSelector.cpp:
        (WebCore::collectElementIdentifierHashes):
        (WebCore::CSSStyleSelector::pushParent):
        (WebCore::CSSStyleSelector::popParent):
        (WebCore::CSSStyleSelector::fastRejectSelector):
        (WebCore::RuleData::collectDescendantSelectorIdentifierHashes):
        * css/CSSStyleSelector.h:

2011-02-06  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Antti Koivisto.

        media/video-document-types.html sometimes crashes the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=53884

        No new tests. Already covered by media/video-document-types.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::userCancelledLoad): Stop the load timer
        when cancelling the load.

2011-02-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Use WCHAR instead of TCHAR
        https://bugs.webkit.org/show_bug.cgi?id=53863

        We always use the UNICODE versions of windows functions, so
        the usage of TCHAR makes no sense and mixing them is bad style.

        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/win/QTMovie.cpp:
        * platform/graphics/win/QTMovieGWorld.cpp:
        (QTMovieGWorld::fullscreenWndProc):
        (QTMovieGWorld::enterFullscreen):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        * platform/graphics/win/SimpleFontDataWin.cpp:
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        * platform/win/BString.cpp:
        * platform/win/ClipboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle):
        (WebCore::createGlobalHDropContent):
        (WebCore::createGlobalImageFileDescriptor):
        * platform/win/ContextMenuWin.cpp:
        * platform/win/CursorWin.cpp:
        (WebCore::loadSharedCursor):
        * platform/win/FileChooserWin.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::popupClassName):
        (WebCore::PopupMenuWin::show):
        * platform/win/PopupMenuWin.h:

2011-02-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Replace FLT_MAX with std::numeric_limits
        https://bugs.webkit.org/show_bug.cgi?id=53861

        Also move EFL's userIdleTime from TemporaryLinkStubs into SystemTimeEfl.

        * html/NumberInputType.cpp:
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseToDoubleForNumberType):
        * platform/brew/SystemTimeBrew.cpp:
        (WebCore::userIdleTime):
        * platform/efl/SystemTimeEfl.cpp:
        (WebCore::userIdleTime):
        * platform/efl/TemporaryLinkStubs.cpp:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setupAnimation):
        * platform/win/SystemTimeWin.cpp:
        (WebCore::userIdleTime):
        * platform/wx/SystemTimeWx.cpp:
        (WebCore::userIdleTime):

2011-02-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Add dependencies for Visual Studio projects
        https://bugs.webkit.org/show_bug.cgi?id=53773

        Add a JavaScriptCore dependecy to WebCore, so CMake can 
        generate the correct build order for the solution.

        * CMakeLists.txt:

2011-02-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Unify ENABLE_SVG sections
        https://bugs.webkit.org/show_bug.cgi?id=53778

        * CMakeLists.txt:

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

        Reviewed by Dirk Schulze.

        Refactor Font::normalizeSpaces() to avoid an extra String copy.
        https://bugs.webkit.org/show_bug.cgi?id=53871

        Have normalizeSpaces() take UChar*,length arguments instead of a
        String, since all call sites were creating temporaries from these
        components anyway.

        Font::normalizeSpaces() now always makes 1 String copy,
        instead of 1 in the best case and 2 in the worst case.

        * platform/graphics/Font.cpp:
        (WebCore::Font::normalizeSpaces):
        * platform/graphics/Font.h:
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForSimpleText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::selectionRectForComplexText):
        * svg/SVGFont.cpp:
        (WebCore::SVGTextRunWalker::walk):

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

        Reviewed by Dirk Schulze.

        Fix potential buffer overrun in SVGTextRunWalker::walk()
        https://bugs.webkit.org/show_bug.cgi?id=53870

        A new String was created from a UChar* with a 'length' argument
        that could be greater than the number of UChars available.

        * svg/SVGFont.cpp:
        (WebCore::SVGTextRunWalker::walk):

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

        Reviewed by Eric Seidel.

        Remove unused parameter related to XSSAuditor
        https://bugs.webkit.org/show_bug.cgi?id=53862

        * WebCore.exp.in:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeScript):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/ScriptControllerBase.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::executeScriptInWorld):
        * bindings/js/ScriptController.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/v8/ScriptController.h:

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

        Fix Qt build.

        * WebCore.pro:

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

        Reviewed by Eric Seidel.

        Delete XSSAuditor
        https://bugs.webkit.org/show_bug.cgi?id=53859

        The job of the XSSAuditor is now done by the XSSFilter.  In the future,
        we might rename XSSFilter to XSSAuditor.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/ScriptControllerBase.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::evaluate):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * dom/Document.cpp:
        (WebCore::Document::implicitOpen):
        (WebCore::Document::processBaseElement):
        * dom/ScriptableDocumentParser.cpp:
        (WebCore::ScriptableDocumentParser::ScriptableDocumentParser):
        * dom/ScriptableDocumentParser.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::shouldLoadExternalScriptFromSrc):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        * page/XSSAuditor.cpp: Removed.
        * page/XSSAuditor.h: Removed.

2011-02-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Need a way to resize and scroll the page at the same time
        https://bugs.webkit.org/show_bug.cgi?id=53814
        <rdar://problem/8498008>

        Export a function needed by WebKit2.

        * WebCore.exp.in:

2011-02-05  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Use Document::encoding() instead of DocumentWriter::encoding()
        https://bugs.webkit.org/show_bug.cgi?id=53398

        This change makes the code more readable, when a subresource
        inherits the character encoding of the document.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::scriptCharset):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestPreload):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::encodingFromAcceptCharset):

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

        Reviewed by Eric Seidel.

        Introduce URLString to represent a canonicalized URL represented by a string
        https://bugs.webkit.org/show_bug.cgi?id=53847

        Instead of using String all over the codebase to represent a URL,
        instead we should have a type to represent a canonicalized URL in the
        form of a string.  This patch introduces that type.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/KURL.cpp:
        (WebCore::KURL::KURL):
        * platform/KURL.h:
        (WebCore::KURL::urlString):

2011-02-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Style widgets not rendering
        https://bugs.webkit.org/show_bug.cgi?id=53849

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasValidClassId): x-qt-styled-widget is a valid class id too

2011-02-05  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Adam Barth.

        Add ContentSecurityPolicy object to Document and pass the X-WebKit-CSP header from the MainResourceLoader.
        https://bugs.webkit.org/show_bug.cgi?id=53685

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.h:
        (WebCore::Document::contentSecurityPolicy):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        * page/ContentSecurityPolicy.h:

2011-02-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Safari should lowercase schemes in cannonicalized urls to match every other browser
        https://bugs.webkit.org/show_bug.cgi?id=53848

        We're clearly the odd man out here.  See results from every browser at:
        https://github.com/abarth/url-spec/blob/master/tests/gurl-results/by-browser.txt

        * platform/KURL.cpp:
        (WebCore::KURL::parse):
         - Just lowercase the scheme when copying.

2011-02-05  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        Optimize matching of descendant selectors
        https://bugs.webkit.org/show_bug.cgi?id=49876
        <rdar://problem/8772822>
        
        During style recalculation, maintain a filter of tags, ids and classes seen in ancestor elements.
        Use the filter to quickly reject descendant and child selectors when doing style matching.

        This speeds up style recalculations 3-6x on many major web sites.

        * css/CSSStyleSelector.cpp:
        (WebCore::RuleData::RuleData):
        (WebCore::RuleData::descendantSelectorIdentifierHashes):
        (WebCore::collectElementIdentifiers):
        (WebCore::CSSStyleSelector::pushParent):
        (WebCore::CSSStyleSelector::popParent):
        (WebCore::CSSStyleSelector::fastRejectSelector):
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::RuleData::collectDescendantSelectorIdentifierHashes):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::ParentStackFrame::ParentStackFrame):
        * dom/Element.cpp:
        (WebCore::StyleSelectorParentPusher::StyleSelectorParentPusher):
        (WebCore::StyleSelectorParentPusher::push):
        (WebCore::StyleSelectorParentPusher::~StyleSelectorParentPusher):
        (WebCore::Element::attach):
        (WebCore::Element::recalcStyle):

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

        Reviewed by Adam Barth.

        Refactor: NotificationCenter shouldn't hold its own copy of the ScriptExecutionContext*
        when it inherits one from ActiveDOMObject.
        https://bugs.webkit.org/show_bug.cgi?id=53815

        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotificationCenter::requestPermission):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::requestPermissionCallback):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationCenter):
        (WebCore::NotificationCenter::checkPermission):
        (WebCore::NotificationCenter::requestPermission):
        (WebCore::NotificationCenter::disconnectFrame):
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createHTMLNotification):
        (WebCore::NotificationCenter::createNotification):

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

        Reviewed by Maciej Stachowiak.

        Crash in WebCore::TextEncoding::decode below XSSFilter::init
        https://bugs.webkit.org/show_bug.cgi?id=53837

        Add missing null check.

        Test: http/tests/security/xssAuditor/non-block-javascript-url-frame.html

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::init):

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

        Reviewed by Dan Bernstein.

        Crashes in ShadowBlur via WebKit2 FindController
        https://bugs.webkit.org/show_bug.cgi?id=53830
        
        Fix a crash cause by re-entering ShadowBlur, and add assertions to
        detect when it happens.
        
        The re-entrancy occurred when drawRectShadowWithTiling() filled
        the interior of the shadow with fillRect() on the context
        which still had the shadow state set. This would make another ShadowBlur
        on the stack and call into the code again, potentially blowing away
        the image buffer.
        
        Fix by turning off shadows in the destination context while we're
        drawing the tiled shadow. The non-tiled code path already did this.

        Not testable because CSS shadows clip out the inside of the rect
        being shadowed, and SVG uses fillPath, even for rects.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::ScratchBuffer):
        (WebCore::ScratchBuffer::getScratchBuffer):
        (WebCore::ScratchBuffer::scheduleScratchBufferPurge):
        (WebCore::ShadowBlur::ShadowBlur):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):

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

        Reviewed by Martin Robinson.

        [GTK] Don't use a fixed size for search field icons
        https://bugs.webkit.org/show_bug.cgi?id=50624

        Use the parent input content box to make sure the icon fits in the
        search field, scaling it down when needed.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintGdkPixbuf):
        (WebCore::getIconSizeForPixelSize):
        (WebCore::adjustSearchFieldIconStyle):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsDecorationStyle):
        (WebCore::centerRectVerticallyInParentInputElement):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeGtk::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        (WebCore::RenderThemeGtk::paintCapsLockIndicator):
        (WebCore::RenderThemeGtk::paintMediaButton):

2011-02-04  Hironori Bono  <hbono@chromium.org>

        Reviewed by Adam Barth.

        [chromium] JPEG corruption
        https://bugs.webkit.org/show_bug.cgi?id=53250

        Same as gray-scale JPEGs, we convert the colors of CMYK JPEGs with color
        profiles from CMYK to RGB twice and it causes color corruption. This
        change suppresses the color profiles for CMYK JPEGs same as gray-scale
        ones.

        Test: fast/images/cmyk-jpeg-with-color-profile.html

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

2011-02-04  Xiyuan Xia  <xiyuan@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Option text in select popup does not align with menulist button text
        https://bugs.webkit.org/show_bug.cgi?id=53632

        This makes clientPaddingLeft and  clientPaddingRight return
        the additional m_innerBlock's padding so that the popup item text
        aligns with the menulist button text.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::clientPaddingLeft):
        (WebCore::RenderMenuList::clientPaddingRight):

2011-02-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig and Beth Dakin.

        REGRESSION: Horizontal scrollbar thumbs leave artifacts over page content when scrolling vertically
        <rdar://problem/8962457>

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        Subtract scrollbars from the scroll view rect if overlay scrollers are enabled.
        
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::setScrollOffsetFromAnimation):
        Make sure to invalidate both scrollbars if overlay scrollers are enabled.

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

        Reviewed by Eric Seidel.

        PluginDocuments don't create widgets for plugins on back/forward
        https://bugs.webkit.org/show_bug.cgi?id=53474

        Long ago, PluginDocument always caused the HTMLEmbedElement to create
        its widget synchronously during a post-layout task.  Recently, however,
        some changes to the HistroyController caused layout on back/forward to
        become slightly more complicated (and added an extra level of recursion
        to layout).  This extra level of recursion triggered the "I've recursed
        too many times" condition in the post-layout task queue, causing the
        FrameView to run the remainder of the tasks asynchronously.
        Unfortunately, that broke PluginDocument because it needs its the
        HTMLEmbedElement's updateWidget task to run synchronously.

        This patch adds a mechanism for "kicking off" the pending post-layout
        tasks synchronously (instead of waiting for the timer to fire).
        PluginDocument then uses that facility to ensure that the
        HTMLEmbedElement's updateWidget task happens.

        Test: plugins/plugin-document-back-forward.html

        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::appendBytes):
        * page/FrameView.cpp:
        (WebCore::FrameView::flushAnyPendingPostLayoutTasks):
        * page/FrameView.h:

2011-02-04  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Crash in WebCore::HistoryController::itemsAreClones
        https://bugs.webkit.org/show_bug.cgi?id=52819

        Avoids deleting the current HistoryItem while it is still in use.
        Ensures that provisional items are committed for same document navigations.
        Ensures that error pages are committed on back/forward navigations.
        Also removes unneeded sanity checks used for diagnosing the problem.

        * loader/HistoryController.cpp:
        * loader/HistoryController.h:

2011-02-04  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        Code Changes.

        CSS 2.1 failure: content-*
        https://bugs.webkit.org/show_bug.cgi?id=52126

        Test: fast/css/counters/content-021.html

        * rendering/CounterNode.cpp:
        (showCounterTree):
        Made parameter const because it is supposed to be so.
        * rendering/RenderCounter.cpp:
        (WebCore::previousInPreOrder):
        (WebCore::previousSiblingOrParent):
        (WebCore::parentElement):
        (WebCore::areRenderersElementsSiblings):
        (WebCore::nextInPreOrder):
        Added these local helper functions to help navigate the DOM tree
        enriched with :before and :after pseudo elements.
        (WebCore::planCounter):
        Fixed bug that would create a repeat counter for second and
        subsequent renderers associated with the same DOM element.
        (WebCore::findPlaceForCounter):
        (WebCore::makeCounterNode):
        Changed to use the new tree navigation functions described above
        instead of the Renderer Tree navigation functions.
        (WebCore::RenderCounter::rendererSubtreeAttached):
        (WebCore::RenderCounter::rendererStyleChanged):
        Optimized to not bother about counters until the renderers are
        finally attached.
        (showRendererTree):
        (showNodeTree):
        Debug helper functions used to debug Counter bugs.

2011-02-04  Dan Bernstein  <mitz@apple.com>

        Typo fix.

        * html/parser/XSSFilter.cpp:
        (WebCore::HTMLNames::containsJavaScriptURL):

2011-02-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Make an infinite loop introduced in r77454 finite.

        * html/parser/XSSFilter.cpp:
        (WebCore::HTMLNames::containsJavaScriptURL):

2011-02-04  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Frame accurate seeking isn't always accurate
        https://bugs.webkit.org/show_bug.cgi?id=52697

        Test: media/video-frame-accurate-seek.html

        Make seeking slightly more accurate by rounding instead of truncating
        when converting from seconds-in-float to time/timeScale.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTTime):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::mediaTimeForTimeValue):
        * platform/graphics/win/QTMovie.cpp:
        (QTMovie::setCurrentTime):

2011-02-04  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Second IndexedDB events overhaul patch
        https://bugs.webkit.org/show_bug.cgi?id=53813

        If an IDBRequest has a IDBTransaction, it should propogate
        events through it. In order to do this, IDBRequest needs to
        hold a transaction frontend object rather than a backend one.

        Test: storage/indexeddb/request-event-propagation.html

        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::IDBCursor):
        * storage/IDBCursor.h:
        (WebCore::IDBCursor::create):
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::setSetVersionTransaction):
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::deleteObjectStore):
        * storage/IDBDatabase.h:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::IDBIndex):
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::create):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::deleteIndex):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStore.h:
        (WebCore::IDBObjectStore::create):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::resetReadyState):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBRequest.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::contextDestroyed):
        (WebCore::IDBTransaction::enqueueEvent):
        * storage/IDBTransaction.h:
        * storage/IDBTransaction.idl:

2011-02-04  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        First step towards event propogation within IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=53795

        This is the first step towards implementing
        http://www.w3.org/Bugs/Public/show_bug.cgi?id=11348
        within IndexedDB. I've created a method that knows how
        to capture and bubble (based on Node's dispatchGenericEvent).
        I've then changed IDBRequest to use it.

        The only functional change is that preventDefault now must
        be called in error events to prevent the transaction from
        being aborted. The tests reflect this change and there's one
        specific test to look at this behavior.

        Test: storage/indexeddb/error-causes-abort-by-default.html

        * storage/IDBAbortEvent.cpp:
        (WebCore::IDBAbortEvent::create):
        (WebCore::IDBAbortEvent::IDBAbortEvent):
        * storage/IDBAbortEvent.h:
        * storage/IDBCompleteEvent.cpp:
        (WebCore::IDBCompleteEvent::create):
        (WebCore::IDBCompleteEvent::IDBCompleteEvent):
        * storage/IDBCompleteEvent.h:
        * storage/IDBErrorEvent.cpp:
        (WebCore::IDBErrorEvent::IDBErrorEvent):
        * storage/IDBEvent.cpp:
        (WebCore::IDBEvent::IDBEvent):
        (WebCore::IDBEvent::dispatch):
        * storage/IDBEvent.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBRequest.h:
        * storage/IDBSuccessEvent.cpp:
        (WebCore::IDBSuccessEvent::IDBSuccessEvent):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):
        * storage/IDBTransaction.h:
        (WebCore::IDBTransaction::backend):
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::taskTimerFired):

2011-02-04  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Dmitry Titov.

        Clone WebClipboard to be frame-specific.
        https://bugs.webkit.org/show_bug.cgi?id=53727

        For drop operations, Chrome currently snapshots the data and copies it
        into the renderer process. As we add more supported drag data types, the
        copy will become increasingly expensive. Instead, we'd like to snapshot
        data in the browser to reduce the amount of data copied and to support
        Blob in DataTransferItem. In order to allow this, we associated
        WebClipboard with a frame so it can correctly route its IPCs to the
        corresponding Chromium host.

        No new tests because no new functionality.

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::createReadable):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::create):
        * platform/chromium/PlatformBridge.h:
        * platform/chromium/ReadableDataObject.cpp:
        (WebCore::ReadableDataObject::create):
        (WebCore::ReadableDataObject::ReadableDataObject):
        (WebCore::ReadableDataObject::getData):
        (WebCore::ReadableDataObject::urlTitle):
        (WebCore::ReadableDataObject::htmlBaseUrl):
        (WebCore::ReadableDataObject::filenames):
        (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
        * platform/chromium/ReadableDataObject.h:

2011-02-04  Jeremy Orlow  <jorlow@chromium.org>

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

        * storage/IDBAbortEvent.cpp:
        (WebCore::IDBAbortEvent::create):
        (WebCore::IDBAbortEvent::IDBAbortEvent):
        * storage/IDBAbortEvent.h:
        * storage/IDBCompleteEvent.cpp:
        (WebCore::IDBCompleteEvent::create):
        (WebCore::IDBCompleteEvent::IDBCompleteEvent):
        * storage/IDBCompleteEvent.h:
        * storage/IDBErrorEvent.cpp:
        (WebCore::IDBErrorEvent::IDBErrorEvent):
        * storage/IDBEvent.cpp:
        (WebCore::IDBEvent::IDBEvent):
        * storage/IDBEvent.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBRequest.h:
        * storage/IDBSuccessEvent.cpp:
        (WebCore::IDBSuccessEvent::IDBSuccessEvent):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):
        * storage/IDBTransaction.h:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::taskTimerFired):

2011-02-04  Martin Galpin  <martin@66laps.com>

        Reviewed by David Levin.

        CORS origin header not set on GET when a preflight request is required.
        https://bugs.webkit.org/show_bug.cgi?id=50773
        
        Test: http/tests/xmlhttprequest/cross-origin-preflight-get.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::preflightSuccess): 
        Explicitly set the request origin after a preflight request succeeds.

2011-02-04  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        First step towards event propogation within IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=53795

        This is the first step towards implementing
        http://www.w3.org/Bugs/Public/show_bug.cgi?id=11348
        within IndexedDB. I've created a method that knows how
        to capture and bubble (based on Node's dispatchGenericEvent).
        I've then changed IDBRequest to use it.

        The only functional change is that preventDefault now must
        be called in error events to prevent the transaction from
        being aborted. The tests reflect this change and there's one
        specific test to look at this behavior.

        Test: storage/indexeddb/error-causes-abort-by-default.html

        * storage/IDBAbortEvent.cpp:
        (WebCore::IDBAbortEvent::create):
        (WebCore::IDBAbortEvent::IDBAbortEvent):
        * storage/IDBAbortEvent.h:
        * storage/IDBCompleteEvent.cpp:
        (WebCore::IDBCompleteEvent::create):
        (WebCore::IDBCompleteEvent::IDBCompleteEvent):
        * storage/IDBCompleteEvent.h:
        * storage/IDBErrorEvent.cpp:
        (WebCore::IDBErrorEvent::IDBErrorEvent):
        * storage/IDBEvent.cpp:
        (WebCore::IDBEvent::IDBEvent):
        (WebCore::IDBEvent::dispatch):
        * storage/IDBEvent.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBRequest.h:
        * storage/IDBSuccessEvent.cpp:
        (WebCore::IDBSuccessEvent::IDBSuccessEvent):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):
        * storage/IDBTransaction.h:
        (WebCore::IDBTransaction::backend):
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::taskTimerFired):

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

        Reviewed by Csaba Osztrogonác.

        [Qt]REGRESSION(r76951): media/controls-without-preload.html fails
        https://bugs.webkit.org/show_bug.cgi?id=53674

        * css/mediaControlsQt.css:

2011-02-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler and Dave Hyatt.

        <rdar://problem/8902704> Make ruby text size 50% by default
        https://bugs.webkit.org/show_bug.cgi?id=53723

        * css/html.css:
        (ruby > rt): Changed the font-size from 60% to 50%.

2011-02-04  Antti Koivisto  <antti@apple.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=53610
        Regression: adjacent sibling selector not working as expected
        <rdar://problem/8960033>
        
        https://bugs.webkit.org/show_bug.cgi?id=53574
        REGRESSION (r76012): :last-child:after not working as expected
        <rdar://problem/8948643>
        
        Test for additional conditions in parent style that prevent sharing.

        Tests: fast/selectors/style-sharing-adjacent-selector.html
               fast/selectors/style-sharing-last-child.html

        * css/CSSStyleSelector.cpp:
        (WebCore::parentStylePreventsSharing):
        (WebCore::CSSStyleSelector::locateSharedStyle):

2011-02-04  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dimitri Glazkov.

        Chromium GYP build fix.

        When various settings were moved to webcore_prerequisites in r66364,
        things that should have been direct_dependent_settings were not marked
        as such. GYP 'defines', for example, make no sense on a 'none'-type
        target such as webcore_prerequisites. It appears that it was intended
        for these settings to be pushed to direct dependents, which would make
        direct_dependent_settings correct.

        Losing the ChromiumWebCoreObjC defines on the Mac, for example, caused
        http://crbug.com/71537, which at best causes Mac console log spew, and
        at worst may result in Chromium's copy of WebCore using system
        definitions of certain Objective-C classes at runtime, or vice-versa.

        The build now includes a postbuild step to prevent
        http://crbug.com/71537 from regressing again. The build will fail upon
        regression.

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

        * WebCore.gyp/WebCore.gyp: Move things in webcore_prerequisites into
          direct_dependent_settings as needed, add the check_objc_rename
          postbuild step.
        * WebCore.gyp/mac/check_objc_rename.sh: Added.

2011-02-04  Robert Hogan  <robert@webkit.org>

        Reviewed by Darin Fisher.

        Move chromium iframe shim code to cross-platform file
        https://bugs.webkit.org/show_bug.cgi?id=52594

        Move Chromium code for identifying and cutting out
        iframe shims from plugins to cross-platform utility file
        IFrameShimSupport.cpp.
        Amend PluginViewQt to use this code to handle shims correctly.

        * WebCore.gypi: Add Chromium support for IFrameShimSupport.cpp
        * WebCore.pro: Add Qt support for IFrameShimSupport.cpp
        * plugins/IFrameShimSupport.cpp: Added.
        (WebCore::getObjectStack):
        (WebCore::iframeIsAbovePlugin):
        (WebCore::getPluginOcclusions):
        * plugins/IFframeShimSupport.h: Added.
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):

2011-02-04  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Levin.

        Implement "<option> should implement the dir attribute" for chromium port after r76983.
        https://bugs.webkit.org/show_bug.cgi?id=50969

        Use manual test Source/WebCore/manual-tests/pop-up-alignment-and-direction.html
        added in r76983.

        * platform/chromium/PopupMenuChromium.cpp: Remove directionality hint from
        <select> drop-down setting.
        (WebCore::PopupListBox::paintRow): Use <option>'s directionality to paint
        items in drop-down and pass-in bidi override flag when creating text run.
        * platform/chromium/PopupMenuChromium.h: Remove directionalityHint from
        PopupContainerSettings.

2011-02-04  Jeremy Orlow  <jorlow@chromium.org>

        Build fix from merge mistake.

        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::ensureEventTargetData):

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

        Reviewed by Darin Adler.

        Remove unneeded function declarations in comments in EditorClient.h
        https://bugs.webkit.org/show_bug.cgi?id=53745

        Removing unused commented out function declarations. No tests since this is just cleanup.

        * page/EditorClient.h:

2011-02-03  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Refactor IDBRequest and IDBTransaction a bit
        https://bugs.webkit.org/show_bug.cgi?id=53565

        There were a lot of subtle issues with the way IDBTransaction
        and IDBRequest used to be written. This cleans a lot of them up
        and largely simplifies the logic. Using EventQueue rather than
        timers is one example of the simplification.

        * bindings/scripts/CodeGeneratorV8.pm:
        * dom/EventQueue.cpp:
        (WebCore::EventQueue::enqueueEvent):
        (WebCore::EventQueue::dispatchEvent):
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::continueFunction):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::create):
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::resetReadyState):
        (WebCore::IDBRequest::onError):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::enqueueEvent):
        (WebCore::IDBRequest::eventTargetData):
        (WebCore::IDBRequest::ensureEventTargetData):
        * storage/IDBRequest.h:
        (WebCore::IDBRequest::dispatchEvent):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::abort):
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):
        (WebCore::IDBTransaction::onTimeout):
        (WebCore::IDBTransaction::canSuspend):
        (WebCore::IDBTransaction::stop):
        (WebCore::IDBTransaction::enqueueEvent):
        (WebCore::IDBTransaction::eventTargetData):
        (WebCore::IDBTransaction::ensureEventTargetData):
        * storage/IDBTransaction.h:

2011-02-01  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Remove the timeout event from IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=53521

        Remove timeout and ontimeout from IDBTransaction per the spec.

        * WebCore.gypi:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBTimeoutEvent.cpp: Removed.
        * storage/IDBTimeoutEvent.h: Removed.
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):
        * storage/IDBTransaction.h:
        * storage/IDBTransaction.idl:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        * storage/IDBTransactionBackendImpl.h:
        * storage/IDBTransactionCallbacks.h:

2011-02-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: Can't set accessibility overridden attributes on web objects
        https://bugs.webkit.org/show_bug.cgi?id=53725

        accessibilitySetOverriddenValue does not work on AX objects from WebCore because 
        the right method needed to be overridden (accessibilitySupportsOverriddenAttributes).
        Unfortunately, there's no way to test this from DRT, since AppKit returns the overridden
        attribute only when an AX client asks for it through the AX frameworks.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilitySupportsOverriddenAttributes]):

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

        Reviewed by Kent Tamura.

        REGRESSION(r76147): Slider thumb is not repainted when let go outside of the slider track.
        https://bugs.webkit.org/show_bug.cgi?id=53691

        Test: fast/repaint/slider-thumb-drag-release.html

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::stopDragging): Added dirtying the layout bit to ensure
            that the thumb is repainted.

2011-02-04  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Add "show more" data grid node and waiting message UI components.
        https://bugs.webkit.org/show_bug.cgi?id=53763

        - "show more" data grid node is used for on-demand population of
        data grid contents (similar to DOM tree capability for limiting
        displayed nodes count);

        - waiting message is used for informing user about long lasting
        operations (with a possibility to cancel them).

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/PleaseWaitMessage.js: Added.
        (WebInspector.PleaseWaitMessage):
        * inspector/front-end/ShowMoreDataGridNode.js: Added.
        (WebInspector.ShowMoreDataGridNode):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.data-grid button):
        (.please-wait-msg):
        * inspector/front-end/inspector.html:

2011-02-04  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=53740
        <rdar://problem/8503629> Allow platforms to specify if the placeholder should be visible when text controls are focused

        Tests:
        fast/forms/textarea-placeholder-visibility-1.html
        fast/forms/textarea-placeholder-visibility-2.html
        fast/forms/input-placeholder-visibility-1.html
        fast/forms/input-placeholder-visibility-2.html
        fast/forms/input-placeholder-visibility-3.html

        * html/HTMLFormControlElement.cpp: (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
        Add a check for shouldShowPlaceholderWhenFocused.
        * html/HTMLTextAreaElement.cpp: (WebCore::HTMLTextAreaElement::updateValue):
        Whenever the value is updated, we should also update placeholder visibility.
        * rendering/RenderTheme.h: (WebCore::RenderTheme::shouldShowPlaceholderWhenFocused):
        Make the default the same as the existing behavior.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm: (WebCore::RenderThemeMac::shouldShowPlaceholderWhenFocused):
        Show placeholder when appropriate. 

2011-02-04  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: evaluate on hover does not work on a breakpoint.
        https://bugs.webkit.org/show_bug.cgi?id=53768

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._mouseHover):

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

        Unreviewed, rolling out r77625 and r77626.
        http://trac.webkit.org/changeset/77625
        http://trac.webkit.org/changeset/77626
        https://bugs.webkit.org/show_bug.cgi?id=53765

        It broke Windows builds (Requested by Ossy_ on #webkit).

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * ForwardingHeaders/pcre/pcre.h: Added.
        * ForwardingHeaders/yarr/Yarr.h: Removed.
        * ForwardingHeaders/yarr/YarrInterpreter.h: Removed.
        * ForwardingHeaders/yarr/YarrPattern.h: Removed.
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::Private::regexp):
        (WebCore::RegularExpression::Private::compile):
        (WebCore::RegularExpression::Private::Private):
        (WebCore::RegularExpression::Private::create):
        (WebCore::RegularExpression::Private::~Private):
        (WebCore::RegularExpression::match):

2011-02-04  Peter Varga  <pvarga@webkit.org>

        Rubber-stamped by Csaba Osztrogonác.

        Replace PCRE with Yarr in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=53496

        Speculative windows build fix.

        No new tests needed.

        * platform/text/RegularExpression.cpp:

2011-02-04  Peter Varga  <pvarga@webkit.org>


        Reviewed by Gavin Barraclough.

        Replace PCRE with Yarr in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=53496

        No new tests needed.

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * ForwardingHeaders/pcre/pcre.h: Removed.
        * ForwardingHeaders/yarr/Yarr.h: Added.
        * ForwardingHeaders/yarr/YarrInterpreter.h: Added.
        * ForwardingHeaders/yarr/YarrPattern.h: Added.
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::Private::create):
        (WebCore::RegularExpression::Private::Private):
        (WebCore::RegularExpression::Private::compile):
        (WebCore::RegularExpression::match):

2011-02-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Network panel filtering is broken.
        https://bugs.webkit.org/show_bug.cgi?id=53764

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._sortItems):
        (WebInspector.NetworkPanel.prototype._sortByTimeline):
        (WebInspector.NetworkPanel.prototype._filter):
        (WebInspector.NetworkPanel.prototype._updateOffscreenRows):
        (WebInspector.NetworkDataGridNode.prototype.isFilteredOut):
        (WebInspector.NetworkDataGridNode.prototype.get selectable):
        (WebInspector.NetworkTotalGridNode.prototype.isFilteredOut):
        (WebInspector.NetworkTotalGridNode.prototype.get selectable):

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

        Reviewed by Pavel Feldman.

        Web Inspector: support overriding user agent strings
        https://bugs.webkit.org/show_bug.cgi?id=51485

        Test: http/tests/inspector/extensions-useragent.html

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::setUserAgentOverride):
        (WebCore::InspectorController::userAgentOverride):
        * inspector/InspectorController.h:
        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.reload):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onReload):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgent):
        (WebCore::FrameLoader::applyUserAgent):

2011-02-04  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: scripts panel displays wrong file name after reload.
        https://bugs.webkit.org/show_bug.cgi?id=53761

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):

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

        Reviewed by Pavel Feldman.

        Web Inspector: remove settings related methods from InspectorClient
        https://bugs.webkit.org/show_bug.cgi?id=53686

        * WebCore.exp.in:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorClient.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::InspectorFrontendClientLocal):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        * inspector/InspectorFrontendClientLocal.h: ports that provide in-process implementation of the inspector front-end can
        provide platform-specific settings accessor.
        (WebCore::InspectorFrontendClientLocal::Settings::Settings):
        (WebCore::InspectorFrontendClientLocal::Settings::~Settings):
        (WebCore::InspectorFrontendClientLocal::Settings::inspectorAttachedHeight):
        (WebCore::InspectorFrontendClientLocal::Settings::storeInspectorAttachedHeight):
        * loader/EmptyClients.h:

2011-02-03  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] frame several more JS code invocations into v8::TryCatch
        https://bugs.webkit.org/show_bug.cgi?id=53594

        This patch is preemptive and adjusts v8 bindings code to forthcoming small change
        in v8::ThrowException---currently sometimes exceptions thrown by this method
        do not reach surrounding v8::TryCatch handler (see
        http://code.google.com/p/v8/issues/detail?id=1072 and
        http://codereview.chromium.org/6397011/).  Therefore the goal of this patch
        is to make forthcoming v8 roll as smooth as possible (alas, we'll still need
        one rebaseline as of now.)

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::runScript): Do not rely on empty handle as a signal of exception, wrap into v8::TryCatch instead
        * bindings/v8/V8WindowErrorHandler.cpp:
        (WebCore::V8WindowErrorHandler::callListenerFunction): Ditto

2011-02-03  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Need WebKit2 equivalent of WebResourceLoadDelegate::willSendRequest in the Bundle
        https://bugs.webkit.org/show_bug.cgi?id=52897
        <rdar://problem/8898294>

        * WebCore.exp.in: Add export now needed by WebKit2

2011-02-03  Victoria Kirst  <vrk@google.com>

        Reviewed by James Robinson.

        Replaces float literals with uniform values in shader code
        so that buggy drivers unable to parse float values in different
        locales will not produce a pink video.

        [chromium] Fix pink video bug with gpu-acceleration enabled
        https://bugs.webkit.org/show_bug.cgi?id=53568

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::SharedValues::SharedValues):
        (WebCore::VideoLayerChromium::drawYUV):
        * platform/graphics/chromium/VideoLayerChromium.h:
        (WebCore::VideoLayerChromium::SharedValues::signAdjLocation):

2011-02-03  James Kozianski  <koz@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add navigator.registerProtocolHandler behind a flag.
        https://bugs.webkit.org/show_bug.cgi?id=52609

        This method is described in the HTML5 specification here,
        http://dev.w3.org/html5/spec/Overview.html#dom-navigator-registerprotocolhandler

        This change is largely cribbed from B. Green's 29651 patches. It is
        behind a flag so as not to break JS feature detection.

        New layout test fast/dom/registerProtocolHandler.html.

        * Configurations/FeatureDefines.xcconfig:
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::registerProtocolHandler):
        * page/Chrome.cpp:
        (WebCore::Chrome::registerProtocolHandler):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Navigator.cpp:
        (WebCore::verifyCustomHandlerURL):
        (WebCore::verifyProtocolHandlerScheme):
        (WebCore::Navigator::registerProtocolHandler):
        * page/Navigator.h:
        * page/Navigator.idl:

2011-02-03  Brian Ryner  <bryner@chromium.org>

        Reviewed by Darin Fisher.

        Add a field to the ResourceResponse for tracking the socket address
        of the host that the resource was fetched from.  Patch was originally
        by Paul Marks.
        https://bugs.webkit.org/show_bug.cgi?id=53699

        * platform/network/chromium/ResourceResponse.cpp:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::socketAddress):
        (WebCore::ResourceResponse::setSocketAddress):

2011-02-03  Adam Langley  <agl@chromium.org>

        Reviewed by Adam Barth.

        Plumb mixed script URL to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=52384

        Regressions covered by http/tests/security/mixedContent/*

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didRunInsecureContent):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkIfRunInsecureContent):
        * loader/FrameLoaderClient.h:

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

        Reviewed by Dan Bernstein.

        REGRESSION: Artifacts on box-shadow corners in some cases
        https://bugs.webkit.org/show_bug.cgi?id=53731

        Fix overdrawing artifacts in ShadowBlur's tiling code path,
        which show up in shadows using a color with alpha.
        
        Test: fast/box-shadow/shadow-tiling-artifact.html

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawRectShadowWithTiling): Ensure
        that the inner rect that gets filled does not overlap with any
        of the eight tiled areas by having the corner and side dimensions
        be the same for contiguous areas.

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

        Reviewed by Alexey Proskuryakov.

        XSS Auditor is spinning inside decodeURLEscapeSequences() if there are
        percent signs in large posted data
        https://bugs.webkit.org/show_bug.cgi?id=53405

        If the input string contains many non-% characters followed by a %
        character that is not a valid URL escape sequence, then the old
        algorithm would only advance the initial search by one character
        (instead of jumping to just after the % character).  That would cause
        the algorithm to take N^2 time (in the number of characters before the
        first % character).  This patch just advances the search past the first
        % character so we can start looking for next % character sooner.

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

2011-02-03  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: click on a breakpoint highlights wrong line in source frame.
        https://bugs.webkit.org/show_bug.cgi?id=53692

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._setupBreakpointElement):

2011-02-03  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Bail out if to string conversion returned empty handle
        https://bugs.webkit.org/show_bug.cgi?id=53687

        This a temporary measure: actually one probably should never get empty handle
        if there was no exception.  The root cause is under investigation.
        The bailout though allows Chromium not to crash---attempt to convert an empty
        v8 hande into WebCore string crashes with invalid memory access.

        See http://code.google.com/p/chromium/issues/detail?id=71544

        There is no known reduction expressible as a layout test so far.  The crash found with automated testing tools.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8NonStringValueToWebCoreString): Bail out on empty handle
        * bindings/v8/V8Binding.h:
        (WebCore::V8ParameterBase::prepareBase): Ditto

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

        Attempt to fix Chromium build.

        * html/parser/XSSFilter.cpp:

2011-02-03  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r77562.
        http://trac.webkit.org/changeset/77562
        https://bugs.webkit.org/show_bug.cgi?id=53630

        broke chromium mac build

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/mac/check_objc_rename.sh: Removed.

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

        Reviewed by Daniel Bates.

        XSS Auditor severely affects loading performance after submitting a large form
        https://bugs.webkit.org/show_bug.cgi?id=49845

        Switch over from the XSSAuditor to the XSSFilter, improving performance
        on this example.

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterToken):
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::isEnabled):

2011-02-03  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r77567.
        http://trac.webkit.org/changeset/77567
        https://bugs.webkit.org/show_bug.cgi?id=53468

        broke chromium linux svg, canvas tests, possibly win also?

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):

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

        Reviewed by Dimitri Glazkov.

        Refactoring: <progress> should not use ShadowElement
        https://bugs.webkit.org/show_bug.cgi?id=53583

        - Introduced RenderIndicatorPart and RenderProgressBarValuePart
          to be responsible for bar-part layout,
          which adopted layout logic from ShadowBlockElement.
        - ProgressBarValueElement is no longer a subclass of ShadowBlockElement.
        - Remove dependency from RenderProgress to HTMLProgressElement and
          ShadowBlockElement.
        - The shadow tree is no longer removed on detach(). It becomes persistent.
          This is now possible because the ShadowBlockElement dependency is gone.
        - ::-webkit-appearance for -webkit-progress-bar-value is no longer referred.
          That didn't make sense.

        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::createShadowSubtreeIfNeeded):
        * html/HTMLProgressElement.h:
        * html/shadow/ProgressBarValueElement.h: Added.
        (WebCore::ProgressBarValueElement::ProgressBarValueElement):
        (WebCore::ProgressBarValueElement::shadowPseudoId):
        (WebCore::ProgressBarValueElement::createRenderer):
        (WebCore::ProgressBarValueElement::create):
        * rendering/RenderIndicator.cpp:
        (WebCore::RenderIndicatorPart::RenderIndicatorPart):
        (WebCore::RenderIndicatorPart::~RenderIndicatorPart):
        (WebCore::RenderIndicatorPart::layout):
        (WebCore::RenderIndicatorPart::styleDidChange):
        * rendering/RenderIndicator.h: Added RenderIndicatorPart class
        (WebCore::RenderIndicatorPart::originalVisibility):
        (WebCore::RenderIndicatorPart::requiresForcedStyleRecalcPropagation):
        (WebCore::RenderIndicatorPart::canHaveChildren):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgressBarValuePart::preferredFrameRect):
        (WebCore::RenderProgressBarValuePart::shouldBeHidden):
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::layoutParts):
        (WebCore::RenderProgress::shouldHaveParts):
        * rendering/RenderProgress.h:
        (WebCore::RenderProgressBarValuePart::RenderProgressBarValuePart):

2011-02-03  Jia Pu  <jpu@apple.com>

        Reversion should not be marked as misspelled.
        https://bugs.webkit.org/show_bug.cgi?id=53255

        This patch includes fix for reported bug, and also some housekeeping changes.

        To implement desired behavior, we need:
        1. Add a new marker type, SpellCheckingExemption, since now we distingusish between text
           that shouldn't be spellchecked and text shouldn't be autocorrected.
        2. Make sure that there is no pending correction panel when we enter markAllMisspellingsAndBadGrammarInRanges().
           Otherwise the spell checking code in that function may interfere with autocorrection. This
           is achieved by explicitly applying pending correction when user types space, line break or
           paragraph break.

        Housekeeping code changes include:
        1. Change manual-tests that were broken by relocated WebCore directory.
        2. Use TextIterator in various DocumentMarkerController functions instead of using
           Node::traverseNextNode() directly.
        3. Allow passing multiple marker types into DocumentMarkerController::removeMarkers() and
           DocumentMarkerController::hasMarkers() to improve clarity and efficiency.
        4. Fixes of minor bugs that were exposed previously.

        * WebCore.exp.in: Change signature of DocumentMarkerController::removeMarkers().

        * dom/DocumentMarker.h: Added new marker type SpellCheckingExemption.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::removeMarkers): Use TextIterator to scan the range to be
           consistent with addMarker() function. Allow passing in multiple marker types in one call.
           Added a boolean argument to specify the behavior when removing markers that partially
           overlap the specified range.
        (WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair): Allow passing in
           multiple marker types in one call.
        (WebCore::DocumentMarkerController::hasMarkers): Use TextIterator to scan the range to be
           consistent with addMarker() function. Allow passing in multiple marker types in one call.

        * dom/DocumentMarkerController.h: Allow passing in multiple marker types to removeMarkers()
           and hasMarkers(). Added a boolean argument to removeMarkers() to specify the behavior when
           removing markers that partially overlap the specified range.

        * editing/Editor.cpp:
        (WebCore::markerTypesForAutocorrection): Add SpellCheckingExemption marker when apply correction.
        (WebCore::markerTypesForReplacement): Ditto.
        (WebCore::Editor::respondToChangedSelection): Reordered call to dismissCorrectionPanel() and
           setSelection() to make sure there is no pending correction when entering
           markAllMisspellingsAndBadGrammarInRanges().
        (WebCore::Editor::appliedEditing): Only remove CorrectionIndicator markers when the command
           is a top level command to improve efficiency.
        (WebCore::Editor::insertTextWithoutSendingTextEvent): Added code to applying pending correction.
        (WebCore::Editor::insertLineBreak): Ditto.
        (WebCore::Editor::insertParagraphSeparator): Ditto.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Don't mark mispelling if the
           text carries SpellCheckingExemption marker.
        (WebCore::Editor::correctionPanelTimerFired): Reset correction panel if the returned suggestion
           from spellchecker is an empty string.
        (WebCore::Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited):
           Use new DocumentMarkerController::removeMarkers() to replace custom implemenation to improve
           efficiency and readability.
        (WebCore::Editor::applyCorrectionPanelInfo): Remove the code that set caret position after
           applying correction, since it's unnecessary. Also, store pre-correction string together with
           the marker for reversion panel to use.
        (WebCore::Editor::applyAutocorrectionBeforeTypingIfAppropriate): Apply pending correction.
        (WebCore::Editor::changeSelectionAfterCommand): Moved marker removal code to Editor::appliedEditing()
           where we have access to EditCommand object.

        * editing/Editor.h: Added new function applyAutocorrectionAfterTypingIfAppropriate().

        * manual-tests/autocorrection/autocorrection-cancelled-by-ESC.html: Change manual-tests that
           were broken by relocated WebCore directory.

        * manual-tests/autocorrection/autocorrection-cancelled-by-typing-1.html: Ditto.

        * manual-tests/autocorrection/autocorrection-contraction.html: Ditto.

        * manual-tests/autocorrection/continue-typing-to-dismiss-reversion.html: Ditto.

        * manual-tests/autocorrection/delete-to-dismiss-reversion.html: Ditto.

        * manual-tests/autocorrection/delete-to-end-of-word-to-show-reversion.html: Ditto.

        * manual-tests/autocorrection/dismiss-multiple-guesses.html: Ditto.

        * manual-tests/autocorrection/move-to-end-of-word-to-show-reversion.html: Ditto.

        * manual-tests/autocorrection/select-from-multiple-guesses.html: Ditto.

        * manual-tests/autocorrection/spell-checking-after-reversion.html: Added.

        * manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html: Change manual-tests that
           were broken by relocated WebCore directory.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDocumentMarkers): Code clean-up to be more concise.

2011-02-03  Abhishek Arya  <inferno@chromium.org>

        Unreviewed, qt build fix.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeFloatingObject):

2011-02-03  Brian Salomon  <bsalomon@google.com>

        Reviewed by James Robinson.

        Handle non-raster backed images in getUnmultipliedImageData()
        https://bugs.webkit.org/show_bug.cgi?id=53468

        No new tests. Existing canvas tests sufficient
        LayoutTests/canvas/philip/...

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):

2011-02-03  Abhishek Arya  <inferno@chromium.org>

        Reviewed by James Robinson.

        Enforce more limits on root inline boxes height calculations.
        https://bugs.webkit.org/show_bug.cgi?id=53729

        Test: fast/overflow/overflow-height-float-not-removed-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeFloatingObject): prevent logicalBottom to
        become negative when logicalTop is INT_MAX.
        (WebCore::RenderBlock::markLinesDirtyInBlockRange): when logicalBottom
        is INT_MAX, we should dirty everything. So, we bail out to make
        afterLowest equal to the lastRootBox() or lowestDirstLine.

2011-02-03  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth and Oliver Hunt.

        Worker.importScript() should clean errors for cross origin imports.
        https://bugs.webkit.org/show_bug.cgi?id=52871

        Test: http/tests/workers/worker-importScriptsOnError.html

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate): Use sanitizeScriptError
        to determine when to create a clean exception.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate): Ditto.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::sanitizeScriptError): Figure out
        if the error needs to be cleaned up.
        (WebCore::ScriptExecutionContext::dispatchErrorEvent): Extracted
        sanitizeScriptError for use by other places.
        * dom/ScriptExecutionContext.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts): Use the reponse url when
        telling the evaluate where the script came fro.
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::responseURL): Expose the url that
        the script was loaded from (which may be different from url() due
        to redirects).
        (WebCore::WorkerScriptLoader::didReceiveResponse): Capture the reponse url.
        * workers/WorkerScriptLoader.h:

2011-02-03  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dimitri Glazkov.

        Chromium GYP build fix.

        When various settings were moved to webcore_prerequisites in r66364,
        things that should have been direct_dependent_settings were not marked
        as such. GYP 'defines', for example, make no sense on a 'none'-type
        target such as webcore_prerequisites. It appears that it was intended
        for these settings to be pushed to direct dependents, which would make
        direct_dependent_settings correct.

        Losing the ChromiumWebCoreObjC defines on the Mac, for example, caused
        http://crbug.com/71537, which at best causes Mac console log spew, and
        at worst may result in Chromium's copy of WebCore using system
        definitions of certain Objective-C classes at runtime, or vice-versa.

        The build now includes a postbuild step to prevent
        http://crbug.com/71537 from regressing again. The build will fail upon
        regression.

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

        * WebCore.gyp/WebCore.gyp: Move things in webcore_prerequisites into
          direct_dependent_settings as needed, add the check_objc_rename
          postbuild step.
        * WebCore.gyp/mac/check_objc_rename.sh: Added.

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

        Reviewed by Eric Seidel.

        Make XSSFilter go fast by adding a SuffixTree
        https://bugs.webkit.org/show_bug.cgi?id=53665

        The SuffixTree lets us quickly reject snippets if the POST data is
        large (because we can avoid a linear scan over the POST data).

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::init):
        (WebCore::XSSFilter::isContainedInRequest):
        * html/parser/XSSFilter.h:

2011-02-03  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r77355): Page cache layout tests crash
        https://bugs.webkit.org/show_bug.cgi?id=53648

        Test: fast/events/pagehide-timeout.html
        
        Suspend active DOM objects after all pagehide event handlers have run,
        otherwise it's possible for them to create more objects that weren't
        getting suspended.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):

2011-02-03  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        SerializedScriptValue should not require v8 to create undefined and null values
        https://bugs.webkit.org/show_bug.cgi?id=53730

        Instead of creating a v8 type and passing that into the constructor, just use
        the writer class directly. While I was at it, I cleaned up the code a bit too
        by getting rid of the WireData/StringValue enum as I found that personally
        confusing.

        This is necessary because these methods are called by IndexedDB in the browser
        process where v8 is not spun up.

        No functionality changed and not possible to test.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::createFromWire):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::nullValue):
        (WebCore::SerializedScriptValue::undefinedValue):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/v8/SerializedScriptValue.h:

2011-02-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8944544> Ability to animate track
        for WKPainter scrollers

        Two new WebKitSystemInterface functions.
        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

        Use Scrollbar::convertFromContainingView() to return the right point.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
        
        ScrollKnobAnimation is now ScrollbarPartAnimation. It can
        now be used to animate the knob or the track.
        (-[ScrollbarPartAnimation initWithScrollbarPainter:part:WebCore::scrollAnimator:WebCore::animateAlphaTo:duration:]):
        (-[ScrollbarPartAnimation setCurrentProgress:]):
        (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):

        Scrollbars need invalodating after the overlay state changes. 
        (-[ScrollbarPainterDelegate scrollerImp:overlayScrollerStateChangedTo:]):

2011-02-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Scroll thumb jumps to top when resizing horizontally.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars): Add call to update
        the scrollbar's offset in the case where we may have created
        a new scrollbar but have not changed the current position.

2011-02-03  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dirk Schulze.

        startAnimations should use a local, RefCounted Vector.
        https://bugs.webkit.org/show_bug.cgi?id=53458

        Test: svg/custom/use-animation-in-fill.html

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):

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

        Reviewed by Daniel Bates.

        XSSFilter shouldn't bother to analyze pages without "injection"
        characters in the request
        https://bugs.webkit.org/show_bug.cgi?id=53664

        If the request lacks these "injection" characters, then it's unlikely
        that there's a reflective XSS attack happening.  This hueristic lets us
        avoid analyzing the vast majority of responses for XSS.  Of course, the
        hueristic isn't perfect.  Because of this huerstic, we miss out on
        injections into unquoted attributes.  However, it's a trade-off that's
        worked well in the XSSAuditor.

        * html/parser/XSSFilter.cpp:
        (WebCore::HTMLNames::isRequiredForInjection):
        (WebCore::XSSFilter::XSSFilter):
        (WebCore::XSSFilter::init):
        (WebCore::XSSFilter::filterToken):
        (WebCore::XSSFilter::isContainedInRequest):
        * html/parser/XSSFilter.h:

2011-02-03  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Fixing a compositor crash occurring on layers
        without an associated RenderSurface.
        https://bugs.webkit.org/show_bug.cgi?id=53679
        Regression was introduced by in r77425 

        Test: http://webkit.org/blog/386/3d-transforms/ doesn't crash
        anymore.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayer):

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

        Reviewed by Anders Carlsson.

        <rdar://problem/8948788> Text emphasis marks have wrong orientation for vertical text
        https://bugs.webkit.org/show_bug.cgi?id=53709

        Covered by rendering of fast/text/emphasis-vertical.html

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::scaledFontData): Give the scaled font the same orientation this font
        has.

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

        Reviewed by Ryosuke Niwa.

        Moving cursor down in table cycles at the end of a row
        https://bugs.webkit.org/show_bug.cgi?id=50012

        Avoids a caret cycling issue with certain content (e.g. tables) found at the very
        end of a document due to a bug in nextLeafWithSameEditability.

        Test: editing/selection/move-by-line-cycles-in-table.html

        * editing/visible_units.cpp:
        (WebCore::nextLeafWithSameEditability): Properly avoid descending back into the
        original leaf node.

2011-02-03  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove dead code related to changes panel.
        https://bugs.webkit.org/show_bug.cgi?id=53688

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ChangesView.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (#error-warning-count):
        (#error-warning-count:hover):
        (#error-count + #warning-count):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2011-02-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add notification of the end of a rubber band.
        <rdar://problem/8940648>

        * WebCore.exp.in:
        Add additional exprots.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::didCompleteRubberBandForMainFrame):
        * page/FrameView.cpp:
        (WebCore::FrameView::didCompleteRubberBand):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::didCompleteRubberBand):
        * platform/ScrollView.h:
        Add hook.

        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::inLiveResize):
        (WebCore::ScrollableArea::maximumScrollPosition):
        (WebCore::ScrollableArea::visibleWidth):
        (WebCore::ScrollableArea::overhangAmount):
        (WebCore::ScrollableArea::didCompleteRubberBand):
        Reorganize and de-virtualize live resize notifications.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        Call the new hook when the rubberband ends.

2011-02-02  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] complex joining characters positioned in wrong place
        https://bugs.webkit.org/show_bug.cgi?id=53637

        Provide the correct font metrics to Harfbuzz related to the font design space.
        There are used in some fonts for GPOS positioning.

        Test: platform/chromium-linux/fast/text/international/complex-joining-using-gpos.html

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::setupFontForScriptRun):
        (WebCore::ComplexTextController::allocHarfbuzzFont):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::emSizeInFontUnits):
        (WebCore::FontPlatformData::operator=):
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        (WebCore::FontPlatformData::FontPlatformData):

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

        Reviewed by Kent Tamura.

        REGRESSION(r76147): Slider thumb position is not updated when value attribute is changed.
        https://bugs.webkit.org/show_bug.cgi?id=53634

        Test: fast/dom/HTMLInputElement/input-slider-update.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setValue): Added a call to InputType::valueChanged.
        * html/InputType.cpp:
        (WebCore::InputType::valueChanged): Added empty implementation.
        * html/InputType.h: Added def.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::valueChanged): Added implementation that dirties layout
            bit on the thumb.
        * html/RangeInputType.h: Added def.

2011-02-02  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: do not share source frames between resources panel and scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=53584

        Currently, we show error messages only for resources. This change will allow showing error
        messages in source frame even when resource is not available (eval scripts, inlined scripts).

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage):
        (WebInspector.ConsoleView.prototype.clearMessages):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.recreateResourceView):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._setBubbleText):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
        (WebInspector.ScriptsPanel.prototype.addConsoleMessage):
        (WebInspector.ScriptsPanel.prototype.clearConsoleMessages):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForResource):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScript):

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

        Fix 32-bit builds.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurLayerImage):

2011-02-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Add reporting of JS heap size limit to 'console.memory'.
        https://bugs.webkit.org/show_bug.cgi?id=53592

        In JSC there is no limit, thus 'undefined' value is returned.
        For V8, the limit reported by the VM is returned.

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSMemoryInfoCustom.cpp: Added.
        * bindings/js/ScriptGCEvent.cpp:
        (WebCore::ScriptGCEvent::getHeapSize):
        * bindings/js/ScriptGCEvent.h:
        * bindings/v8/ScriptGCEvent.cpp:
        (WebCore::ScriptGCEvent::getHeapSize):
        * bindings/v8/ScriptGCEvent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
        * page/MemoryInfo.cpp:
        (WebCore::MemoryInfo::MemoryInfo):
        * page/MemoryInfo.h:
        (WebCore::MemoryInfo::jsHeapSizeLimit):
        * page/MemoryInfo.idl:

2011-01-27  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] LayoutTests/media/audio-mpeg4-supported.html fails
        https://bugs.webkit.org/show_bug.cgi?id=53125

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache): Add audio/x-m4a mimetype in the cache.

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

        Reviewed by Sam Weinig.

        ShadowBlur radius for CSS shadows is slightly too big
        https://bugs.webkit.org/show_bug.cgi?id=53660
        
        If we follow SVG gaussian blur for CSS shadows, we can end up rendering
        shadows that extend further than the CSS "blur radius", which results
        in the shadows being truncated.
        
        Fix with a small fudge factor to reduce the kernel diameter slightly
        for CSS shadows.
        
        Also more closely follow the algorithm described in the SVG spec
        for computing the kernel size for different diameters, and clean up
        some variable naming relating to the shadow bounds.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::blurLayerImage):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):

2011-02-01  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: introduce new api for managing JavaScript breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=53235

        Single protocol breakpoint (e.g. set by url) is mapped on zero or more VM breakpoints (set by sourceID).
        removeJavaScriptBreakpoint(breakpointId) removes breakpoint and all linked VM breakpoints.
        Since UI uses VM breakpoint location rather then protocol breakpoint location, all resolved breakpoints locations are passed to frontend.

        SourceFrame is now aware of whether breakpoint is resolved or not and may display it accordingly.
        JavaScriptBreakpointsSidebarPane filters out breakpoints set on nonexistent scripts to avoid UI cluttering.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp: clear breakpoints from inspector state when new frontend is created
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::restoreDebugger):
        (WebCore::InspectorAgent::showAndEnableDebugger):
        (WebCore::InspectorAgent::enableDebugger):
        * inspector/InspectorAgent.h:
        * inspector/InspectorDebuggerAgent.cpp: manage relations between protocol breakpoints and VM breakpoints
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorDebuggerAgent::setJavaScriptBreakpoint):
        (WebCore::InspectorDebuggerAgent::setJavaScriptBreakpointBySourceId):
        (WebCore::InspectorDebuggerAgent::removeJavaScriptBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::Script::Script):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorValue::asNumber):
        (WebCore::InspectorBasicValue::asNumber):
        (WebCore::InspectorObject::remove):
        * inspector/InspectorValues.h:
        (WebCore::InspectorObject::getNumber):
        (WebCore::InspectorObject::find):
        * inspector/ScriptBreakpoint.h:
        (WebCore::ScriptBreakpoint::ScriptBreakpoint):
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.addLocation):
        * inspector/front-end/BreakpointManager.js: remove all stuff related to JavaScript breakpoints from here
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane): filter breakpoints set on nonexistent scripts to avoid ui cluttering
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel): pull all JavaScript from localStorage and push them to fronted when debugger is enabled, save resolved breakpoints data
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.sourceLine):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/SourceFrame.js: handle resolved and unresolved breakpoints differently
        * inspector/front-end/inspector.js:

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

        Reviewed by Dirk Schulze.

        small text which is scaled to be large renders pixelated
        https://bugs.webkit.org/show_bug.cgi?id=12448

        SVG <text> with font-size smaller or equal to 1 does not paint correctly
        https://bugs.webkit.org/show_bug.cgi?id=14242

        misplaced text in SVG
        https://bugs.webkit.org/show_bug.cgi?id=17053

        Don't render very small (but zoomed) text inside SVG
        https://bugs.webkit.org/show_bug.cgi?id=19393

        Tiny fonts scaled up end up too large in Safari
        https://bugs.webkit.org/show_bug.cgi?id=20192

        Stretched SVG Text has awful glyph spacing 
        https://bugs.webkit.org/show_bug.cgi?id=21774

        REGRESSION (r72141?): svg/batik/text/smallFonts.svg failing on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=49846

        [Gtk] Text height in zoomed SVG is 1px too high
        https://bugs.webkit.org/show_bug.cgi?id=50313

        SVG text smaller than 0.5px not displayed properly
        https://bugs.webkit.org/show_bug.cgi?id=50528

        When rendering text, we're selecting a font with a size, as specified in the markup.
        This can lead to problems, if the context, where the text is rendered upon, is scaled. If a parent
        element of the <text> defines a transform=".." or the outermost <svg> containing a viewBox the
        problem becomes apparent.

        Consider following two snippets, which should render exactly the same:
        <svg viewBox="0 0 100 100"><text x="25" y="50" font-size="25">test</text></svg>
        <svg viewBox="0 0 1 1"><text x="0.25" y="0.5" font-size="0.25">test</text></svg>

        When selecting a font size below 0.5, FontCacheMac would request a font with size 0,
        which AppKit turns into 12. This lead to huge text rendering, instead of small text on Mac.
        Other platforms have different problems (Qt simply scales the font, leading to pixelation etc.)

        To fix this in a cross-platform fashion, we now always compute the final font size on screen,
        remove any scaling from the context, draw the text using the scaled font size, then reapply
        the context scale. This makes the example snippets above render exactly the same and fixes
        numerous of bugs, present since years. As we're now heavily using floating-point font sizes
        internally, depending on the scale of the document, it's very important to use the new
        floating-point text metrics information (floatAscent/floatDescent/floatHeight) everywhere in SVG.

        Fixes existing tests: css3/zoom-coords.xhtml (cross-platform inconsistencies should be gone, mac now reports floatHeight values for SVG text height)
                              svg/hixie/text/003.html (no more pixelation)
                              svg/batik/text/smallFonts.svg (small fonts aren't rendered huge anymore on mac)
                              svg/hixie/viewbox/preserveAspectRatio/001.xml (bug 21774, no more awful spacing)
                              svg/zoom/page/zoom-zoom-coords.xhtml (cross-platform inconsistencies should be gone, inspired by bug 50313)

        Tests: svg/text/font-size-below-point-five-2.svg (reduction from bug 50528)
               svg/text/font-size-below-point-five.svg (reduction from bug 50528)
               svg/text/scaled-font.svg (reduction from bug 12448)
               svg/text/small-fonts-2.svg (reduction from bug 14242)
               svg/text/small-fonts-3.svg (reduction from bug 17053)
               svg/text/small-fonts-in-html5.html (reduction from bug 19393)
               svg/text/small-fonts.svg (reduction from bug 20192))

        * rendering/svg/RenderSVGInlineText.cpp: Cache 'float scalingFactor' & 'Font scaledFont', whenever the on-screen representation changes.
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGText.cpp: Update scalingFactor/scaledFont, if necessary.
        * rendering/svg/SVGInlineTextBox.cpp: Switch to new font rendering strategy. Always use scaledFont, and remove any context scale before drawing.
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGTextLayoutEngineBaseline.cpp: Use floating-point metrics everywhere.
        * rendering/svg/SVGTextMetrics.cpp: Ditto.
        * rendering/svg/SVGTextMetrics.h: Ditto.
        * rendering/svg/SVGTextQuery.cpp: Ditto.
        * svg/SVGFont.cpp: Adjust stroke thickness, when drawing SVGFonts into a normalized context (no more scale).
        * svg/SVGTextContentElement.cpp: Make <text> elements always dependant on window size changes in combination with viewBox set.
        * svg/SVGTextPositioningElement.cpp: Remove now unnecessary code to determine wheter relative lengths are used as text attributes.
        * svg/SVGTextPositioningElement.h: 

2011-02-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: resources panel doesn't show frames after reload.
        https://bugs.webkit.org/show_bug.cgi?id=53430

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype.loadEventFired):
        (WebInspector.ResourcesPanel.prototype._initDefaultSelection):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.clear):
        * inspector/front-end/inspector.js:
        (WebInspector.loadEventFired):

2011-02-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Remove the *2 suffix from the CSS style-related protocol methods
        https://bugs.webkit.org/show_bug.cgi?id=53492

        * inspector/Inspector.idl:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStyleForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyles):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::getStyleSheetText):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        * inspector/InspectorCSSAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getStylesAsync):
        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
        (WebInspector.CSSStyleModel.prototype.getInlineStyleAsync):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet.createForId):
        (WebInspector.CSSStyleSheet.prototype.setText):

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

        Reviewed by Daniel Bates.

        Teach XSSFilter about data URLs
        https://bugs.webkit.org/show_bug.cgi?id=53662

        The XSS filter doesn't really make sense for data URLs because
        everything in a "response" from a data URL was part of the request.

        Test: http/tests/security/xssAuditor/data-urls-work.html

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::init):
        (WebCore::XSSFilter::filterToken):

2011-02-02  Chris Evans  <cevans@chromium.org>

        Reviewed by Darin Fisher.

        window.find() can fail when switching case sensitivity
        https://bugs.webkit.org/show_bug.cgi?id=53654

        Reset the pattern to a safe one when done, to avoid usearch_reset()
        indirectly touching the old, stale text pointer.

        Test: fast/text/find-window.html

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::~SearchBuffer): leave a safe pattern buffer when done.

2011-02-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Teach XSSFilter that <param> elements can contain URLs
        https://bugs.webkit.org/show_bug.cgi?id=53652

        When loading plugins for the <object> tag, we're "smart" enough to
        reach into the <param> elements and pull out the URL in some cases.
        This patch teaches the XSSFilter how to block injections into those
        sorts of param elements.

        Fixes:
            http/tests/security/xssAuditor/object-*

        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::isURLParameter):
        (WebCore::HTMLParamElement::isURLAttribute):
        (WebCore::HTMLParamElement::addSubresourceAttributeURLs):
        * html/HTMLParamElement.h:
            - Add a helper function so that HTMLParamElement can share the
              ground truth for these names with the XSSFilter.
        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterTokenInitial):
        (WebCore::XSSFilter::filterParamToken):
        * html/parser/XSSFilter.h:

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

        Reviewed by David Levin.

        GCC compiler on ARM issues bogus warnings and fails to compile.
        https://bugs.webkit.org/show_bug.cgi?id=53620

        Despite warnings explicitly being disallowed (-Wno-uninitialized),
        gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 throws up the warnings like:

        "error: 'colorTransparent.unstatic.4909' may be used uninitialized in this function"

        The fix is to add an extra condition, which somehow pacifies the compiler.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::createColor): Added workaround conditions.

2011-02-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Teach XSSFilter about X-XSS-Protection
        https://bugs.webkit.org/show_bug.cgi?id=53640

        This patch causes us to pass:
            http/tests/security/xssAuditor/full-block-*
            http/tests/security/xssAuditor/no-protection-script-tag.html

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::XSSFilter):
        (WebCore::XSSFilter::init):
        (WebCore::XSSFilter::filterToken):
        * html/parser/XSSFilter.h:

2011-02-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        When XSSFilter blocks JavaScript URLs, use a safe JavaScript URL
        instead of the empty string
        https://bugs.webkit.org/show_bug.cgi?id=53643

        In a URL context, the empty string completes to the URL of the current
        page, which causes these tests to go into an infinite loop.  Instead,
        we should use a "safe" JavaScript URL that does nothing.

        Fixes:
            http/tests/security/xssAuditor/javascript-link*

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::eraseDangerousAttributesIfInjected):

2011-02-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8380506> REGRESSION (r61921): RTL text in <b> tag doesn't display in WebKit under certain conditions
        https://bugs.webkit.org/show_bug.cgi?id=44942

        Test: fast/text/bidi-embedding-pop-and-push-same-2.html

        * platform/text/BidiResolver.h:
        (WebCore::::commitExplicitEmbedding): Changed to return a boolean indicating whether there was
        a change to embedding levels.
        (WebCore::::createBidiRunsForLine): If embedding levels did not change as a result of committing
        the explicit embedding sequence, then runs were not added, and we should continue normally.

2011-02-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix miscalculation of the overhang area used for painting. We were
        not correctly accounting for scrollbars resulting in an non-negative
        overhang even when we weren't over the edge.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::calculateOverhangAreasForPainting):

2011-02-02  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        IDBTransaction and IDBRequest can be deleted while ScriptExecutionContext is iterating....which is bad
        https://bugs.webkit.org/show_bug.cgi?id=52722

        The solution is to change ScriptExecutionContext's destructor to iterate over
        the list in a way that handles the mutations. This new method is destructive,
        but that's OK since the object is going away. I've also added a several asserts.

        There should be no behavior change.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::createdActiveDOMObject):
        (WebCore::ScriptExecutionContext::destroyedActiveDOMObject):
        * dom/ScriptExecutionContext.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::contextDestroyed):
        * storage/IDBTransaction.h:

2011-02-02  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebCore.exp.in: Remove some bogus symbols from the .exp.in file.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::unregisterScrollbar): Look the object
        up in the HashMap rather than relying on a local variable that doesn't
        exist.

2011-02-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Daniel Bates.

        Teach XSSFilter about JavaScript URLs
        https://bugs.webkit.org/show_bug.cgi?id=53635

        This patch teaches the XSSFilter to check for JavaScript URLs in
        attribute values.  If this approach has too many false positives, we
        can restrict which attribute names we examine.

        Fixes these tests:
            http/tests/security/xssAuditor/anchor-url-dom-write-location-javascript-URL.html
            http/tests/security/xssAuditor/dom-write-location-javascript-URL.html
            http/tests/security/xssAuditor/iframe-javascript-url*

        * html/parser/XSSFilter.cpp:
        (WebCore::HTMLNames::containsJavaScriptURL):
        (WebCore::XSSFilter::filterTokenInitial):
        (WebCore::XSSFilter::eraseDangerousAttributesIfInjected):
        * html/parser/XSSFilter.h:

2011-02-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig, even though this is just a...

        ...build fix.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):

2011-02-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/8952012> Crash on launch inside scrollbar code.

        We need to ensure that we remove ourselves as the delegates of objects when we're going
        away as failing to do this can lead to crashes if the lifetime of the other objects
        is longer than ours.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):

2011-02-02  Beth Dakin  <bdakin@apple.com>

        Build fix.

        * WebCore.exp.in:

2011-02-02  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r77397.

        * page/wince/FrameWinCE.cpp:
        (WebCore::computePageRectsForFrame):

2011-02-02  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r77398.

        * platform/graphics/wince/PlatformPathWinCE.cpp:
        (WebCore::containsPoint):
        (WebCore::inflateRectToContainPoint):
        (WebCore::PlatformPath::addRect):
        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::drawPattern):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintMenuListButton):
        (WebCore::RenderThemeWinCE::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWinCE::paintSliderTrack):
        (WebCore::RenderThemeWinCE::paintMediaMuteButton):
        (WebCore::RenderThemeWinCE::paintMediaPlayButton):
        (WebCore::RenderThemeWinCE::paintMediaSeekBackButton):
        (WebCore::RenderThemeWinCE::paintMediaSeekForwardButton):

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

        Reviewed by Kenneth Russell.

        [V8] Accessing DataView with index of -1 returns 0, doesn't throw
        https://bugs.webkit.org/show_bug.cgi?id=53559

        Added test cases to cover this in fast/canvas/webgl/data-view-test.html.

        * html/canvas/DataView.h:
        (WebCore::DataView::beyondRange):

2011-02-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Add ChromeClient function to paint custom overhang areas.
        https://bugs.webkit.org/show_bug.cgi?id=53639

        * page/Chrome.cpp:
        (WebCore::ChromeClient::paintCustomOverhangArea):
        * page/ChromeClient.h:
        Add ChromeClient function.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintOverhangAreas):
        * page/FrameView.h:
        Call out the the ChromeClient, call ScrollView base implementation
        if the ChromeClient returns false.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paintOverhangAreas):
        * platform/ScrollView.h:
        Add dirty rect for use when painting overhang areas.

2011-02-02  Peter Kasting  <pkasting@google.com>

        Not reviewed, build fix.

        Fix compile after r77427.
        https://bugs.webkit.org/show_bug.cgi?id=53455

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageFrame::operator=):
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::decodeBMP):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):

2011-02-02  Peter Kasting  <pkasting@google.com>

        Reviewed by David Levin.

        Clean up ImageDecoder's comments (remove/trim/clarify).
        https://bugs.webkit.org/show_bug.cgi?id=53455

        This also renames or eliminates a couple of functions for clarity, and
        switches a couple erroneous strncmp() calls to memcmp().

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore::ImageFrame::clearPixelData):
        (WebCore::ImageFrame::zeroFillPixelData):
        (WebCore::ImageFrame::setSize):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::originalFrameRect):
        (WebCore::ImageFrame::setOriginalFrameRect):
        (WebCore::ImageDecoder::ImageDecoder):
        (WebCore::ImageDecoder::~ImageDecoder):
        (WebCore::ImageDecoder::isSizeAvailable):
        (WebCore::ImageDecoder::size):
        (WebCore::ImageDecoder::setIgnoreGammaAndColorProfile):
        (WebCore::ImageDecoder::clearFrameBufferCache):
        (WebCore::ImageDecoder::isOverSize):
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::processNonRLEData):
        * platform/image-decoders/cg/ImageDecoderCG.cpp:
        (WebCore::ImageFrame::setSize):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        (WebCore::GIFImageDecoder::frameComplete):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/qt/ImageFrameQt.cpp:
        (WebCore::ImageFrame::operator=):
        (WebCore::ImageFrame::clearPixelData):
        (WebCore::ImageFrame::zeroFillPixelData):
        (WebCore::ImageFrame::setSize):
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::operator=):
        (WebCore::ImageFrame::clearPixelData):
        (WebCore::ImageFrame::zeroFillPixelData):
        (WebCore::ImageFrame::setSize):
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2011-02-02  Vangelis Kokkevis  <vangelis@chromium.org>

        [chromium] Adding support for reflections to the accelerated
        compositing path.
        https://bugs.webkit.org/show_bug.cgi?id=53179

        All layout tests in compositing/reflections generate correct
        results with the exception of:
        1. nested-reflection-anchor-point.html : There appears to be
           some issue with the layer transform math that I haven't been
           able to track down yet.
        2. reflection-opacity.html : The current implementation applies
           opacity before doing the reflection which makes this test
           produce incorrect results.  This will affect reflected layers
           with opacity that overlap their original layer.  FIXME comment
           added in the code.

        Tests: Covered by existing layout tests in compositing/reflections.
               Please see above for exceptions.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setReplicatedByLayer):
        (WebCore::GraphicsLayerChromium::updateAnchorPoint):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setReplicaLayer):
        (WebCore::LayerChromium::replicaLayer):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::drawableContentRect):
        (WebCore::RenderSurfaceChromium::drawSurface):
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::drawTransform):

2011-02-02  Xiyuan Xia  <xiyuan@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Select popup with padding has white strip on right
        https://bugs.webkit.org/show_bug.cgi?id=53602

        No new tests as this change restores old behavior.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::layout):

2011-02-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Mark Rowe.

        Fix for <rdar://problem/8950343> CrashTracer: [USER]
        1 crash in WebProcess at com.apple.WebCore: 
        WebCore::ScrollbarThemeMac::unregisterScrollbar + 22

        It is possible for a Scrollbar's ScrollableArea to be null,
        so we must null check.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):

2011-02-02  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        bufferData and bufferSubData should generate INVALID_VALUE with negative input
        https://bugs.webkit.org/show_bug.cgi?id=53626

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):

2011-02-02  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler and Steve Falkenburg.

        Add DerivedSources.make to some Visual Studio projects
        https://bugs.webkit.org/show_bug.cgi?id=53607

        * WebCore.vcproj/WebCoreGenerated.vcproj: Add DerivedSources.make.

2011-02-02  Cris Neckar  <cdn@chromium.org>

        Reviewed by James Robinson.

        Refcount domwindows when dispatching device orientation events.
        https://bugs.webkit.org/show_bug.cgi?id=53623

        Test: fast/events/device-orientation-crash.html

        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::timerFired):
        (WebCore::DeviceMotionController::didChangeDeviceMotion):
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::timerFired):
        (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
        * dom/DeviceOrientationController.h:

2011-02-02  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        A deleted object should never been bound again
        https://bugs.webkit.org/show_bug.cgi?id=53604

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::checkObjectToBeBound): Helper function to bind* and useProgram.
        (WebCore::WebGLRenderingContext::bindBuffer): Use checkObjectToBeBound.
        (WebCore::WebGLRenderingContext::bindFramebuffer): Ditto.
        (WebCore::WebGLRenderingContext::bindRenderbuffer): Ditto.
        (WebCore::WebGLRenderingContext::bindTexture): Ditto, also check the target matching.
        (WebCore::WebGLRenderingContext::deleteObject): Helper funtion to delete*.
        (WebCore::WebGLRenderingContext::deleteBuffer): Use deleteObject.
        (WebCore::WebGLRenderingContext::deleteFramebuffer): Ditto.
        (WebCore::WebGLRenderingContext::deleteProgram): Ditto.
        (WebCore::WebGLRenderingContext::deleteRenderbuffer): Ditto.
        (WebCore::WebGLRenderingContext::deleteShader): Ditto.
        (WebCore::WebGLRenderingContext::deleteTexture): Ditto.
        (WebCore::WebGLRenderingContext::useProgram): Use checkObjectToBeBound.
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLTexture.h:
        (WebCore::WebGLTexture::getTarget): Accessor to cached target.

2011-02-02  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed Efl buildfix after r77399.

        * CMakeListsEfl.txt:

2011-02-02  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Rename Typed Array subset to subarray
        https://bugs.webkit.org/show_bug.cgi?id=53618

        * html/canvas/Float32Array.cpp:
        (WebCore::Float32Array::subarray):
        * html/canvas/Float32Array.h:
        * html/canvas/Float32Array.idl:
        * html/canvas/Int16Array.cpp:
        (WebCore::Int16Array::subarray):
        * html/canvas/Int16Array.h:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.cpp:
        (WebCore::Int32Array::subarray):
        * html/canvas/Int32Array.h:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.cpp:
        (WebCore::Int8Array::subarray):
        * html/canvas/Int8Array.h:
        * html/canvas/Int8Array.idl:
        * html/canvas/TypedArrayBase.h:
        (WebCore::TypedArrayBase::subarrayImpl):
        * html/canvas/Uint16Array.cpp:
        (WebCore::Uint16Array::subarray):
        * html/canvas/Uint16Array.h:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.cpp:
        (WebCore::Uint32Array::subarray):
        * html/canvas/Uint32Array.h:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.cpp:
        (WebCore::Uint8Array::subarray):
        * html/canvas/Uint8Array.h:
        * html/canvas/Uint8Array.idl:

2011-02-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add an empty file for Content Security Policy
        https://bugs.webkit.org/show_bug.cgi?id=53573

        Posting this as a separate patch because editing the build files is so
        painful.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

2011-02-02  Dan Winship  <danw@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] remove old data: URI handler, fix the SoupRequest-based one
        to pass tests
        https://bugs.webkit.org/show_bug.cgi?id=50885

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback): Do content-type sniffing here for
        non-HTTP requests.
        (WebCore::startHTTPRequest): Rename to match WebKit style.
        (WebCore::ResourceHandle::start): Pass everything except HTTP to
        startNonHTTPRequest, letting the SoupRequester decide whether it's
        supported or not.
        (WebCore::startNonHTTPRequest): Remove some old pre-SoupRequester
        code that was a no-op for file: URIs, but would break some data:
        URIs.

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

        Update even more references to right() and bottom() in Chromium. Sheesh.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::getFramebufferPixels): Replaced bottom/right with maxY/maxX.

2011-02-02  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed Gtk3 buildfix after r77286.

        https://bugs.webkit.org/show_bug.cgi?id=53520
        Remove the physical terminology from IntRect and FloatRect.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::paintMenuList):

2011-02-02  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::pinnedInDirection):

2011-02-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Floats should not use physical terminology for their rects. Replace left/top with x/y and right/bottom
        with maxX/maxY.  This matches IntRect.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::flipFloatForWritingMode):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::adjustForBorderFit):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObject::x):
        (WebCore::RenderBlock::FloatingObject::maxX):
        (WebCore::RenderBlock::FloatingObject::y):
        (WebCore::RenderBlock::FloatingObject::maxY):
        (WebCore::RenderBlock::FloatingObject::setX):
        (WebCore::RenderBlock::FloatingObject::setY):
        (WebCore::RenderBlock::logicalTopForFloat):
        (WebCore::RenderBlock::logicalBottomForFloat):
        (WebCore::RenderBlock::logicalLeftForFloat):
        (WebCore::RenderBlock::logicalRightForFloat):
        (WebCore::RenderBlock::setLogicalTopForFloat):
        (WebCore::RenderBlock::setLogicalLeftForFloat):
        (WebCore::RenderBlock::xPositionForFloatIncludingMargin):
        (WebCore::RenderBlock::yPositionForFloatIncludingMargin):

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

        Update more references to right() and bottom() in Chromium Win.

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeOpaqueComposite): Replaced bottom/right with maxY/maxX.
        (WebCore::TransparencyWin::compositeTextComposite): Ditto.
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintMenuList): Ditto.

2011-02-02  Adam Roben  <aroben@apple.com>

        Encode/decode FormData and FormDataElement objects consistently

        Fixes <http://webkit.org/b/53615> <rdar://problem/8943346> WebKit2: Restoring session state
        that contains form data fails (asserts in Debug build)

        To prevent this from interfering with WebKit2 testing, it's useful to get this into a build
        now, even though we don't have an automated test for it yet. Writing a test is covered by
        <http://webkit.org/b/53616>.

        Reviewed by Darin Adler.

        * history/HistoryItem.cpp: Bump the encoding version, since this patch changes how we encode
        FormData objects.

        * platform/network/FormData.cpp:
        (WebCore::decode): Decode the type from the Decoder, rather than getting it from the
        default-constructed FormDataElement. Failing to do this meant that all future uses of the
        Decoder would be reading from an unexpected part of the buffer (i.e., the next decode would
        start by reading the uint32_t that we forgot to decode here, and so on). We already had code
        to correctly set the FormDataElement's type based on this decoded type later in the
        function.
        (WebCore::FormData::encodeForBackForward): Encode m_identifier as an int64_t, since that
        matches its type and how we decode it.

2011-02-02  Dan Winship  <danw@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] drop soup cache stuff, which has been moved to libsoup
        https://bugs.webkit.org/show_bug.cgi?id=50747

        Use libsoup-based cache/requester API and remove the WebCore version
        of this functionality. This has been pushed upstream fully.

        No new tests because this should not change functionality.

        * GNUmakefile.am: Update for removed files.
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): Update
        type names, drop m_requester.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ensureSessionIsInitialized): Add a SoupRequester to the
        session.
        (WebCore::parseDataUrl):
        (WebCore::startHttp): Get the requester from the session rather
        than using m_requester.
        (WebCore::sendRequestCallback):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::readCallback):
        (WebCore::startGio): Update type names.
        * platform/network/soup/cache/soup-directory-input-stream.c: Removed.
        * platform/network/soup/cache/soup-directory-input-stream.h: Removed.
        * platform/network/soup/cache/soup-http-input-stream.c: Removed.
        * platform/network/soup/cache/soup-http-input-stream.h: Removed.
        * platform/network/soup/cache/soup-request-data.c: Removed.
        * platform/network/soup/cache/soup-request-data.h: Removed.
        * platform/network/soup/cache/soup-request-file.c: Removed.
        * platform/network/soup/cache/soup-request-file.h: Removed.
        * platform/network/soup/cache/soup-request-http.c: Removed.
        * platform/network/soup/cache/soup-request-http.h: Removed.
        * platform/network/soup/cache/soup-request.c: Removed.
        * platform/network/soup/cache/soup-request.h: Removed.
        * platform/network/soup/cache/soup-requester.c: Removed.
        * platform/network/soup/cache/soup-requester.h: Removed.
        * platform/network/soup/cache/webkit/soup-cache-private.h: Removed.
        * platform/network/soup/cache/webkit/soup-cache.c: Removed.
        * platform/network/soup/cache/webkit/soup-cache.h: Removed.

2011-02-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

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

        Remove physical accessors from IntRect and FloatRect.

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustPageHeightDeprecated):
        * platform/graphics/FloatRect.h:
        * platform/graphics/IntRect.h:

2011-02-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Remove physical terminology from overflow.  Replace with minX/maxX/minY/maxY.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::minYLayoutOverflow):
        (WebCore::InlineFlowBox::maxYLayoutOverflow):
        (WebCore::InlineFlowBox::minXLayoutOverflow):
        (WebCore::InlineFlowBox::maxXLayoutOverflow):
        (WebCore::InlineFlowBox::logicalLeftLayoutOverflow):
        (WebCore::InlineFlowBox::logicalRightLayoutOverflow):
        (WebCore::InlineFlowBox::logicalTopLayoutOverflow):
        (WebCore::InlineFlowBox::logicalBottomLayoutOverflow):
        (WebCore::InlineFlowBox::minYVisualOverflow):
        (WebCore::InlineFlowBox::maxYVisualOverflow):
        (WebCore::InlineFlowBox::minXVisualOverflow):
        (WebCore::InlineFlowBox::maxXVisualOverflow):
        (WebCore::InlineFlowBox::logicalLeftVisualOverflow):
        (WebCore::InlineFlowBox::logicalRightVisualOverflow):
        (WebCore::InlineFlowBox::logicalminYVisualOverflow):
        (WebCore::InlineFlowBox::logicalmaxYVisualOverflow):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::beforeSideVisualOverflowForLine):
        (WebCore::RenderBlock::afterSideVisualOverflowForLine):
        (WebCore::RenderBlock::beforeSideLayoutOverflowForLine):
        (WebCore::RenderBlock::afterSideLayoutOverflowForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::minYLayoutOverflow):
        (WebCore::RenderBox::maxYLayoutOverflow):
        (WebCore::RenderBox::minXLayoutOverflow):
        (WebCore::RenderBox::maxXLayoutOverflow):
        (WebCore::RenderBox::logicalLeftLayoutOverflow):
        (WebCore::RenderBox::logicalRightLayoutOverflow):
        (WebCore::RenderBox::minYVisualOverflow):
        (WebCore::RenderBox::maxYVisualOverflow):
        (WebCore::RenderBox::minXVisualOverflow):
        (WebCore::RenderBox::maxXVisualOverflow):
        (WebCore::RenderBox::logicalLeftVisualOverflow):
        (WebCore::RenderBox::logicalRightVisualOverflow):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::anyLineIntersectsRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition):
        * rendering/RenderOverflow.h:
        (WebCore::RenderOverflow::RenderOverflow):
        (WebCore::RenderOverflow::minYLayoutOverflow):
        (WebCore::RenderOverflow::maxYLayoutOverflow):
        (WebCore::RenderOverflow::minXLayoutOverflow):
        (WebCore::RenderOverflow::maxXLayoutOverflow):
        (WebCore::RenderOverflow::minYVisualOverflow):
        (WebCore::RenderOverflow::maxYVisualOverflow):
        (WebCore::RenderOverflow::minXVisualOverflow):
        (WebCore::RenderOverflow::maxXVisualOverflow):
        (WebCore::RenderOverflow::setminYVisualOverflow):
        (WebCore::RenderOverflow::visualOverflowRect):
        (WebCore::RenderOverflow::move):
        (WebCore::RenderOverflow::addVisualOverflow):
        (WebCore::RenderOverflow::setVisualOverflow):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::docTop):

2011-02-02  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        Implement basic media statistics on media elements.
        https://bugs.webkit.org/show_bug.cgi?id=53322

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * features.pri:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitAudioBytesDecoded):
        (WebCore::HTMLMediaElement::webkitVideoBytesDecoded):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitDecodedFrames):
        (WebCore::HTMLVideoElement::webkitDroppedFrames):
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::decodedFrames):
        (WebCore::MediaPlayer::droppedFrames):
        (WebCore::MediaPlayer::audioBytesDecoded):
        (WebCore::MediaPlayer::videoBytesDecoded):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::decodedFrames):
        (WebCore::MediaPlayerPrivateInterface::droppedFrames):
        (WebCore::MediaPlayerPrivateInterface::audioBytesDecoded):
        (WebCore::MediaPlayerPrivateInterface::videoBytesDecoded):

2011-02-02  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by David Hyatt.

        More conversion from right()/bottom() to maxX()/maxY().

        * page/qt/FrameQt.cpp:
        (WebCore::Frame::dragImageForSelection):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::roundToDevicePixels):

2011-02-02  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes for wxWebKit.

        * bindings/cpp/WebDOMHTMLDocumentCustom.cpp:
        (documentWrite):
        * bindings/scripts/CodeGeneratorCPP.pm:
        * page/wx/DragControllerWx.cpp:
        (WebCore::DragController::dragOperation):
        * platform/graphics/wx/FontCustomPlatformData.h:
        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::widthVariant):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::computeHash):
        * platform/graphics/wx/FontWx.cpp:
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * platform/wx/RenderThemeWx.cpp:

2011-02-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        More right()/bottom() to maxX()/maxY() conversion.

        * page/chromium/FrameChromium.cpp:
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):

2011-02-02  Sam Weinig  <sam@webkit.org>

        Fix windows clean build.

        * DerivedSources.make:

2011-02-02  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Landing detailed heap snapshots, part 2.

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

        Display progress while taking a snapshot, and hints while loading
        and parsing. This is needed because taking detailed heap snapshots
        takes time.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DetailedHeapshotView.js:
        (WebInspector.DetailedHeapshotProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype._addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.getProfiles):
        (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot.doParse):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype.takeHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        * inspector/front-end/SidebarTreeElement.js:
        (WebInspector.SidebarTreeElement.prototype.refreshTitles):

2011-02-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        More conversion from right()/bottom() to maxX()/maxY().

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::PopupMenuWin::paint):

2011-02-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Removal of right()/bottom().  Replace with maxX() and maxY().  Still converting.  Haven't removed yet.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::layoutAndCalculateWidgetRect):
        (WebCore::PopupListBox::scrollToRevealRow):
        (WebCore::PopupListBox::layout):
        * platform/graphics/FloatRect.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::drawTexturedRect):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::verticalScrollbarRect):
        (WebCore::LayerRendererChromium::horizontalScrollbarRect):
        (WebCore::LayerRendererChromium::setScissorToRect):
        (WebCore::LayerRendererChromium::setDrawViewportRect):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::growLayerToContain):
        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::TilingData::tileBoundsWithBorder):
        (WebCore::TilingData::overlappedTileIndices):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):
        * platform/graphics/skia/FloatRectSkia.cpp:
        (WebCore::FloatRect::operator SkRect):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):
        * platform/graphics/skia/IntRectSkia.cpp:
        (WebCore::IntRect::operator SkIRect):
        (WebCore::IntRect::operator SkRect):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::beginLayerClippedToImage):
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::clip):
        * platform/graphics/win/IntRectWin.cpp:
        (WebCore::IntRect::operator RECT):
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::roundRect):
        (WebCore::mapRect):
        (WebCore::TransparentLayerDC::TransparentLayerDC):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::strokeRect):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::PopupMenuWin::paint):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::invalidateRect):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintMenuListButton):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintInnerSpinButton):
        (WebCore::RenderThemeWin::paintMenuListButton):

2011-02-02  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej Stachowiak.

        Use Vector instead of a linked list for rules in CSSStyleSelector
        https://bugs.webkit.org/show_bug.cgi?id=53581
        
        - eliminate CSSRuleDataList, replace with Vector<RuleData>
        - rename CSSRuleData -> RuleData and CSSRuleSet -> RuleSet 
          (these are selector internal classes, CSS prefix is better reserved for public ones).
        - constify a bit
        - shrink the vectors to fit after collecting the rules

        * css/CSSStyleSelector.cpp:
        (WebCore::RuleData::RuleData):
        (WebCore::RuleData::position):
        (WebCore::RuleData::rule):
        (WebCore::RuleData::selector):
        (WebCore::RuleSet::disableAutoShrinkToFit):
        (WebCore::RuleSet::getIDRules):
        (WebCore::RuleSet::getClassRules):
        (WebCore::RuleSet::getTagRules):
        (WebCore::RuleSet::getPseudoRules):
        (WebCore::RuleSet::getUniversalRules):
        (WebCore::RuleSet::getPageRules):
        (WebCore::collectSiblingRulesInDefaultStyle):
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::loadFullDefaultStyle):
        (WebCore::loadSimpleDefaultStyle):
        (WebCore::loadViewSourceStyle):
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::operator >):
        (WebCore::operator <=):
        (WebCore::CSSStyleSelector::sortMatchedRules):
        (WebCore::CSSStyleSelector::matchUARules):
        (WebCore::RuleSet::RuleSet):
        (WebCore::RuleSet::~RuleSet):
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::RuleSet::addRule):
        (WebCore::RuleSet::addPageRule):
        (WebCore::RuleSet::addRulesFromSheet):
        (WebCore::RuleSet::addStyleRule):
        (WebCore::collectIdsAndSiblingRulesFromList):
        (WebCore::RuleSet::collectIdsAndSiblingRules):
        (WebCore::shrinkMapVectorsToFit):
        (WebCore::RuleSet::shrinkToFit):
        (WebCore::CSSStyleSelector::matchPageRules):
        (WebCore::CSSStyleSelector::matchPageRulesForList):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::addMatchedRule):

2011-02-02  Andrey Adaikin  <aandrey@google.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Use DIVs instead of TABLE in TextViewer
        https://bugs.webkit.org/show_bug.cgi?id=53299

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype._mouseDown):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype.set mimeType):
        (WebInspector.TextViewer.prototype.revealLine):
        (WebInspector.TextViewer.prototype.addDecoration):
        (WebInspector.TextViewer.prototype.removeDecoration):
        (WebInspector.TextViewer.prototype.markAndRevealRange):
        (WebInspector.TextViewer.prototype.highlightLine):
        (WebInspector.TextViewer.prototype.clearLineHighlight):
        (WebInspector.TextViewer.prototype.freeCachedElements):
        (WebInspector.TextViewer.prototype._handleKeyDown):
        (WebInspector.TextViewer.prototype.editLine.finishEditing):
        (WebInspector.TextViewer.prototype.editLine):
        (WebInspector.TextViewer.prototype.beginUpdates):
        (WebInspector.TextViewer.prototype.endUpdates):
        (WebInspector.TextViewer.prototype.resize):
        (WebInspector.TextViewer.prototype._textChanged):
        (WebInspector.TextViewer.prototype._updatePanelOffsets):
        (WebInspector.TextViewer.prototype._syncScroll):
        (WebInspector.TextViewer.prototype._syncDecorationsForLine):
        (WebInspector.TextEditorChunkedPanel):
        (WebInspector.TextEditorChunkedPanel.prototype.set syncScrollListener):
        (WebInspector.TextEditorChunkedPanel.prototype.get textModel):
        (WebInspector.TextEditorChunkedPanel.prototype.addDecoration):
        (WebInspector.TextEditorChunkedPanel.prototype.removeDecoration):
        (WebInspector.TextEditorChunkedPanel.prototype.revealLine):
        (WebInspector.TextEditorChunkedPanel.prototype.makeLineAChunk):
        (WebInspector.TextEditorChunkedPanel.prototype.textChanged):
        (WebInspector.TextEditorChunkedPanel.prototype.beginUpdates):
        (WebInspector.TextEditorChunkedPanel.prototype.endUpdates):
        (WebInspector.TextEditorChunkedPanel.prototype.resize):
        (WebInspector.TextEditorChunkedPanel.prototype._scroll):
        (WebInspector.TextEditorChunkedPanel.prototype._scheduleRepaintAll):
        (WebInspector.TextEditorChunkedPanel.prototype._buildChunks):
        (WebInspector.TextEditorChunkedPanel.prototype._repaintAll):
        (WebInspector.TextEditorChunkedPanel.prototype._chunkNumberForLine):
        (WebInspector.TextEditorChunkedPanel.prototype._chunkForLine):
        (WebInspector.TextEditorGutterPanel):
        (WebInspector.TextEditorGutterPanel.prototype.freeCachedElements):
        (WebInspector.TextEditorGutterPanel.prototype._createNewChunk):
        (WebInspector.TextEditorGutterPanel.prototype._expandChunks):
        (WebInspector.TextEditorGutterChunk):
        (WebInspector.TextEditorGutterChunk.prototype.get expanded):
        (WebInspector.TextEditorGutterChunk.prototype.set expanded):
        (WebInspector.TextEditorGutterChunk.prototype.get height):
        (WebInspector.TextEditorGutterChunk.prototype._createRow):
        (WebInspector.TextEditorMainPanel):
        (WebInspector.TextEditorMainPanel.prototype.set syncDecorationsForLine):
        (WebInspector.TextEditorMainPanel.prototype.set mimeType):
        (WebInspector.TextEditorMainPanel.prototype.markAndRevealRange):
        (WebInspector.TextEditorMainPanel.prototype.highlightLine):
        (WebInspector.TextEditorMainPanel.prototype.clearLineHighlight):
        (WebInspector.TextEditorMainPanel.prototype.freeCachedElements):
        (WebInspector.TextEditorMainPanel.prototype._buildChunks):
        (WebInspector.TextEditorMainPanel.prototype._createNewChunk):
        (WebInspector.TextEditorMainPanel.prototype._expandChunks):
        (WebInspector.TextEditorMainPanel.prototype._highlightDataReady):
        (WebInspector.TextEditorMainPanel.prototype._paintLines):
        (WebInspector.TextEditorMainPanel.prototype._paintLine):
        (WebInspector.TextEditorMainPanel.prototype._releaseLinesHighlight):
        (WebInspector.TextEditorMainPanel.prototype._getSelection):
        (WebInspector.TextEditorMainPanel.prototype._restoreSelection):
        (WebInspector.TextEditorMainPanel.prototype._selectionToPosition):
        (WebInspector.TextEditorMainPanel.prototype._positionToSelection):
        (WebInspector.TextEditorMainPanel.prototype._appendTextNode):
        (WebInspector.TextEditorMainPanel.prototype._handleDomUpdates):
        (WebInspector.TextEditorMainChunk):
        (WebInspector.TextEditorMainChunk.prototype.addDecoration):
        (WebInspector.TextEditorMainChunk.prototype.set expanded):
        (WebInspector.TextEditorMainChunk.prototype.get height):
        (WebInspector.TextEditorMainChunk.prototype.getExpandedLineRow):
        (WebInspector.TextEditorMainChunk.prototype._createRow):
        (WebInspector):
        * inspector/front-end/textViewer.css:
        (.text-editor-lines):
        (.text-editor-contents):
        (.text-editor-editable):
        (.webkit-line-decorations):
        (.webkit-line-number):
        (.webkit-execution-line.webkit-line-content):
        (.diff-container .webkit-added-line.webkit-line-content):
        (.diff-container .webkit-removed-line.webkit-line-content):
        (.diff-container .webkit-changed-line.webkit-line-content):
        (.webkit-highlighted-line.webkit-line-content):

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

        Reviewed by Jeremy Orlow.

        IndexedDB: Implement support for cursor updates
        https://bugs.webkit.org/show_bug.cgi?id=53421

        Implement support for cursor updates using the same pattern as cursor
        deletes: forward the calls to the IDBObjectStoreBackend::put().
        The put() function's signature needs to be changed to allow for a
        "cursor update mode". This makes the signature more clear anyway,
        since it replaces the boolean parameter.

        Test: storage/indexeddb/cursor-update.html

        * storage/IDBCursor.idl:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::key):
        (WebCore::IDBCursorBackendImpl::update):
        * storage/IDBCursorBackendImpl.h:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBObjectStoreBackendInterface.h:

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

        Reviewed by Kent Tamura.

        Fix popup menu RTL bug introduced by Changeset 75982.
        https://bugs.webkit.org/show_bug.cgi?id=53567

        PopupMenuChromium::layout() calculates X position according to RTL or not. So Change the X position calculation in layoutAndCalculateWidgetRect().

        No new tests. However we can check manually with select_dropdown_box_alignment.html, autofill_alignment.html, select_alignment.html, select_dropdown_box_alignment.html, autofill-popup-width-and-item-direction.html

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::layoutAndCalculateWidgetRect): Fix calculation of x position, because layout() considers RTL. And change the parameter from both X and Y positions to only Y position.
        (WebCore::PopupContainer::showPopup): Change the passing parameter.
        (WebCore::PopupContainer::refresh): Change the passing parameter.
        * platform/chromium/PopupMenuChromium.h: Change the parameter declaration.

2011-02-02  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix dist compilation
        https://bugs.webkit.org/show_bug.cgi?id=53579

        * GNUmakefile.am: Added FontWidthVariant.h to the sources, it was
        added in r77153.

2011-02-02  Dai Mikurube  <dmikurube@google.com>

        Reviewed by David Levin.

        Make mime type lookup in File::create(path) thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=47700

        This patch introduces a new function MIMETypeRegistry::getMIMETypeForExtensionThreadSafe().
        The function is to be called as a thread-safe version of getMIMETypeForExtension() when
        both FILE_SYSTEM and WORKERS are enabled.

        No tests for this patch. This patch itself doesn't change the behaviors.
        For Chromium, it runs in the same way with getMIMETypeForExtensionThreadSafe().
        For the other platforms, it causes compilation error in case of enabled FILE_SYSTEM and WORKERS.
        The compilation error would be a signal to implement getMIMETypeForExtensionThreadSafe() in these
        platforms. Currently it doesn't happen since FILE_SYSTEM is not available in the other platforms.

        * platform/MIMETypeRegistry.cpp: Defined generic getMIMETypeForExtension() calling getMIMETypeForExtensionThreadSafe() for enabled FILE_SYSTEM and WORKERS.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/MIMETypeRegistry.h: Declared getMIMETypeForExtensionThreadSafe() which should be implemented for each platform.
        * platform/android/TemporaryLinkStubs.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/brew/MIMETypeRegistryBrew.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/chromium/MIMETypeRegistryChromium.cpp: Defined getMIMETypeForExtensionThreadSafe() for the case when FILE_SYSTEM and WORKERS are enabled.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtensionThreadSafe):
        * platform/efl/MIMETypeRegistryEfl.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/gtk/MIMETypeRegistryGtk.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/haiku/MIMETypeRegistryHaiku.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/mac/MIMETypeRegistryMac.mm:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/wince/MIMETypeRegistryWinCE.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        * platform/wx/MimeTypeRegistryWx.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):

2011-02-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Improve readability of updateWidget by converting bool parameter to an enum
        https://bugs.webkit.org/show_bug.cgi?id=53576

        As requested on webkit-dev.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLEmbedElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateWidget):
        * html/HTMLMediaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetIfNecessary):
        * html/HTMLPlugInImageElement.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateWidget):

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

        Reviewed by Adam Barth.

        [v8] Increase V8 native->js recursion limit to match document.write() recursion limit
        https://bugs.webkit.org/show_bug.cgi?id=53566

        A recursion limit of 22 is necessary to pass fast/dom/Document/document-write-recursion.html.
        Other than being large enough for this one test case, this limit is arbitrary.

        * bindings/v8/V8Proxy.h:

2011-02-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Andreas Kling.

        Remove useless comment
        https://bugs.webkit.org/show_bug.cgi?id=53549

        The reason for this parameter is captured in
        plugins/netscape-plugin-setwindow-size.html, which is a better place to
        capture it than in this comment (which otherwise just re-iterates the
        name of the parameter).

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetIfNecessary):

2011-02-01  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Gentilcore.

        [WebTiming] Remove asserts that verify timestamp order
        https://bugs.webkit.org/show_bug.cgi?id=53548

        Covered by existing tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Remove assert.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchTimedEvent): Ditto.

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

        Add the 'default_targets' enclosure to the flags.

        * WebCore.gyp/WebCore.gyp: Did it.

2011-02-01  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by James Robinson.

        Async event handlers should not fire within a modal dialog
        https://bugs.webkit.org/show_bug.cgi?id=53202

        Asychronous events that use EventQueue would currently fire while a
        modal dialog (e.g. window.alert()) was up. Change EventQueue to use a
        SuspendableTimer (which automatically gets suspended while dialogs are
        up and in other cases where JS execution is not allowed).
        
        Test: fast/events/scroll-event-during-modal-dialog.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/EventQueue.cpp:
        (WebCore::EventQueueTimer::EventQueueTimer):
        (WebCore::EventQueueTimer::fired):
        (WebCore::EventQueue::EventQueue):
        (WebCore::EventQueue::enqueueEvent):
        (WebCore::EventQueue::pendingEventTimerFired):
        * dom/EventQueue.h:
        (WebCore::EventQueue::create):
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::SuspendableTimer):
        (WebCore::SuspendableTimer::suspend):
        (WebCore::SuspendableTimer::resume):
        * page/SuspendableTimer.h:

2011-02-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Change wrong PLATFORM(WIN) to USE(WININET)
        https://bugs.webkit.org/show_bug.cgi?id=53547

        * platform/network/ResourceHandle.h:

2011-02-01  Beth Dakin  <bdakin@apple.com>

        32-bit build fix.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterControllerDelegate contentAreaRectForScrollerImpPair:]):

2011-01-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Two tests crash after r76555
        https://bugs.webkit.org/show_bug.cgi?id=53057

        Instead of creating synchronous ResourceHandles manually, use the ::create factory.
        This ensures that ::start() is not called when there is a scheduled failure and also
        reduces code duplication.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously): Use the ::create factory method.

2011-02-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] GObject DOM bindings do no support the CallWith attribute
        https://bugs.webkit.org/show_bug.cgi?id=53331

        Disable building GObject DOM bindings for IndexedDB because we do not support
        the CallWith attribute at this time.

        * bindings/gobject/GNUmakefile.am: Disable building bindings for the IndexedDB API.

2011-02-01  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson.

        Fix a couple loose ends from the back/forward tree encode/decode work
        https://bugs.webkit.org/show_bug.cgi?id=53537

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTreeNode): Remove extra copy of
        original URL string; no need to encode it twice.
        (WebCore::HistoryItem::decodeBackForwardTree): Ditto.
        * history/HistoryItem.h: Removed declaration for function that is no
        longer defined nor used.

2011-02-01  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] disable arm uninitialized variable warnings
        https://bugs.webkit.org/show_bug.cgi?id=53553

        We just got another error:
        third_party/WebKit/Source/WebCore/css/CSSPrimitiveValue.cpp:123:error:
        'colorTransparent.unstatic.4879' may be used uninitialized in this
        function

        * WebCore.gyp/WebCore.gyp:

2011-02-01  chris reiss  <christopher.reiss@nokia.com>

        Reviewed by Adam Barth.

        Self-replicating code makes Safari hang and eventually crash
        https://bugs.webkit.org/show_bug.cgi?id=15123

       
        Here we are replicating the Firefox safeguard against
        recursive document.write( ) 's.

        See  https://bug197052.bugzilla.mozilla.org/attachment.cgi?id=293907 in bug 
        https://bugzilla.mozilla.org/show_bug.cgi?id=197052 .   Firefox does two things - 
            a) imposes a recursion limit of 20 on document.write( ) and
            b) once that limit is passed, panics all the way the call stack (rather than just returning one level.)
        To see why this is necessary, consider the script : 

        <script>
           var t = document.body.innerHTML;
           document.write(t);
        </script> 

        This will create a tree both broad and deep as the script keeps appending itself to the text.   If
        we just return one level after the recursion limit is reached, we still allow millions of copies to 
        duplicate (and execute).   

        The recursion is fortunately depth-first, so as soon as we cross this limit, we panic up the callstack
        to prevent this situation.    (IE apparently does the same thing, with a lower recursion limit.) 

        Test: fast/dom/Document/document-write-recursion.html        
        Test: fast/dom/Document/document-close-iframe-load.html
        Test: fast/dom/Document/document-close-nested-iframe-load.html


        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::write):
        * dom/Document.h:

2011-02-01  Johnny Ding  <jnd@chromium.org>

        Reviewed by Darin Adler.

        Don't set user gesture in HTMLAnchorElement's click handler because the click handler can be triggered by untrusted event.
        https://bugs.webkit.org/show_bug.cgi?id=53424

        Test: fast/events/popup-blocked-from-untrusted-click-event-on-anchor.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::handleLinkClick):

2011-02-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Qt buildfix after r77286.

        https://bugs.webkit.org/show_bug.cgi?id=53520 
        Remove the physical terminology from IntRect and FloatRect.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTiles):

2011-02-01  Sam Weinig  <sam@webkit.org>

        Fix Mac production builds.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollbarThemeMac.h:

2011-02-01  Darin Adler  <darin@apple.com>

        Reviewed by Chris Fleizach.

        REGRESSION: Removing focus from area element causes unwanted scrolling
        https://bugs.webkit.org/show_bug.cgi?id=50169

        Test: fast/images/imagemap-scroll.html

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::setFocus): Added override. Calls the new
        RenderImage::areaElementFocusChanged function.
        (WebCore::HTMLAreaElement::updateFocusAppearance): Removed the code
        here that calls setNeedsLayout on the image's renderer. This was an
        attempt to cause repaint of the renderer, but this function does not
        need to do that. Also changed this to use the imageElement function
        to avoid repeating code.

        * html/HTMLAreaElement.h: Updated for above changes.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint): Updated for name change.
        (WebCore::RenderImage::paintAreaElementFocusRing): Renamed this from
        paintFocusRing, because it only paints area focus rings, and should
        not be confused with paintFocusRing functions in other classes. Also
        removed the unused style argument. Removed the code that used an
        HTMLCollection to see if the focused area element is for this image
        and instead just call imageElement on the area element.
        (WebCore::RenderImage::areaElementFocusChanged): Added. Calls repaint.

        * rendering/RenderImage.h: Added a public areaElementFocusChanged
        function for HTMLAreaElement to call. Made the paintFocusRing function
        private, renamed it to paintAreaElementFocusRing, and removed its
        unused style argument.

2011-02-01  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r77286.

        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::TransparentLayerDC::TransparentLayerDC):

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

        Reviewed by Darin Adler.

        AX: AXPosition of AXScrollArea is wrong
        https://bugs.webkit.org/show_bug.cgi?id=53511

        AccessibilityScrollView needed to return a valid documentFrameView() object.
        At the same time, the code from document() should be consolidated in 
        AccessibilityObject, so all objects can use it.

        Test: platform/mac/accessibility/webkit-scrollarea-position.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::document):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::accessibilityHitTest):
        (WebCore::AccessibilityScrollView::documentFrameView):
        * accessibility/AccessibilityScrollView.h:

2011-02-01  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        getUniform should support SAMPLER_2D or SAMPLER_CUBE
        https://bugs.webkit.org/show_bug.cgi?id=52190

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniform):

2011-02-01  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Adler.

        Fix the incorrect usage of RetainPtr cases in GraphicsContext3DCG.cpp
        https://bugs.webkit.org/show_bug.cgi?id=53531

        With this fix, running WebGL conformance tests should no longer crash randomly.

        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):

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

        One more Chromium build fix after r77286.

        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::paint): Changed to not use topLeft().

2011-02-01  Sam Weinig  <sam@webkit.org>

        Fix the build for Beth.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollbarPainterControllerDelegate inLiveResizeForScrollerImpPair:]):

2011-02-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Part 2 for <rdar://problem/8492788>
        Adopt WKScrollbarPainterController

        Use header detection to define scrollbar painting controller #define.

        * WebCore.exp.in:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-02-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=53520
        
        Remove the physical terminology from IntRect and FloatRect.
        
        Now that we have flipped RenderBlocks for vertical-rl and horizontal-bt writing modes,
        we need to update our terminology to be more accurate.

        I'm borrowing a page from AppKit here (which also supports flipped NSViews) and
        renaming right() and bottom() to maxX() and maxY().  These terms remain accurate
        even for flipped rectangles.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper position]):
        * dom/ClientRect.h:
        (WebCore::ClientRect::right):
        (WebCore::ClientRect::bottom):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::convertLogicalToDevice):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeRect):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::drawElementTitle):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::adjustWindowRect):
        * page/DragController.cpp:
        (WebCore::dragLocForSelectionDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEventForKey):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computePageRectsWithPageSizeInternal):
        (WebCore::PrintContext::pageNumberForElement):
        * page/SpatialNavigation.cpp:
        (WebCore::end):
        (WebCore::areRectsFullyAligned):
        (WebCore::areRectsMoreThanFullScreenApart):
        (WebCore::below):
        (WebCore::rightOf):
        (WebCore::isRectInDirection):
        (WebCore::entryAndExitPointsForDirection):
        (WebCore::virtualRectForDirection):
        * page/WindowFeatures.cpp:
        (WebCore::WindowFeatures::WindowFeatures):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setFrameRect):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::splitTrack):
        * platform/chromium/ScrollbarThemeChromium.cpp:
        (WebCore::ScrollbarThemeChromium::paintTickmarks):
        * platform/graphics/FloatQuad.h:
        (WebCore::FloatQuad::FloatQuad):
        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::intersects):
        (WebCore::FloatRect::contains):
        (WebCore::FloatRect::intersect):
        (WebCore::FloatRect::unite):
        (WebCore::enclosingIntRect):
        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::maxX):
        (WebCore::FloatRect::maxY):
        (WebCore::FloatRect::contains):
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::intersects):
        (WebCore::IntRect::contains):
        (WebCore::IntRect::intersect):
        (WebCore::IntRect::unite):
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::maxX):
        (WebCore::IntRect::maxY):
        (WebCore::IntRect::shiftXEdgeTo):
        (WebCore::IntRect::shiftMaxXEdgeTo):
        (WebCore::IntRect::shiftYEdgeTo):
        (WebCore::IntRect::shiftMaxYEdgeTo):
        (WebCore::IntRect::contains):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::copyImageBytes):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::mapRect):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::paint):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::centerRectVerticallyInParentInputElement):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintEllipsisBoxes):
        (WebCore::RenderBlock::inlineSelectionGaps):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::flipForWritingModeIncludingColumns):
        (WebCore::RenderBlock::adjustForColumns):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObject::right):
        (WebCore::RenderBlock::FloatingObject::bottom):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::reflectedRect):
        (WebCore::RenderBox::localCaretRect):
        (WebCore::RenderBox::addShadowOverflow):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::visualOverflowRectForPropagation):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        (WebCore::RenderBox::flipForWritingMode):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::getRectToExpose):
        (WebCore::cornerRect):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::overflowBottom):
        (WebCore::RenderLayer::overflowRight):
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/RenderOverflow.h:
        (WebCore::RenderOverflow::RenderOverflow):
        (WebCore::RenderOverflow::addLayoutOverflow):
        (WebCore::RenderOverflow::addVisualOverflow):
        (WebCore::RenderOverflow::setLayoutOverflow):
        (WebCore::RenderOverflow::setVisualOverflow):
        (WebCore::RenderOverflow::resetLayoutOverflow):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::constrainTrackRectToTrackPieces):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintObject):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteQuads):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::forwardEvent):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButton):
        (WebCore::RenderThemeMac::paintSliderTrack):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeRectForRepaint):
        (WebCore::RenderView::docBottom):
        (WebCore::RenderView::docRight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paddedLayoutOverflowRect):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::localCaretRect):

2011-02-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8492788> Adopt WKScrollbarPainterController

        Lots of new WebCoreSystemInterface functions to export.
        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

        Let the scrollAnimator know when the mouse has
        moved anywhere inside the page, and when the mouse 
        has moved in or out of the window. 
        * page/EventHandler.cpp:
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::updateMouseEventTargetNode):

        Let the scrollAnimator know when the window has become
        active or inactive.
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):
        
        Let the scrollAnimator know when all of these things
        are happening.
        * page/FrameView.cpp:
        (WebCore::FrameView::setContentsSize):
        (WebCore::FrameView::didMoveOnscreen):
        (WebCore::FrameView::willMoveOffscreen):
        (WebCore::FrameView::currentMousePosition):
        (WebCore::FrameView::contentsResized):
        
        New functions called through WebKit2 that allow the
        scrollAnimator to know when a live resize starts and ends.
        (WebCore::FrameView::willStartLiveResize):
        (WebCore::FrameView::willEndLiveResize):
        * page/FrameView.h:
        
        New functions on ScrollAnimator that pass information
        to the WKPainterController when we're using one.
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::scrollableArea):
        (WebCore::ScrollAnimator::contentAreaWillPaint):
        (WebCore::ScrollAnimator::mouseEnteredContentArea):
        (WebCore::ScrollAnimator::mouseExitedContentArea):
        (WebCore::ScrollAnimator::mouseMovedInContentArea):
        (WebCore::ScrollAnimator::willStartLiveResize):
        (WebCore::ScrollAnimator::contentsResized):
        (WebCore::ScrollAnimator::willEndLiveResize):
        (WebCore::ScrollAnimator::contentAreaDidShow):
        (WebCore::ScrollAnimator::contentAreaDidHide):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::scrollbarPainterDelegate):
        (WebCore::ScrollAnimatorMac::setPainterForPainterController):
        (WebCore::ScrollAnimatorMac::removePainterFromPainterController):
        (WebCore::ScrollAnimatorMac::notityPositionChanged):
        (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):
        
        Let the scrollAnimator know when this is happening.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):
        
        New function lets the scrollAnimator get the current 
        mouse position.
        * platform/ScrollView.h:
        (WebCore::ScrollView::currentMousePosition):
        
        New function that returns the scrollAnimator when needed.
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollAnimator):
        
        Keep track of if we're in a live resize using a new memeber
        variable.
        * platform/mac/ScrollAnimatorMac.h:
        (WebCore::ScrollAnimatorMac::inLiveResize):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::view):
        
        New delegates for the WKPainter and WKPainterController
        (-[ScrollbarPainterControllerDelegate initWithScrollAnimator:WebCore::]):
        (-[ScrollbarPainterControllerDelegate contentAreaRectForScrollerImpPair:]):
        (-[ScrollbarPainterControllerDelegate inLiveResizeForScrollerImpPair:]):
        (-[ScrollbarPainterControllerDelegate mouseLocationInContentAreaForScrollerImpPair:]):
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:setContentAreaNeedsDisplayInRect:]):
        (-[ScrollbarPainterControllerDelegate scrollerImpPair:updateScrollerStyleForNewRecommendedScrollerStyle:]):
        (-[ScrollKnobAnimation initWithScrollbarPainter:forScrollAnimator:WebCore::animateKnobAlphaTo:duration:]):
        (-[ScrollKnobAnimation setCurrentProgress:]):
        (-[ScrollbarPainterDelegate initWithScrollAnimator:WebCore::]):
        (-[ScrollbarPainterDelegate convertRectToBacking:]):
        (-[ScrollbarPainterDelegate convertRectFromBacking:]):
        (-[ScrollbarPainterDelegate layer]):
        (-[ScrollbarPainterDelegate setUpAnimation:scrollerPainter:animateKnobAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:animateKnobAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:animateTrackAlphaTo:duration:]):
        (-[ScrollbarPainterDelegate scrollerImp:overlayScrollerStateChangedTo:]):

        Get the WKScrollbarPainterRefs to synch up with the 
        WKScrollbarPainterControllerRefs when appropriate
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):
        (WebCore::ScrollbarThemeMac::setNewPainterForScrollbar):
        (WebCore::ScrollbarThemeMac::usesOverlayScrollbars):

        Implement ScrollableArea's virtual function contentsSize() for access
        through the scrollAnimator.
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::contentsSize):

2011-02-01  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        layoutTestController.counterValueForElementById does not return the correct value
        https://bugs.webkit.org/show_bug.cgi?id=53037

        Test: fast/css/counters/deep-before.html

        * rendering/RenderTreeAsText.cpp:
        (WebCore::counterValueForElement):
        Modified to use the newly available RenderObject::beforePseudoElement()
        and RenderObject::afterPseudoElement() instead of the old imperfect
        algorithm to find the before and after pseudo elements.

2011-02-01  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Allow access for security origin same as this.
        https://bugs.webkit.org/show_bug.cgi?id=53440

        Hard to test as newly added path currently is never hit.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccess): allow access if this == other

2011-01-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Update JSObject storage for new marking API
        https://bugs.webkit.org/show_bug.cgi?id=53467

        Update WebCore to handle new anonymous slot behaviour.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bindings/scripts/CodeGeneratorJS.pm:

2011-02-01  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Fix a text rendering problem when enclosing block is RTL and text runs
        are in different directionality.
        https://bugs.webkit.org/show_bug.cgi?id=34176

        The problem happens in the following example scenario (ABC represents 
        Hebrew characters):
        <div dir=rtl>this is a <span><span>test <span>ABC</span></span></span></div>

        The line consists of 3 text runs -- TextRun1 TextRun2 TextRun3. In which
        TextRun1 and TextRun2's bidi level are 2, and TextRun3's bidi level is 1.
        TextRun2 and TextRun3's least common ancestor is not a sibling of TextRun1.

        The visual bidi run order of the text runs is TextRun3 TextRun1 TextRun2.

        Inside RenderBlock::constructLine(), when RenderBlock::createLineBoxes()
        creates InlineFlowBox for TextRun2, it should check an InlineFlowBox for
        the run's render object's ancestor (not only its parent) has already 
        been constructed or has something following it on the line, in which 
        case, create a new box for TextRun2 instead of sharing the same box with
        TextRun3.

        In other words, the following 2 div should render the same results
        (ABC represents Hebrew characters).
        <div dir=rtl>this is a <span><span>test <span>ABC</span></span></span></div>
        <div dir=rtl>this is a <span>Test <span>ABC</span></span></div>

        Test: fast/dom/34176.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::parentIsConstructedOrHaveNext):
        (WebCore::RenderBlock::createLineBoxes):

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

        Reviewed by Dan Bernstein.

        Do not add a node in the document's stylesheet candidate node list if the
        node is already removed from document.
        https://bugs.webkit.org/show_bug.cgi?id=53441

        Test: fast/css/stylesheet-candidate-nodes-crash.xhtml

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

2011-02-01  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46422, make printing and pagination work
        with vertical text.

        Change printing functions to check writing-mode and properly swap width and height
        as needed.
        
        Fix the setScrollOrigin function so that the origin doesn't cause
        scroll spasming during printing (this is only partially successful, but it's better
        than it was).

        Rewrite computePageRects to handle both RTL documents properly as well as vertical
        text documents properly.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::forceLayoutForPagination):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computePageRects):
        (WebCore::PrintContext::computePageRectsWithPageSizeInternal):
        (WebCore::PrintContext::computeAutomaticScaleFactor):
        (WebCore::PrintContext::spoolPage):
        (WebCore::PrintContext::spoolRect):
        * page/PrintContext.h:
        * page/mac/WebCoreFrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetScrollOrigin):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):

2011-02-01  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix profiles reset to avoid clearing heap profiles in Chromium.

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

        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetFrontendProfiles):

2011-02-01  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Landing detailed heap snapshots, part 1.

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

        Adding code for accessing heap snapshot data and
        performing graph calculations.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/HeapSnapshot.js:
        (WebInspector.HeapSnapshotArraySlice): Helper class to avoid array contents copying.
        (WebInspector.HeapSnapshotEdge): Wrapper for accessing graph edge properties.
        (WebInspector.HeapSnapshotEdgeIterator):
        (WebInspector.HeapSnapshotNode): Wrapper for accessing graph node properties.
        (WebInspector.HeapSnapshotNodeIterator):
        (WebInspector.HeapSnapshot): Wrapper for the heap snapshot.
        (WebInspector.HeapSnapshotFilteredOrderedIterator):
        (WebInspector.HeapSnapshotEdgesProvider):
        (WebInspector.HeapSnapshotNodesProvider):
        (WebInspector.HeapSnapshotPathFinder):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._convertSnapshot):

2011-02-01  Adam Roben  <aroben@apple.com>

        Fix linker warnings in Release_LTCG builds

        * WebCore.vcproj/WebCore.vcproj: Exclude EventNames.cpp and EventTarget.cpp from all
        configurations, since they get pulled in via DOMAllInOne.cpp.

2011-02-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] Wrongly labelled context-menu item for links in Web Inspector's side-pane
        https://bugs.webkit.org/show_bug.cgi?id=53482

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.populateHrefContextMenu):
        * inspector/front-end/inspector.js:
        (WebInspector.resourceForURL):
        (WebInspector.openLinkExternallyLabel):

2011-02-01  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Propagate parent document security origin to newly create Document XML response
        https://bugs.webkit.org/show_bug.cgi?id=53444

        Covered by the existing tests.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):

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

        Unreviewed. Rollout r77230 which caused many layout tests
        crashes on Chromium Debug bots.

        Async event handlers should not fire within a modal dialog
        https://bugs.webkit.org/show_bug.cgi?id=53202

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/EventQueue.cpp:
        (WebCore::EventQueue::EventQueue):
        (WebCore::EventQueue::enqueueEvent):
        (WebCore::EventQueue::pendingEventTimerFired):
        * dom/EventQueue.h:

2011-02-01  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        LightElement changes does not require relayout.
        https://bugs.webkit.org/show_bug.cgi?id=53232

        When an attribute of a LightElement changes, it
        send an update message to the lighting filters
        to update its corresponding LightSource objects,
        and repaint the filters.

        Duplicated 'id' attributes removed from svg-filter-animation.svg.

        Existing dynamic-update tests covers this feature.

        5x speedup on manual-tests/svg-filter-animation.svg

        * manual-tests/svg-filter-animation.svg:
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::setLightingColor):
        (WebCore::FEDiffuseLighting::setSurfaceScale):
        (WebCore::FEDiffuseLighting::setDiffuseConstant):
        (WebCore::FEDiffuseLighting::setKernelUnitLengthX):
        (WebCore::FEDiffuseLighting::setKernelUnitLengthY):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/LightSource.cpp:
        (WebCore::PointLightSource::setX):
        (WebCore::PointLightSource::setY):
        (WebCore::PointLightSource::setZ):
        (WebCore::SpotLightSource::setX):
        (WebCore::SpotLightSource::setY):
        (WebCore::SpotLightSource::setZ):
        (WebCore::SpotLightSource::setPointsAtX):
        (WebCore::SpotLightSource::setPointsAtY):
        (WebCore::SpotLightSource::setPointsAtZ):
        (WebCore::SpotLightSource::setSpecularExponent):
        (WebCore::SpotLightSource::setLimitingConeAngle):
        (WebCore::DistantLightSource::setAzimuth):
        (WebCore::DistantLightSource::setElevation):
        (WebCore::LightSource::setAzimuth):
        (WebCore::LightSource::setElevation):
        (WebCore::LightSource::setX):
        (WebCore::LightSource::setY):
        (WebCore::LightSource::setZ):
        (WebCore::LightSource::setPointsAtX):
        (WebCore::LightSource::setPointsAtY):
        (WebCore::LightSource::setPointsAtZ):
        (WebCore::LightSource::setSpecularExponent):
        (WebCore::LightSource::setLimitingConeAngle):
        * platform/graphics/filters/LightSource.h:
        * platform/graphics/filters/PointLightSource.h:
        * platform/graphics/filters/SpotLightSource.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        (WebCore::SVGFEDiffuseLightingElement::lightElementAttributeChanged):
        (WebCore::SVGFEDiffuseLightingElement::build):
        (WebCore::SVGFEDiffuseLightingElement::findLightElement):
        (WebCore::SVGFEDiffuseLightingElement::findLight):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::svgAttributeChanged):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setFilterEffectAttribute):
        * svg/SVGFilterPrimitiveStandardAttributes.h:

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

        Reviewed by Dimitri Glazkov.

        Bug 53289 - DOM: Move DocumentOrderedMap from Document into separate files
        https://bugs.webkit.org/show_bug.cgi?id=53289

        Moving the nested class DocumentOrderedMap from Document into separate files,
        updating code where necessary.

        No new tests. (refactoring)

        * Android.mk:
        * CMakeLists.txt:
        * GNUMakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::getElementById):
        (WebCore::Document::getImageMap):
        * dom/Document.h:
        * dom/DocumentOrderedMap.cpp: Added.
        (WebCore::keyMatchesId):
        (WebCore::keyMatchesMapName):
        (WebCore::keyMatchesLowercasedMapName):
        (WebCore::DocumentOrderedMap::clear):
        (WebCore::DocumentOrderedMap::add):
        (WebCore::DocumentOrderedMap::remove):
        (WebCore::DocumentOrderedMap::get):
        (WebCore::DocumentOrderedMap::getElementById):
        (WebCore::DocumentOrderedMap::getElementByMapName):
        (WebCore::DocumentOrderedMap::getElementByLowercasedMapName):
        * dom/DocumentOrderedMap.h: Added.
        (WebCore::DocumentOrderedMap::contains):
        (WebCore::DocumentOrderedMap::containsMultiple):
        * dom/DOMAllInOne.cpp:

2011-02-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] atk_text_set_caret_offset fails for list items
        https://bugs.webkit.org/show_bug.cgi?id=53388

        Allow using text ranges across list items.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::allowsTextRanges): Add list items
        to the list of accessibility objects supporting text ranges.

2011-02-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] character range extents is off when the end of a wrapped line is included
        https://bugs.webkit.org/show_bug.cgi?id=53323

        Fixed wrong calculation getting the range extents.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_range_extents): Removed '+1' since the
        requested interval shouldn't include the last character.

2011-02-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Caret Offset is one off at the end of wrapped lines
        https://bugs.webkit.org/show_bug.cgi?id=53300

        Consider linebreaks as special cases.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (objectAndOffsetUnignored): In order to avoid getting wrong values
        when around linebreaks, we need to workaround this by explicitly
        avoiding those '\n' text nodes from affecting the result of
        calling to TextIterator:rangeLength().

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

        Unreviewed, rolling out r77229.
        http://trac.webkit.org/changeset/77229
        https://bugs.webkit.org/show_bug.cgi?id=53289

        revert mysterious build breakage

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Document.cpp:
        (WebCore::Document::DocumentOrderedMap::clear):
        (WebCore::Document::DocumentOrderedMap::add):
        (WebCore::Document::DocumentOrderedMap::remove):
        (WebCore::Document::DocumentOrderedMap::get):
        (WebCore::keyMatchesId):
        (WebCore::Document::getElementById):
        (WebCore::keyMatchesMapName):
        (WebCore::keyMatchesLowercasedMapName):
        (WebCore::Document::getImageMap):
        * dom/Document.h:
        (WebCore::Document::DocumentOrderedMap::contains):
        (WebCore::Document::DocumentOrderedMap::containsMultiple):
        * dom/DocumentOrderedMap.cpp: Removed.
        * dom/DocumentOrderedMap.h: Removed.

2011-02-01  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by James Robinson.

        Async event handlers should not fire within a modal dialog
        https://bugs.webkit.org/show_bug.cgi?id=53202

        Asychronous events that use EventQueue would currently fire while a
        modal dialog (e.g. window.alert()) was up. Change EventQueue to use a
        SuspendableTimer (which automatically gets suspended while dialogs are
        up and in other cases where JS execution is not allowed).
        
        Test: fast/events/scroll-event-during-modal-dialog.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/EventQueue.cpp:
        (WebCore::EventQueueTimer::EventQueueTimer):
        (WebCore::EventQueueTimer::fired):
        (WebCore::EventQueue::EventQueue):
        (WebCore::EventQueue::enqueueEvent):
        (WebCore::EventQueue::pendingEventTimerFired):
        * dom/EventQueue.h:
        (WebCore::EventQueue::create):

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

        Reviewed by Dimitri Glazkov.

        Bug 53289 - DOM: Move DocumentOrderedMap from Document into separate files
        https://bugs.webkit.org/show_bug.cgi?id=53289

        Moving the nested class DocumentOrderedMap from Document into separate files,
        updating code where necessary.

        No new tests. (refactoring)

        * Android.mk:
        * CMakeLists.txt:
        * GNUMakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::getElementById):
        (WebCore::Document::getImageMap):
        * dom/Document.h:
        * dom/DocumentOrderedMap.cpp: Added.
        (WebCore::keyMatchesId):
        (WebCore::keyMatchesMapName):
        (WebCore::keyMatchesLowercasedMapName):
        (WebCore::DocumentOrderedMap::clear):
        (WebCore::DocumentOrderedMap::add):
        (WebCore::DocumentOrderedMap::remove):
        (WebCore::DocumentOrderedMap::get):
        (WebCore::DocumentOrderedMap::getElementById):
        (WebCore::DocumentOrderedMap::getElementByMapName):
        (WebCore::DocumentOrderedMap::getElementByLowercasedMapName):
        * dom/DocumentOrderedMap.h: Added.
        (WebCore::DocumentOrderedMap::contains):
        (WebCore::DocumentOrderedMap::containsMultiple):
        * dom/DOMAllInOne.cpp:

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

        Reviewed by Darin Fisher.

        [Chromium] Autofill should work with HTML5 form elements
        https://bugs.webkit.org/show_bug.cgi?id=51809
        http://crbug.com/65654

        No new tests, because this fix is for Chromium project and hard to test only in WebKit project.

        * html/InputType.h: Insert comment for canSetSuggestedValue().
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::canSetSuggestedValue): Implemented to return always true for that all text filed inputs can be completed.
        * html/TextFieldInputType.h: Declare canSetSuggestedValue().
        * html/TextInputType.cpp: Delete canSetSuggestedValue() not to return true anymore.
        * html/TextInputType.h: Delete canSetSuggestedValue() not to return true anymore.

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

        Reviewed by Dan Bernstein.

        REGRESSION (r65062): Safari loops forever under WebCore::plainTextToMallocAllocatedBuffer()
        https://bugs.webkit.org/show_bug.cgi?id=53272

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextBox): Pass the appropriate renderer to emitText().

2011-01-31  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=53466
        Move WebKit2 to printing via API methods

        * WebCore.exp.in: Export IntRect::scale().

2011-01-31  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Remove obsolete comment after r41871
        https://bugs.webkit.org/show_bug.cgi?id=53406

        * dom/Document.h:

2011-01-31  Simon Fraser  <simon.fraser@apple.com>

        Fix according to reviewer comments: can just use Color::black now.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawInsetShadow):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):

2011-01-31  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Clean up ShadowBlur
        https://bugs.webkit.org/show_bug.cgi?id=53472

        Some minor ShadowBlur cleanup.

        * platform/graphics/ShadowBlur.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::ShadowBlur): Use m_blurRadius rather than the radius
        paramter.
        (WebCore::ShadowBlur::adjustBlurRadius): Renamed from adjustBlurDistance.
        (WebCore::ShadowBlur::calculateLayerBoundingRect): Rename layerFloatRect to
        layerRect. Make frameSize a float.
        (WebCore::ShadowBlur::beginShadowLayer): This now takes a precomputed
        layerRect rather than calling calculateLayerBoundingRect() to compute
        it itself, since we were calling calculateLayerBoundingRect() twice.
        (WebCore::ShadowBlur::drawRectShadow): Optimize to call calculateLayerBoundingRect()
        only once. The shadowRect variable was unused, so two return paths could be
        collapsed into one.
        (WebCore::ShadowBlur::drawInsetShadow): Call calculateLayerBoundingRect() before
        beginShadowLayer() now.
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling): The layerRect gets passed in.
        We always used alpha=1, so no need to pass that in.
        (WebCore::ShadowBlur::drawRectShadowWithTiling): We always used alpha=1, so no need to
        pass that in. Move shadowRect down to first use.
        ShadowBlur::clipBounds() was unused.

2011-01-31  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebElements example from QtWebKit Bridge documentation does not work at all
        https://bugs.webkit.org/show_bug.cgi?id=46748

        This problem disappears when we register QWebElement using qRegisterMetaType, which we now do in QtInstance.
        Added a regression test to tst_QWebFrame.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::QtInstance):

2011-01-27  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.
        
        Convert <progress> shadow DOM to a DOM-based shadow.
        https://bugs.webkit.org/show_bug.cgi?id=50660

        * Removed RenderProgress::m_valuePart, moved the shadow node
          to the shadow root of HTMLProgressElement.
        * Removed hard-coded pseudo ID for -webkit-progress-bar-value.
          ProgressBarValueElement is defined only for overriding
          shadowPseudoId().
        
        No new tests. No behavioral change.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * html/HTMLProgressElement.cpp:
        (WebCore::ProgressBarValueElement::ProgressBarValueElement):
        (WebCore::ProgressBarValueElement::shadowPseudoId):
        (WebCore::ProgressBarValueElement::create):
        (WebCore::ProgressBarValueElement::detach):
        (WebCore::HTMLProgressElement::parseMappedAttribute):
        (WebCore::HTMLProgressElement::attach):
        (WebCore::HTMLProgressElement::valuePart):
        (WebCore::HTMLProgressElement::didElementStateChange):
        (WebCore::HTMLProgressElement::createShadowSubtreeIfNeeded):
        * html/HTMLProgressElement.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::~RenderProgress):
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::layoutParts):
        (WebCore::RenderProgress::shouldHaveParts):
        (WebCore::RenderProgress::valuePart):
        * rendering/RenderProgress.h:
        * rendering/style/RenderStyleConstants.h:

2011-01-31  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Add sanity check to help diagnose bug 52819
        https://bugs.webkit.org/show_bug.cgi?id=53402

        Crash early if the children of fromItem look invalid.

        * loader/HistoryController.cpp:

2011-01-31  Kalle Vahlman  <kalle.vahlman@movial.com>

        Reviewed by Andreas Kling.

        [Qt] canvas.drawImage(HTMLVideoElement) doesn't work with Qt Multimedia backend
        https://bugs.webkit.org/show_bug.cgi?id=53325

        Reimplement paintCurrentFrameInContext() rather than delegate the
        rendering to paint() to make sure we really do get the video frame
        content into the GraphicsContext, regardless of accelerated
        compositing and the video scene state.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::paintCurrentFrameInContext):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:

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

        Reviewed by Darin Adler.

        Setting "selected" attribute to false should have no effect in single line <select>
        https://bugs.webkit.org/show_bug.cgi?id=52436

        Change SelectElement::setSelectedIndex to select the first selectable
        option when the select state of all options is set to false as required
        by the HTML5 specification.

        Test: fast/dom/HTMLSelectElement/selected-false.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::setSelectedIndex):

2011-01-31  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Console source references need a left-margin
        https://bugs.webkit.org/show_bug.cgi?id=53308

        * inspector/front-end/inspector.css:
        (.console-message-url): Added a 4px margin on the left.

2011-01-31  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        Code Changes only.

        It is needlessly expensive to find the generating node from an anonymous renderer of a pseudoelement.
        https://bugs.webkit.org/show_bug.cgi?id=53024

        No new tests. No change in functionality

        * rendering/RenderObject.h:
        (WebCore::RenderObject::before):
        (WebCore::RenderObject::after):
        (WebCore::RenderObject::generatingNode):
        Added new accessors for the use of the CSS 2.1 counters code
        (mainlyly)
        * rendering/RenderObjectChildList.cpp:
        (WebCore::beforeAfterContainer):
        (WebCore::RenderObjectChildList::invalidateCounters):
        (WebCore::RenderObjectChildList::before):
        (WebCore::RenderObjectChildList::after):
        Refactored the code to take advantage of the new accessors.
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        Changed to store the generating node in the :before and :after
        renderers.
        * rendering/RenderObjectChildList.h:

2011-01-31  Krithigassree Sambamurthy  <krithigassree.sambamurthy@nokia.com>

        Reviewed by David Hyatt.

        Add background-clip to background shorthand
        https://bugs.webkit.org/show_bug.cgi?id=52080

        Added background-clip to background-shorthand. Also made changes to
        include webkitMaskClip to the mask shorthand to keep both in sync.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):

2011-01-31  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        WKView should support scrollPageDown:, scrollPageUp:, scrollToBeg and other similar selectors
        https://bugs.webkit.org/show_bug.cgi?id=53460

        * editing/EditorCommand.cpp:
        (WebCore::executeScrollPageBackward): Added.
        (WebCore::executeScrollPageForward): Added.
        (WebCore::executeScrollToBeginningOfDocument): Added.
        (WebCore::executeScrollToEndOfDocument): Added.
        (WebCore::createCommandMap): Added the four commands above to the map.

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

        Reviewed by Adele Peterson.

        Inter-ideograph justification should apply to hiragana and katakana as well
        https://bugs.webkit.org/show_bug.cgi?id=53464

        Changed the test for expansion opportunities from isCJKIdeograph() to isCJKIdeographOrSymbol().

        * platform/graphics/Font.cpp:
        (WebCore::Font::expansionOpportunityCount):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):

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

        Reviewed by James Robinson.

        REGRESSION(r76951): Appearance of media controls changed slightly on Qt/Chromium ports
        https://bugs.webkit.org/show_bug.cgi?id=53314

        Fixes media/controls-strict.html on Chromium.

        * css/mediaControlsChromium.css:
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
            Added proper box-sizing to avoid differences between strict/quirks mode.

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

        Reviewed by Dimitri Glazkov.

        Validation message bubble shouldn't inherit text-security style
        https://bugs.webkit.org/show_bug.cgi?id=53457

        No new tests because the validation message feature depends on timers
        and is enabled only in Chromium port.

        * css/html.css:
        (::-webkit-validation-bubble): Reset -webkit-text-security.

2011-01-31  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
        https://bugs.webkit.org/show_bug.cgi?id=53271

        Reapplying this patch again. 
        The removal of this patch in <http://trac.webkit.org/changeset/77125>
        as part of https://bugs.webkit.org/show_bug.cgi?id=53418,
        removed the both the first (failing) patch (r76893) and this fixed 
        patch (r76969).  This patch includes slight changes necessitated by
        r77151.

        Reapplying this patch with the change that the second ASSERT in 
        RootObject::removeRuntimeObject was changed to use
        .uncheckedGet() instead of the failing .get().  The object in question
        could be in the process of being GC'ed.  The get() call will not return
        such an object while the uncheckedGet() call will return the (unsafe) 
        object.  This is the behavior we want.

        Precautionary change.
        Changed RootObject to use WeakGCMap instead of HashSet.
        Found will looking for another issue, but can't produce a test case
        that is problematic.  THerefore there aren't any new tests.

        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::addRuntimeObject):
        (JSC::Bindings::RootObject::removeRuntimeObject):
        * bridge/runtime_root.h:

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

        Unbreak Qt build after r77151.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::markAggregate):

2011-01-31  takano takumi  <takano@apple.com>

        Reviewed by Dave Hyatt.

        Implement text-combine rendering code
        https://bugs.webkit.org/show_bug.cgi?id=50621

        Test: fast/text/international/text-combine-image-test.html

        * Android.mk: Added RenderCombineText.cpp/h
        * CMakeLists.txt: Added RenderCombineText.cpp/h
        * GNUmakefile.am: Added RenderCombineText.cpp/h
        * WebCore.exp.in:
        * WebCore.gypi: Added RenderCombineText.cpp/h
        * WebCore.pro: Added RenderCombineText.cpp/h
        * WebCore.vcproj/WebCore.vcproj: Added RenderCombineText.cpp/h
        * WebCore.xcodeproj/project.pbxproj: Added RenderCombineText.cpp/h
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        - Added fontDescription.widthVariant to SimpleFontData creation.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        - Changed to set "Unique" flag to RenderStyle in case of TextCombine.
        * dom/Text.cpp:
        (WebCore::Text::createRenderer):
        - Changed to create RenderCombineText in case of TextCombine.
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData):
        - Added FontWidthVariant as an argument for FontPlatformData creation.
        * loader/cache/CachedFont.h:
        - Ditto.
        * platform/graphics/Font.h:
        (WebCore::Font::widthVariant):
        - The accessor to FontWidthVariant member variable.
        * platform/graphics/FontCache.cpp:
        - Made cache to incorporate FontWidthVariant value.
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/FontDescription.h:
        - Add a member variable that holds a width variant - none, half-width, third-width, and quarter-width.
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::widthVariant):
        (WebCore::FontDescription::setWidthVariant):
        (WebCore::FontDescription::operator==):
        * platform/graphics/FontWidthVariant.h: Added.
        * platform/graphics/cairo/FontCustomPlatformData.h:
        - Changed to carry FontWidthVariant value.
        * platform/graphics/cocoa/FontPlatformData.h:
        - Changed to carry FontWidthVariant value.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::widthVariant):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        - Changed to carry FontWidthVariant value.
        (WebCore::FontPlatformData::operator=):
        - Ditto.
        (WebCore::mapFontWidthVariantToCTFeatureSelector):
        - A function to map a FontWidthVariant value to a CoreText's text spacing feature selector.
        (WebCore::FontPlatformData::ctFont):
        - Changed to create CTFont with text spacing variant based on FontWidthVariant.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        - Changed to carry FontWidthVariant value.
        * platform/graphics/haiku/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        - Changed to carry FontWidthVariant value.
        * platform/graphics/haiku/FontCustomPlatformData.h:
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::createFontPlatformData):
        - Changed to carry FontWidthVariant value.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        - Changed to carry FontWidthVariant value.
        * platform/graphics/mac/FontCustomPlatformData.h:
        - Ditto.
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::shouldUseCoreText):
        - Changed to skip CT path when width variant is specified.
        * platform/graphics/pango/FontCustomPlatformDataPango.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        - Ditto.
        * platform/graphics/qt/FontCustomPlatformData.h:
        - Ditto.
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        - Ditto.
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        - Ditto.
        * platform/graphics/skia/FontCustomPlatformData.h:
        - Ditto.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        - Ditto.
        * platform/graphics/win/FontCustomPlatformData.h:
        - Ditto.
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        - Ditto.
        (WebCore::FontCustomPlatformData::fontPlatformData):
        - Ditto.
        * platform/graphics/win/FontCustomPlatformDataCairo.h:
        - Ditto.
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        - Ditto.
        * platform/graphics/wince/FontCustomPlatformData.h:
        - Ditto.
        * platform/graphics/wx/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        - Ditto.
        * platform/graphics/wx/FontCustomPlatformData.h:
        - Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        - In case of RenderCombineText, we don't rotate text even in vertical writing. Also, we render original text
        instead of text returned from text().
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        - Made to call RenderCombinedText's prepareTextCombine() here.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::textWidth):
        - Made to always use the render object's width() in case of TextCombine.
        (WebCore::RenderBlock::findNextLineBreak):
        - Made to call RenderCombinedText's prepareTextCombine() here.
        * rendering/RenderCombineText.cpp: Added. A subclass of RenderText.
        (WebCore::RenderCombineText::RenderCombineText):
        (WebCore::RenderCombineText::styleDidChange):
        - Clear the flag that indicated the font has been prepared for combining. The font will be reinitialized in
        the next call of RenderBlock::findNextLineBreak().
        (WebCore::RenderCombineText::setTextInternal):
        - Ditto.
        (WebCore::RenderCombineText::width):
        - Returns 1-em width in case of font combine.
        (WebCore::RenderCombineText::adjustTextOrigin):
        - Adjust drawing origin point in case of font combine.
        (WebCore::RenderCombineText::charactersToRender):
        - Return original text instead of current text in case of font combine.
        (WebCore::RenderCombineText::combineText):
        - This function tries to pack passed text with; 1) the current font as is, 2) the font created
        from the descriptor with half-width variant specified, 3) the font with third-width variant, 4) the font
        with quarter-width variant.
        - If a suitable font successfully found, replace the current font with the new font. If no appropriate font found,
        we give up text-combine as the CSS spec describes.
        - If a new font found, we replace the text with 0xFFFC. This is needed for a combined text block to be able to
        behave like a single character against text decorations.
        * rendering/RenderCombineText.h: Added.
        (WebCore::RenderCombineText::isCombined):
        (WebCore::RenderCombineText::combinedTextWidth):
        - Returns 1-em width in case of font combine.
        (WebCore::RenderCombineText::renderName):
        (WebCore::toRenderCombineText):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::widthFromCache):
        - Made to call RenderCombineText's combinedTextWidth when the text is combined.
        * rendering/RenderingAllInOne.cpp: Added RenderCombineText.cpp
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasTextCombine):
        - Added for a quick test of TextCombine.

2011-01-31  Oliver Hunt  <oliver@apple.com>

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        rolling r77098, r77099, r77100, r77109, and
        r77111 back in, along with a few more Qt fix attempts.

        * ForwardingHeaders/runtime/WriteBarrier.h: Added.
        * WebCore.exp.in:
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::globalData):
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markDOMNodesForDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::markDOMNodeWrapper):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):
        (WebCore::JSDOMGlobalObject::setInjectedScript):
        (WebCore::JSDOMGlobalObject::injectedScript):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
        (WebCore::getDOMConstructor):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::DialogHandler::dialogCreated):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        (WebCore::JSDOMWindowShell::markChildren):
        (WebCore::JSDOMWindowShell::unwrappedObject):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::window):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::createAccelerationObject):
        (WebCore::createRotationRateObject):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::setAll):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::markAggregate):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::putProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fallbackObject):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::QtInstance):
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
        (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        * bridge/qt/qt_runtime.h:
        * dom/Document.h:

2011-01-31  Dan Winship  <danw@gnome.org>

        Reviewed by Gustavo Noronha Silva.

        wss (websockets ssl) support for gtk via new gio TLS support
        https://bugs.webkit.org/show_bug.cgi?id=50344

        Update to use GPollableOutputStream and GTlsConnection to
        implement wss URLs

        * platform/network/soup/SocketStreamHandle.h:
        * platform/network/soup/SocketStreamHandleSoup.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::connected):
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::beginWaitingForSocketWritability):
        (WebCore::writeReadyCallback):

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

        Reviewed by Dimitri Glazkov.

        Check the textarea node still exists in document before casting
        it to HTMLTextAreaElement.
        https://bugs.webkit.org/show_bug.cgi?id=53429

        Test: fast/forms/textarea-node-removed-from-document-crash.html

        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::~RenderTextControlMultiLine):

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

        Reviewed by Dave Hyatt.

        If beforeChild is wrapped in an anonymous table section, we need to
        go the parent to find it and use it before adding childs to table.
        https://bugs.webkit.org/show_bug.cgi?id=53276

        We need to make sure that beforeChild's parent is "this" before calling
        RenderBox::addChild. The previous condition in while is too restrictive
        and fails to calculate the right beforeChild value when its display
        style is table caption.
        Test: fast/table/before-child-non-table-section-add-table-crash.html

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

2011-01-31  Shane Stephens  <shanestephens@google.com>

        Reviewed by Simon Fraser.

        AffineTransform::translateRight incorrectly computes a translateLeft.
        https://bugs.webkit.org/show_bug.cgi?id=52551

        Removed translateRight and converted all uses to perform standard
        matrix multiplication.

        No new tests because patch doesn't modify functionality.

        * platform/graphics/transforms/AffineTransform.cpp:
        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::translation):
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::localToParentTransform):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::localToRepaintContainerTransform):
        (WebCore::RenderSVGRoot::localToParentTransform):
        * rendering/svg/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::localToParentTransform):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::finalizeTransformMatrices):

2011-01-31  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] atk_text_set_caret_offset returns True even when it is unsuccessful
        https://bugs.webkit.org/show_bug.cgi?id=53389

        Return FALSE when not able to set the caret at the specified offset.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_set_caret_offset): Return FALSE when the
        range created is NULL and adjust offset to account for list markers.

2011-01-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: copy HAR to clipboard instead of saving blob on export.
        https://bugs.webkit.org/show_bug.cgi?id=53328

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._exportAll):
        (WebInspector.NetworkPanel.prototype._exportResource):

2011-01-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: speed up network panel rendering.
        https://bugs.webkit.org/show_bug.cgi?id=53397

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.get scrollContainer):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.elementsToRestoreScrollPositionsFor):
        (WebInspector.NetworkPanel.prototype._positionSummaryBar):
        (WebInspector.NetworkPanel.prototype._createTable):
        (WebInspector.NetworkPanel.prototype._exportResource):
        (WebInspector.NetworkPanel.prototype._onScroll):
        * inspector/front-end/networkPanel.css:
        (.network-sidebar .data-grid.small tr.offscreen):
        (.network-sidebar .data-grid tr.offscreen):
        (.network-sidebar .data-grid tr.offscreen td):

2011-01-31  Peter Varga  <pvarga@webkit.org>

        Reviewed by Andreas Kling.

        Remove wrec from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=53298

        No new tests needed.

        * Android.jscbindings.mk:
        * ForwardingHeaders/wrec/WREC.h: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/copyForwardingHeaders.cmd:

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

        Unreviewed, rolling out r76969.
        http://trac.webkit.org/changeset/76969
        https://bugs.webkit.org/show_bug.cgi?id=53418

        "It is causing crashes in GTK+ and Leopard bots" (Requested by
        alexg__ on #webkit).

        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::addRuntimeObject):
        (JSC::Bindings::RootObject::removeRuntimeObject):
        * bridge/runtime_root.h:

2011-01-31  Antti Koivisto  <antti@apple.com>

        Not reviewed.

        Spelling.

        * css/CSSSelectorList.h:
        (WebCore::CSSSelectorList::next):

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

        Unreviewed. Fix Chromium compilation on Linux.

        * platform/graphics/ShadowBlur.cpp: added PLATFORM(CHROMIUM) guard
        * platform/graphics/ShadowBlur.h: added missing ColorSpace.h header include

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

        Unreviewed. Fix Chromium compilation on Mac broken by r77101.

        * WebCore.gypi: add ShadowBlur.{h,cpp} to the gypi file.

2011-01-31  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: Change button title from "Clear CPU profiles" to "Clear all profiles".

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):

2011-01-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed, fix the build with current GTK+ 3.x.

        * plugins/gtk/gtk2xtbin.c:
        * plugins/gtk/gtk2xtbin.h:

2011-01-30  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        Dangling form associated elements should not be registered on the document
        https://bugs.webkit.org/show_bug.cgi?id=53223

        Adds insertedIntoDocument() and remvoedFromDocument() to
        FormAssociatedElement class to register the element on the document
        if and only if it actually inserted into (removed from) the document.

        Test: fast/forms/dangling-form-element-crash.html

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::insertedIntoDocument): Added.
        (WebCore::FormAssociatedElement::removedFromDocument): Ditto.
        (WebCore::FormAssociatedElement::insertedIntoTree): Don't register
        the element to a document.
        (WebCore::FormAssociatedElement::removedFromTree): Don't unregister
        the element from a document.
        * html/FormAssociatedElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::insertedIntoDocument): Added.
        (WebCore::HTMLFormControlElement::removedFromDocument): Ditto.
        * html/HTMLFormControlElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::insertedIntoDocument): Calls
        FormAssociatedElement::insertedIntoDocument().
        (WebCore::HTMLObjectElement::removedFromDocument): Calls
        FormAssociatedElement::removedFromDocument().

2011-01-30  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r77098, r77099, r77100, r77109, and
        r77111.
        http://trac.webkit.org/changeset/77098
        http://trac.webkit.org/changeset/77099
        http://trac.webkit.org/changeset/77100
        http://trac.webkit.org/changeset/77109
        http://trac.webkit.org/changeset/77111
        https://bugs.webkit.org/show_bug.cgi?id=53219

        Qt build is broken

        * ForwardingHeaders/runtime/WriteBarrier.h: Removed.
        * WebCore.exp.in:
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markDOMNodesForDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::markDOMNodeWrapper):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):
        (WebCore::JSDOMGlobalObject::setInjectedScript):
        (WebCore::JSDOMGlobalObject::injectedScript):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
        (WebCore::getDOMConstructor):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::DialogHandler::dialogCreated):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        (WebCore::JSDOMWindowShell::markChildren):
        (WebCore::JSDOMWindowShell::unwrappedObject):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::window):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::createAccelerationObject):
        (WebCore::createRotationRateObject):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::setAll):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::markAggregate):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::putProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::QtInstance):
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
        (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        * bridge/qt/qt_runtime.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        * bridge/runtime_root.h:
        * dom/Document.h:

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

        Unreviewed, rolling out r77107.
        http://trac.webkit.org/changeset/77107
        https://bugs.webkit.org/show_bug.cgi?id=53412

        Caused 5 new form-related test crashes (Requested by smfr on
        #webkit).

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::parseMappedAttribute):
        (WebCore::HTMLProgressElement::attach):
        * html/HTMLProgressElement.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::~RenderProgress):
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::layoutParts):
        (WebCore::RenderProgress::shouldHaveParts):
        * rendering/RenderProgress.h:
        * rendering/style/RenderStyleConstants.h:

2011-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Enhance ShadowBlur to render inset box shadows
        https://bugs.webkit.org/show_bug.cgi?id=51567
        
        Use ShadowBlur for inset box-shadows with CG. It 
        currently lacks a tiled version, but is still much
        faster than CG shadows.

        Test: fast/box-shadow/inset-box-shadow-radius.html

        * platform/graphics/ShadowBlur.cpp:
        * platform/graphics/ShadowBlur.h: New method for inset
        shadows.
        (WebCore::ShadowBlur::drawInsetShadow): 

        * platform/graphics/GraphicsContext.cpp: #ifdef out
        fillRectWithRoundedHole() for CG.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRectWithRoundedHole): If there's
        a shadow with a radius > 0, use ShadowBlur.

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

        Reviewed by Chris Marrin.

        WebGL shows PNG Textures with indexed colors too dark
        https://bugs.webkit.org/show_bug.cgi?id=47477

        Properly handle indexed PNG images by re-rendering them as RGBA
        images before upload. Verified with this layout test and the test
        cases from bugs 47477 and 53269.

        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2011-01-27  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.
        
        Convert <progress> shadow DOM to a DOM-based shadow.
        https://bugs.webkit.org/show_bug.cgi?id=50660

        * Removed RenderProgress::m_valuePart, moved the shadow node
          to the shadow root of HTMLProgressElement.
        * Removed hard-coded pseudo ID for -webkit-progress-bar-value.
          ProgressBarValueElement is defined only for overriding
          shadowPseudoId().
        
        No new tests. No behavioral change.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * html/HTMLProgressElement.cpp:
        (WebCore::ProgressBarValueElement::ProgressBarValueElement):
        (WebCore::ProgressBarValueElement::shadowPseudoId):
        (WebCore::ProgressBarValueElement::create):
        (WebCore::HTMLProgressElement::parseMappedAttribute):
        (WebCore::HTMLProgressElement::attach):
        (WebCore::HTMLProgressElement::valuePart):
        (WebCore::HTMLProgressElement::didElementStateChange):
        (WebCore::HTMLProgressElement::createShadowSubtreeIfNeeded):
        * html/HTMLProgressElement.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::~RenderProgress):
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::layoutParts):
        (WebCore::RenderProgress::shouldHaveParts):
        (WebCore::RenderProgress::valuePart):
        * rendering/RenderProgress.h:
        * rendering/style/RenderStyleConstants.h:

2011-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Ariya Hidayat.

        Enhance ShadowBlur to render inset box shadows; Part 1.
        https://bugs.webkit.org/show_bug.cgi?id=51567
        
        Add a new method to GraphicsContext to render a rect with a rounded hole,
        for use by inset box-shadow code. Knowledge that we're rendering a rounded
        hole will enable ShadowBlur to be used here in future.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/GraphicsContext.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):

2011-01-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Eric Seidel.

        REGRESSION: Inset shadow with too large border radius misses rounded corner.
        https://bugs.webkit.org/show_bug.cgi?id=52800

        The refactoring on r76083 broke the invariant between border
        IntRect and its radii because RoundedIntRect::setRect() is called
        after getRoundedInnerBorderWithBorderWidths(), which enforces the
        invariant. Th rounded-rect clipping code verifies the invariant,
        and discard the invalid radii, that results broken paintings.
        
        This change moved setRect() before
        getRoundedInnerBorderWithBorderWidths() not to modify the valid
        RoundedIntRect value.
        
        Test: fast/box-shadow/inset-with-extraordinary-radii-and-border.html

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

2011-01-30  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix Windows build by adding ShadowBlur.cpp/h to the
        vcproj.

        * WebCore.vcproj/WebCore.vcproj:

2011-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        -webkit-box-shadow causes awful scroll/resize/redraw performance
        https://bugs.webkit.org/show_bug.cgi?id=22102
        
        Use ShadowBlur for CG, whe rendering shadows on rects and
        rounded rects outside of canvas.
        
        CG shadows with a radius of more than 8px do not render
        correctly. We preserve this incorrect rendering by compensating
        for it when rending -webkit-box-shadow. Calls that should use
        this deprecated radius behavior now use setLegacyShadow().

        Test: fast/box-shadow/box-shadow-transformed.html
        
        * html/canvas/CanvasRenderingContext2D.cpp: Use setLegacyShadow()
        for canvas, to indicate that it should use the deprecated radius
        behavior.
        (WebCore::CanvasRenderingContext2D::setAllAttributesToDefault): Ditto.
        (WebCore::CanvasRenderingContext2D::setShadow): Ditto.
        (WebCore::CanvasRenderingContext2D::applyShadow): Ditto.
        
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setLegacyShadow): Set the m_state.shadowsUseLegacyRadius bit.
        
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState): Add a 
        shadowsUseLegacyRadius bit to the state.
        
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::radiusToLegacyRadius): Map from the actual radius to one
        that approximates CG behavior.
        (WebCore::hasBlurredShadow): Helper that returns true if we have a shadow
        with a non-zero blur radius.
        (WebCore::GraphicsContext::fillRect): Use ShadowBlur if not canvas.
        (WebCore::GraphicsContext::fillRoundedRect): Ditto.
        (WebCore::GraphicsContext::setPlatformShadow): Comment.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow): Call setLegacyShadow()
        for -webkit-box-shadow.

        * platform/graphics/ShadowBlur.cpp: 
        (WebCore::ShadowBlur::calculateLayerBoundingRect): Fix some pixel crack issues
        by rounding up the blur radius.
        (WebCore::ShadowBlur::drawRectShadow): Ditto
        (WebCore::ShadowBlur::drawRectShadowWithTiling): Ditto.

2011-01-30  Oliver Hunt  <oliver@apple.com>

        Try to fix Qt build (again).

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):

2011-01-30  Oliver Hunt  <oliver@apple.com>

        Try to fix Qt build.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::QtInstance):
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:

2011-01-30  Oliver Hunt  <oliver@apple.com>

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        rolling r77006 and r77020 back in.

        * ForwardingHeaders/runtime/WriteBarrier.h: Added.
        * WebCore.exp.in:
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::globalData):
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markDOMNodesForDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::markDOMNodeWrapper):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):
        (WebCore::JSDOMGlobalObject::setInjectedScript):
        (WebCore::JSDOMGlobalObject::injectedScript):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
        (WebCore::getDOMConstructor):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::DialogHandler::dialogCreated):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        (WebCore::JSDOMWindowShell::markChildren):
        (WebCore::JSDOMWindowShell::unwrappedObject):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::window):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::createAccelerationObject):
        (WebCore::createRotationRateObject):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::setAll):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::markAggregate):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::putProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
        (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        * bridge/qt/qt_runtime.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        * bridge/runtime_root.h:
        * dom/Document.h:

2011-01-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Make ContextShadow code cross-platform
        https://bugs.webkit.org/show_bug.cgi?id=51312

        Add a new class, ShadowBlur, that contains most of the
        code from ContextShadow, but is fully cross-platform.
        It depends on one new method, GraphicsContext::clipBounds(),
        which platforms will have to implement.
        
        Add ShadowBlur to the Mac Xcode project, but don't use it
        anywhere yet.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::clipBounds):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ShadowBlur.cpp: Added.
        (WebCore::roundUpToMultipleOf32):
        (WebCore::ScratchBuffer::ScratchBuffer):
        (WebCore::ScratchBuffer::getScratchBuffer):
        (WebCore::ScratchBuffer::scheduleScratchBufferPurge):
        (WebCore::ScratchBuffer::timerFired):
        (WebCore::ScratchBuffer::clearScratchBuffer):
        (WebCore::ScratchBuffer::shared):
        (WebCore::ShadowBlur::ShadowBlur):
        (WebCore::ShadowBlur::blurLayerImage):
        (WebCore::ShadowBlur::adjustBlurDistance):
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        (WebCore::ShadowBlur::beginShadowLayer):
        (WebCore::ShadowBlur::endShadowLayer):
        (WebCore::ShadowBlur::drawRectShadow):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::clipBounds):
        * platform/graphics/ShadowBlur.h: Added.
        (WebCore::ShadowBlur::setShadowsIgnoreTransforms):
        (WebCore::ShadowBlur::shadowsIgnoreTransforms):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipBounds):

2011-01-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        CSS3 gradients with em-based stops fail to repaint when font size changes
        https://bugs.webkit.org/show_bug.cgi?id=51845
        
        Mark as uncacheable gradidients whose color stops depend on font size,
        and don't attempt to put these into CSSImageGeneratorValue's image cache.
        This means we return a new gradient each time, which is fairly cheap, and
        fixes repaint issues under changing font size.

        Test: fast/repaint/gradients-em-stops-repaint.html

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        (WebCore::CSSGradientValue::isCacheable):
        * css/CSSGradientValue.h:

2011-01-29  Geoffrey Garen  <ggaren@apple.com>

        Undo try to fix the Qt build.
        
        My guess didn't work.

        * WebCore.pro:

2011-01-29  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Qt build.

        * WebCore.pro: Added platform/text/CharacterNames.h.

2011-01-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Some more Heap cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=53357
        
        Updated for JavaScriptCore changes.

        * bindings/js/ScriptGCEvent.cpp:
        (WebCore::ScriptGCEvent::getHeapSize):

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

        Reviewed by Daniel Bates.

        Fix XSSFilter crash when extracting the source for a token twice
        https://bugs.webkit.org/show_bug.cgi?id=53368

        Previously, it was unsafe to extract the source for the same token
        twice because the HTMLSourceTracker would advance its internal
        representation of the SegmentedString.  This patch introduces a cache
        to make calling HTMLSourceTracker::sourceForToken multiple times safe.

        * html/parser/HTMLSourceTracker.cpp:
        (WebCore::HTMLSourceTracker::end):
        (WebCore::HTMLSourceTracker::sourceForToken):
        * html/parser/HTMLSourceTracker.h:

2011-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Fix fat build for both 32-bit and 64-bit under llvm-gcc 4.2
        https://bugs.webkit.org/show_bug.cgi?id=53386

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::elasticDeltaForReboundDelta):
        (WebCore::scrollWheelMultiplier):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorMac::beginScrollGesture):
        (WebCore::roundTowardZero):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):

2011-01-29  Daniel Bates  <dbates@rim.com>

        Reviewed by Maciej Stachowiak.

        Remove reference to ${CMAKE_SOURCE_DIR}/Source in CMake files
        https://bugs.webkit.org/show_bug.cgi?id=53382

        Our file system hierarchy ensures that CMAKE_SOURCE_DIR is defined to be /Source.
        So, ${CMAKE_SOURCE_DIR}/Source evaluates to the non-existent directory /Source/Source.
        Therefore, we should remove such references.

        * CMakeLists.txt:

2011-01-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Fix 32-bit build on the Mac.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::roundTowardZero):
        (WebCore::roundToDevicePixelTowardZero):
        Use floats instead of doubles to avoid double-to-float conversion
        issues.

2011-01-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Barth.

        Use clampToInteger() functions in a few places
        https://bugs.webkit.org/show_bug.cgi?id=53363
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Use clampToInteger() for z-index.
        (WebCore::CSSStyleSelector::createTransformOperations): Use clampToPositiveInteger().
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp: Ditto.
        (WebCore::PerspectiveTransformOperation::blend): Ditto.

2011-01-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Move CharacterNames.h into WTF directory
        https://bugs.webkit.org/show_bug.cgi?id=49618

        * ForwardingHeaders/wtf/unicode/CharacterNames.h: Added.
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        * bindings/cpp/WebDOMHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * dom/Position.cpp:
        * dom/SelectElement.cpp:
        * editing/CompositeEditCommand.cpp:
        * editing/Editor.cpp:
        * editing/HTMLInterchange.cpp:
        * editing/InsertTextCommand.cpp:
        * editing/MarkupAccumulator.cpp:
        * editing/TextIterator.cpp:
        * editing/VisibleSelection.cpp:
        * editing/htmlediting.cpp:
        * editing/htmlediting.h:
        * editing/markup.cpp:
        * html/FTPDirectoryDocument.cpp:
        * html/HTMLFormControlElement.cpp:
        * html/parser/HTMLTreeBuilder.cpp:
        * loader/appcache/ManifestParser.cpp:
        * platform/chromium/PopupMenuChromium.cpp:
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        * platform/graphics/GlyphPageTreeNode.cpp:
        * platform/graphics/StringTruncator.cpp:
        * platform/graphics/mac/ComplexTextController.cpp:
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        * platform/mac/PasteboardMac.mm:
        * platform/text/TextCodecICU.cpp:
        * platform/text/mac/TextCodecMac.cpp:
        * platform/text/transcoder/FontTranscoder.cpp:
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderText.cpp:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTreeAsText.cpp:
        * rendering/break_lines.cpp:
        * rendering/mathml/RenderMathMLOperator.h:
        * websockets/WebSocketHandshake.cpp:
        * wml/WMLTableElement.cpp:

2011-01-29  Dan Winship  <danw@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] Remove HAVE_LIBSOUP_2_29_90 conditionals; we depend on
        libsoup 2.33.1 now.
        https://bugs.webkit.org/show_bug.cgi?id=50675

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::defaultCookieJar):
        (WebCore::setCookies):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::prepareForURL):
        (WebCore::restartedCallback):
        (WebCore::startHttp):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessage):
        (WebCore::ResourceRequest::toSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage):

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

        Reviewed by Daniel Bates.

        XSSFilter should replace URLs with about:blank instead of the empty string
        https://bugs.webkit.org/show_bug.cgi?id=53370

        Using the empty string will make the URL complete to the current
        document's URL, which isn't really what we want.  Instead, we want to
        use about:blank, which is safe.

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterObjectToken):
        (WebCore::XSSFilter::filterEmbedToken):

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

        Reviewed by Daniel Bates.

        XSSFilter should pass xssAuditor/script-tag-addslashes*
        https://bugs.webkit.org/show_bug.cgi?id=53365

        We need to canonicalize strings to avoid being tricked by addslashes.

        * html/parser/XSSFilter.cpp:
        (WebCore::HTMLNames::isNonCanonicalCharacter):
            - This function is copied from the XSSAuditor (with some tweaks).
              We'll eventually remove the XSSAuditor once we've got XSSFilter
              working properly.
        (WebCore::HTMLNames::canonicalize):
        (WebCore::HTMLNames::decodeURL):
        (WebCore::XSSFilter::isContainedInRequest):

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

        Reviewed by Daniel Bates.

        XSSFilter should pass xssAuditor/script-tag-with-source-same-host.html
        and xssAuditor/script-tag-post-*
        https://bugs.webkit.org/show_bug.cgi?id=53364

        We're supposed to allow loading same-origin resources even if they
        appear as part of the request.

        Also, we're supposed to look at the POST data too.  :)

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::eraseAttributeIfInjected):
        (WebCore::XSSFilter::isSameOriginResource):
            - Copy/paste from XSSAuditor::isSameOriginResource.  We'll
              eventually remove the XSSAuditor version when XSSFilter is done.
        * html/parser/XSSFilter.h:

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

        Reviewed by Daniel Bates.

        XSSFilter should pass 16 of the xssAuditor/script-tag* tests
        https://bugs.webkit.org/show_bug.cgi?id=53362

        Turns out we need to replace the src attribute of script tags with
        about:blank to avoid loading the main document URL as a script.  Also,
        move misplaced return statement that was triggering the console message
        too often.

        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::appendToAttributeValue):
        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterScriptToken):
        (WebCore::XSSFilter::eraseAttributeIfInjected):
        * html/parser/XSSFilter.h:

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

        Downloads in WK2 on Windows should write resume data to bundle
        https://bugs.webkit.org/show_bug.cgi?id=53282
        <rdar://problem/8753077>

        Reviewed by Alice Liu.

        * WebCore.vcproj/WebCore.vcproj:
        Added new files to project.

        * platform/network/cf/DownloadBundle.h: Added.
        * platform/network/win/DownloadBundleWin.cpp: Added.
        (WebCore::DownloadBundle::magicNumber):
        Moved from WebKit's WebDownload so that WebKit and WebKit2 can share
        it.
        (WebCore::DownloadBundle::fileExtension):
        Ditto.
        (WebCore::DownloadBundle::appendResumeData):
        Ditto - but modified to return bool rather than HRESULT and to clean up
        whitespace.
        (WebCore::DownloadBundle::extractResumeData):
        Ditto - modified to clean up whitespace.

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

        Unreviewed, rolling out r77050.
        http://trac.webkit.org/changeset/77050
        https://bugs.webkit.org/show_bug.cgi?id=53371

        Caused a crash in Chromium's test_shell_tests (Requested by
        rniwa on #webkit).

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::document):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):
        * html/parser/HTMLTreeBuilder.h:

2011-01-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
        https://bugs.webkit.org/show_bug.cgi?id=48719

        It's unclear exactly what the Peacekeeper benchmark is testing,
        because I haven't found a way to run it myself.

        However, I constructed a benchmark which shows at least one possible slow point.
        The HTML5 spec talks about creating a new document for every time we use
        the fragment parsing algorithm.  Document() it turns out, it a huge bloated
        mess, and the constructor and destructor do a huge amount of work.
        To avoid constructing (or destructing) documents for each innerHTML call,
        this patch adds a shared dummy document used by all innerHTML calls.

        This patch brings us from 7x slower than Safari 5 on tiny-innerHTML
        to only 1.5x slower than Safari 5.  I'm sure there is more work to do here.

        Saving a shared Document like this is error prone.  Currently
        DummyDocumentFactory::releaseDocument() calls removeAllChildren()
        in an attempt to clear the Document's state. However it's possible
        that that call is not sufficient and we'll have future bugs here.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::DummyDocumentFactory::createDummyDocument):
        (WebCore::DummyDocumentFactory::releaseDocument):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::document):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):
        * html/parser/HTMLTreeBuilder.h:

2011-01-28  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        Gesture API: Don't use current gesture status to set "forceUserGesture" parameter when calling ScriptController::executeScript.
        The "forceUserGesture" parameter should be only set when you are definitely sure that the running script is from a hyper-link.
        https://bugs.webkit.org/show_bug.cgi?id=53244

        Test: fast/events/popup-blocked-from-iframe-src.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):

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

        Reviewed by Gavin Barraclough.

        Add various clampToInt() methods to MathExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=52910

        Use clampToInteger() from MathExtras.h

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

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

        Unreviewed, rolling out r77006 and r77020.
        http://trac.webkit.org/changeset/77006
        http://trac.webkit.org/changeset/77020
        https://bugs.webkit.org/show_bug.cgi?id=53360

        "Broke Windows tests" (Requested by rniwa on #webkit).

        * ForwardingHeaders/runtime/WriteBarrier.h: Removed.
        * WebCore.exp.in:
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markDOMNodesForDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::markDOMNodeWrapper):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):
        (WebCore::JSDOMGlobalObject::setInjectedScript):
        (WebCore::JSDOMGlobalObject::injectedScript):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
        (WebCore::getDOMConstructor):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::DialogHandler::dialogCreated):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        (WebCore::JSDOMWindowShell::markChildren):
        (WebCore::JSDOMWindowShell::unwrappedObject):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::window):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::createAccelerationObject):
        (WebCore::createRotationRateObject):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::setAll):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::markAggregate):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::putProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
        (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        * bridge/qt/qt_runtime.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        * bridge/runtime_root.h:
        * dom/Document.h:

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

        Reviewed by Eric Seidel.

        XSSFilter should log to the console when it blocks something
        https://bugs.webkit.org/show_bug.cgi?id=53354

        This patch refactors a bunch of methods in XSSFilter to return a bool
        indicating whether they blocked anything.  Using this bool, we decide
        whether to log to the console.  We're using the same log message as the
        XSSAuditor, but it seems likely we can improve this message in the
        future (especially by piping in the correct line number, which is now
        accessible via the parser).

        * html/parser/XSSFilter.cpp:
        (WebCore::HTMLNames::isNameOfInlineEventHandler):
        (WebCore::XSSFilter::filterToken):
        (WebCore::XSSFilter::filterTokenInitial):
        (WebCore::XSSFilter::filterTokenAfterScriptStartTag):
        (WebCore::XSSFilter::filterScriptToken):
        (WebCore::XSSFilter::filterObjectToken):
        (WebCore::XSSFilter::filterEmbedToken):
        (WebCore::XSSFilter::filterAppletToken):
        (WebCore::XSSFilter::filterMetaToken):
        (WebCore::XSSFilter::filterBaseToken):
        (WebCore::XSSFilter::eraseInlineEventHandlersIfInjected):
        * html/parser/XSSFilter.h:

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

        Reviewed by Daniel Bates.

        Wire up settings->xssAuditorEnabled to XSSFilter
        https://bugs.webkit.org/show_bug.cgi?id=53345

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::XSSFilter):
        (WebCore::XSSFilter::filterToken):
        * html/parser/XSSFilter.h:

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

        Reviewed by Daniel Bates.

        Teach XSSFilter about <meta> and <base> tags
        https://bugs.webkit.org/show_bug.cgi?id=53339

        I'm not 100% sure we need to block <meta http-equiv>, but it seems
        prudent given how powerful that attribute is.  We definitely need to
        block injection of <base href> because that can redirect script tags
        that use relative URLs.

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterToken):
        (WebCore::XSSFilter::filterMetaToken):
        (WebCore::XSSFilter::filterBaseToken):
        * html/parser/XSSFilter.h:

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

        Reviewed by Daniel Bates.

        Teach XSSFilter about <applet>
        https://bugs.webkit.org/show_bug.cgi?id=53338

        HTML5 is pretty light on information about how the <applet> tag works.
        According to this site:

        http://download.oracle.com/javase/1.4.2/docs/guide/misc/applet.html

        The "code" and "object" attributes are the essential attributes for
        determining which piece of Java to run.  We might need to expand to the
        codebase and archive attributes at some point, but hopefully code and
        object will be sufficient.

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterToken):
        (WebCore::XSSFilter::filterAppletToken):
        * html/parser/XSSFilter.h:

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

        Reviewed by Daniel Bates.

        Teach the XSSFilter about object and embed tags
        https://bugs.webkit.org/show_bug.cgi?id=53336

        For <object> and <embed>, we filter out attribute values that either
        indicate which piece of media to load or which plugin to load.  In a
        perfect world, we'd only need to filter out the URLs of the media, but
        some plug-ins (like Flash) have lots of fun places you can hide the
        URL (e.g., the "movie" <param>).

        * html/parser/XSSFilter.cpp:
        (WebCore::XSSFilter::filterToken):
        (WebCore::XSSFilter::filterScriptToken):
        (WebCore::XSSFilter::filterObjectToken):
        (WebCore::XSSFilter::filterEmbedToken):
        (WebCore::XSSFilter::eraseAttributeIfInjected):
        * html/parser/XSSFilter.h:

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

        Fix Qt build.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
        (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
        (JSC::Bindings::QtRuntimeMetaMethod::connectGetter):
        (JSC::Bindings::QtRuntimeMetaMethod::disconnectGetter):
        * bridge/qt/qt_runtime.h:

2011-01-28  Antti Koivisto  <antti@apple.com>

        Reviewed by Simon Fraser.

        CSS styles are shared based on uninitialized property values
        https://bugs.webkit.org/show_bug.cgi?id=53285
        
        Null test.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::mappedMapsEquivalent):

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

        Reviewed by Geoffrey Garen.

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        Update WebCore to the new marking apis, correct bindings
        codegen. 

        * ForwardingHeaders/runtime/WriteBarrier.h: Added.
        * WebCore.exp.in:
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::globalData):
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markDOMNodesForDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::markDOMNodeWrapper):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):
        (WebCore::JSDOMGlobalObject::setInjectedScript):
        (WebCore::JSDOMGlobalObject::injectedScript):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):
        (WebCore::getDOMConstructor):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::DialogHandler::dialogCreated):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::JSDOMWindowShell):
        (WebCore::JSDOMWindowShell::setWindow):
        (WebCore::JSDOMWindowShell::markChildren):
        (WebCore::JSDOMWindowShell::unwrappedObject):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::window):
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::setAll):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeChain):
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::markAggregate):
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::putProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.h:

2011-01-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Keyboard scrolling doesn’t work in WebKit2
        <rdar://problem/8909672>

        * platform/mac/ScrollAnimatorMac.mm:
        (-[ScrollAnimationHelperDelegate convertSizeToBacking:]):
        (-[ScrollAnimationHelperDelegate convertSizeFromBacking:]):
        Add additional necessary delegate methods.

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

        Reviewed by Dan Bernstein.

        Re-land this patch with the missing null check that caused crashes in layout tests.

        Changing cursor style has no effect until the mouse moves
        https://bugs.webkit.org/show_bug.cgi?id=14344
        rdar://problem/7563712

        No tests added because we don't have infrastructure for testing actual cursor
        changes (as opposed to cursor style computation) at this time. We might add it later.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon): Added.
        * page/EventHandler.h: Ditto.

        * rendering/RenderObject.cpp:
        (WebCore::areNonIdenticalCursorListsEqual): Added.
        (WebCore::areCursorsEqual): Added.
        (WebCore::RenderObject::styleDidChange): Call dispatchFakeMouseMoveEventSoon if
        cursor styles changed.

2011-01-28  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Eric Seidel.

        We should hold RefPtrs to SVG font faces
        https://bugs.webkit.org/show_bug.cgi?id=53270

        Test: svg/custom/use-multiple-on-nested-disallowed-font.html

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontFaceSource.h:
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::associatedFontElement):
        * svg/SVGFontFaceElement.h:

2011-01-28  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        uniformN*v should generate INVALID_VALUE of the array size is not a multiple of N
        https://bugs.webkit.org/show_bug.cgi?id=53306

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateUniformMatrixParameters):

2011-01-28  Tom Sepez  <tsepez@chromium.org>

        Reviewed by Eric Seidel.

        NULL pointer crash in TextIterator::handleTextBox()
        https://bugs.webkit.org/show_bug.cgi?id=53267

        Test: fast/css/rtl-nth-child-first-letter-crash.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextBox):

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

        Reviewed by Kenneth Russell.

        [chromium] Remove a spurious diagnostic CRASH check.
        https://bugs.webkit.org/show_bug.cgi?id=52379

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::invalidateRect):

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

        Reviewed by Sam Weinig.

        <rdar://problem/4761512> <select> can't display right-to-left (rtl) languages
        https://bugs.webkit.org/show_bug.cgi?id=19785

        Changed <select> pop-up menus on Mac OS X Snow Leopard and later to have their items aligned in the
        direction corresponding to the writing direction of the <select> element, with the checkmarks
        on the "start" side, and use the <option>'s writing direction rather than "natural". Made the
        pop-up button match the menu by adding a Chrome boolean function, selectItemAlignmentFollowsMenuWritingDirection(),
        which returns true for this pop-up behavior.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added.
        * manual-tests/pop-up-alignment-and-direction.html: Added.
        * page/Chrome.cpp:
        (WebCore::Chrome::selectItemAlignmentFollowsMenuWritingDirection): Added. Calls through to the
        client.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/PopupMenuStyle.h:
        (WebCore::PopupMenuStyle::PopupMenuStyle): Added hasTextDirectionOverride parameter and member
        variable initialization.
        (WebCore::PopupMenuStyle::hasTextDirectionOverride): Added this accessor.
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenuMac::populate): Set the pop-up's layout direction and items' text alignment
        to match the menu's writing direction. Set items' writing direction and direction override
        according to their styles.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList): Removed unncesaary initialization of a smart pointer.
        (WebCore::RenderMenuList::adjustInnerStyle): If the alignment of items in the menu follows the
        menu's writing direction, use that alignment for the button as well. Also in this mode, use the
        item's writing direction and override setting.
        (WebCore::RenderMenuList::setTextFromOption): Store the option element's style.
        (WebCore::RenderMenuList::itemStyle): Pass the text direction override value.
        (WebCore::RenderMenuList::menuStyle): Ditto. Also use the button's direction, not the inner text's.
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::menuStyle): Pass the text direction override value.

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

        Reviewed by Daniel Bates.

        Teach XSSFilter how to filter <script> elements
        https://bugs.webkit.org/show_bug.cgi?id=53279

        This patch adds the ability for the XSSFilter to block injected
        <script> elements.  Handling script elements is slightly subtle because
        these elements act very differently depending on whether they have a
        src attribute.
        
        In the "src case", which check whether the src attribute was present in
        the request.  In the "non-src case", we check whether the start tag and
        the body of the script element was included in the request.  Checking
        for the whole start tag means we miss out on some attribute splitting
        attacks inside of script tags, but that doesn't seem like that big a
        deal.

        This patch also introduces some amount of state into the XSSFilter
        because inline script elements span multiple tokens.  There's a lot of
        tuning and optimization left in these cases, some of which I've noted
        with FIXMEs.

        To test this patch, I played around with some of the existing
        XSSAuditor tests.  Hopefully I'll be able to run the test suite more
        systematically in the future.

        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::eraseCharacters):
        (WebCore::HTMLToken::eraseValueOfAttribute):
        * html/parser/XSSFilter.cpp:
        (WebCore::HTMLNames::hasName):
        (WebCore::HTMLNames::findAttributeWithName):
        (WebCore::HTMLNames::isNameOfScriptCarryingAttribute):
        (WebCore::XSSFilter::XSSFilter):
        (WebCore::XSSFilter::filterToken):
        (WebCore::XSSFilter::filterTokenAfterScriptStartTag):
        (WebCore::XSSFilter::filterScriptToken):
        (WebCore::XSSFilter::snippetForRange):
        (WebCore::XSSFilter::snippetForAttribute):
        * html/parser/XSSFilter.h:

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

        Reviewed by Daniel Bates.

        Sketch out new XSS filter design (disabled by default)
        https://bugs.webkit.org/show_bug.cgi?id=53205

        This patch adds a basic sketch of the new XSS filter design.  Rather
        than watching scripts as they execute, in this design, we watch tokens
        emitted by the tokenizer.  We then map the tokens directly back into
        input characters, which lets us skip all the complicated logic related
        to HTML entities and double-decoding of JavaScript URLs.

        This patch contains only the bare essentially machinery.  I'll add more
        in future patches and eventually remove the previous code once this
        code is up and running correctly.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::sourceForToken):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/XSSFilter.cpp: Added.
        * html/parser/XSSFilter.h: Added.

2011-01-28  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
        https://bugs.webkit.org/show_bug.cgi?id=53271

        Reapplying this patch with the change that the second ASSERT in 
        RootObject::removeRuntimeObject was changed to use
        .uncheckedGet() instead of the failing .get().  The object in question
        could be in the process of being GC'ed.  The get() call will not return
        such an object while the uncheckedGet() call will return the (unsafe) 
        object.  This is the behavior we want.

        Precautionary change.
        Changed RootObject to use WeakGCMap instead of HashSet.
        Found will looking for another issue, but can't produce a test case
        that is problematic.  THerefore there aren't any new tests.

        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::addRuntimeObject):
        (JSC::Bindings::RootObject::removeRuntimeObject):
        * bridge/runtime_root.h:

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

        Notify CACFLayerTreeHost when the context is flushed

        LegacyCACFLayerTreeHost was keeping this a secret, which meant that WebCore's animation
        timers were never starting.

        Fixes <http://webkit.org/b/53302> [Windows 7 Release Tests] changesets 76853, 76856, and
        76858 broke ~36 animations, compositing, and transitions tests

        Reviewed by Sam Weinig.

        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp:
        (WebCore::LegacyCACFLayerTreeHost::contextDidChange): Call up to the base class after we
        start our render timer.

2011-01-28  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        Remove dead code that tried to map from CSS values to parser values
        https://bugs.webkit.org/show_bug.cgi?id=53318

        * css/CSSFunctionValue.cpp:
        * css/CSSFunctionValue.h:
        * css/CSSPrimitiveValue.cpp:
        * css/CSSPrimitiveValue.h:
        * css/CSSValue.h:
        * css/CSSValueList.cpp:
        * css/CSSValueList.h:

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

        Reviewed by Adam Roben.

        Some drag and drop tests fail since r76824
        https://bugs.webkit.org/show_bug.cgi?id=53304

        There were '||' instead of '&&' in the checks for valid
        clipboard content.
        
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::getData):
        (WebCore::ClipboardWin::types):
        (WebCore::ClipboardWin::files):

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

        [GTK] AudioProcessingEvent.h and JSJavaScriptAudioNode.h: No such file or directory
        https://bugs.webkit.org/show_bug.cgi?id=52889

        Build fix for WebAudio. Include WebAudio source files on the source
        list when WebAudio is enabled.

        * GNUmakefile.am: Include missing source files.

2011-01-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Add basic rubber banding support
        <rdar://problem/8219429>
        https://bugs.webkit.org/show_bug.cgi?id=53277

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        Pass gesture events to the FrameView.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleGestureEvent):
        * platform/ScrollAnimator.h:
        Add stubbed out implementation.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::overhangAmount):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::ScrollableArea):
        (WebCore::ScrollableArea::handleGestureEvent):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::constrainsScrollingToContentEdge):
        (WebCore::ScrollableArea::setConstrainsScrollingToContentEdge):
        Move constrains scrolling bit to ScrollableArea from ScrollView.

        (WebCore::ScrollableArea::contentsSize):
        (WebCore::ScrollableArea::overhangAmount):
        Add additional virtual functions for information needed by the animator.

        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaX):
        (WebCore::ScrollAnimatorMac::immediateScrollByDeltaY):
        (WebCore::elasticDeltaForTimeDelta):
        (WebCore::elasticDeltaForReboundDelta):
        (WebCore::reboundDeltaForElasticDelta):
        (WebCore::scrollWheelMultiplier):
        (WebCore::ScrollAnimatorMac::handleWheelEvent):
        (WebCore::ScrollAnimatorMac::handleGestureEvent):
        (WebCore::ScrollAnimatorMac::pinnedInDirection):
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching):
        (WebCore::ScrollAnimatorMac::smoothScrollWithEvent):
        (WebCore::ScrollAnimatorMac::beginScrollGesture):
        (WebCore::ScrollAnimatorMac::endScrollGesture):
        (WebCore::ScrollAnimatorMac::snapRubberBand):
        (WebCore::roundTowardZero):
        (WebCore::roundToDevicePixelTowardZero):
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        Implement basic rubber banding.

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

        Reviewed by Anders Carlsson.

        Changing unicode-bidi doesn’t force layout
        https://bugs.webkit.org/show_bug.cgi?id=53311

        Test: fast/dynamic/unicode-bidi.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): Return a layout difference if unicode-bidi values differ.

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

        Reviewed by Kent Tamura.

        Change HTMLInputElement-derived parts of media element shadow DOM to use shadowPseudoId.
        https://bugs.webkit.org/show_bug.cgi?id=53122

        This is the first step in converting HTMLMediaElement to the new shadow DOM.

        Should not regress any existing tests. No observable change in behavior.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId): Removed now-unnecessary hard-coded pseudo-element selectors.
        (WebCore::nameToPseudoTypeMap): Ditto.
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h: Ditto.
        * css/mediaControls.css: Added proper initial values, now that elements use the proper selector pipeline.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::MediaControlInputElement): Removed the switch statement,
            which is now replaced with virtual shadowPseudoId on each corresponding class.
        (WebCore::MediaControlInputElement::styleForElement): Changed to use element pipeline.
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement): Changed to set
            display type in constructor.
        (WebCore::MediaControlMuteButtonElement::create): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlMuteButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement): Added
            to disambiguate from the MediaControlMuteButtonElement.
        (WebCore::MediaControlVolumeSliderMuteButtonElement::create): Added.
        (WebCore::MediaControlVolumeSliderMuteButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlPlayButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement): Added.
        (WebCore::MediaControlSeekForwardButtonElement::create): Added.
        (WebCore::MediaControlSeekForwardButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement): Added.
        (WebCore::MediaControlSeekBackButtonElement::create): Added.
        (WebCore::MediaControlSeekBackButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): Added.
        (WebCore::MediaControlRewindButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlReturnToRealtimeButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlTimelineElement::shadowPseudoId): Added.
        (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlVolumeSliderElement::shadowPseudoId): Added.
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlFullscreenButtonElement::shadowPseudoId): Added.
        * rendering/MediaControlElements.h:
        (WebCore::MediaControlSeekForwardButtonElement::isForwardButton): Added.
        (WebCore::MediaControlSeekBackButtonElement::isForwardButton): Added.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createMuteButton): Changed to use new constructor.
        (WebCore::RenderMedia::createSeekBackButton): Ditto.
        (WebCore::RenderMedia::createSeekForwardButton): Ditto.
        (WebCore::RenderMedia::createVolumeSliderMuteButton): Ditto.
        * rendering/style/RenderStyleConstants.h: Removed constants that are no longer used.

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

        Reviewed by Eric Carlson.

        Split MediaControls out of RenderMedia.
        https://bugs.webkit.org/show_bug.cgi?id=53252

        Near-mechanical moving of stuff, no change in behavior, thus no new tests.

        * Android.mk: Added MediaControls to build system.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::defaultEventHandler): Changed to forward events to MediaControls.
        * html/shadow/MediaControls.cpp: Copied all controls-related methods from
            Source/WebCore/rendering/RenderMedia.cpp, pulled them into their own class called MediaControls. 
        * html/shadow/MediaControls.h: Ditto from Source/WebCore/rendering/RenderMedia.h.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler): Changed to use MediaControls.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia): Moved relevant constructor initializers out to MediaControls.
        (WebCore::RenderMedia::destroy): Changed to use MediaControls.
        (WebCore::RenderMedia::styleDidChange): Ditto.
        (WebCore::RenderMedia::layout): Ditto.
        (WebCore::RenderMedia::updateFromElement): Ditto.
        * rendering/RenderMedia.h: Updated defs accordingly and removed player() accessor, which
            is only used by sub-class RenderVideo.
        (WebCore::RenderMedia::controls): Added.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::~RenderVideo): Changed to access MediaPlayer* directly from mediaElement().
        (WebCore::RenderVideo::calculateIntrinsicSize): Ditto.
        (WebCore::RenderVideo::paintReplaced): Ditto.
        (WebCore::RenderVideo::updatePlayer): Ditto.
        (WebCore::RenderVideo::supportsAcceleratedRendering): Ditto.
        (WebCore::RenderVideo::acceleratedRenderingStateChanged): Ditto.

2011-01-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: allow remote debugging with front-end
        served from the cloud.
        https://bugs.webkit.org/show_bug.cgi?id=53303

        * inspector/front-end/inspector.js:

2011-01-28  Aparna Nandyal  <aparna.nand@wipro.com>

        Reviewed by Andreas Kling.

        Setting value of m_PressedPos to make scrolling smooth

        Page scroll popup menu "Scroll here" option not working when cliking above scroll slider/handler.
        https://bugs.webkit.org/show_bug.cgi?id=51349

        The value of m_PressedPos was getting set before moveThumb() call
        in all other scenarios except when "Scroll Here" option is used.
        Hence scrolling with this option was not as expected even in cases
        where scrolling was happening. The thumb would move in unexpected
        direction. m_PressedPos is now set to pressed position so delta is
        calculated.
        Unable to write a test case as the test needs to click on "Scroll
        Here" option of context sensitive menu and QTest is unable to do it.
        Besides no new functionality introduced.

        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::contextMenu):

2011-01-28  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] add JSON schema for extensions API
        https://bugs.webkit.org/show_bug.cgi?id=53236

        * inspector/front-end/ExtensionAPISchema.json: Added.

2011-01-27  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Remove _LENGTH enumerants
        https://bugs.webkit.org/show_bug.cgi?id=53259

        * html/canvas/WebGLRenderingContext.cpp: Remove queries for *LENGTH.
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        * html/canvas/WebGLRenderingContext.idl: Remove *LENGTH.

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: syntax highlight inline JS and CSS in HTML resources
        https://bugs.webkit.org/show_bug.cgi?id=30831

        * inspector/front-end/SourceHTMLTokenizer.js:
        (WebInspector.SourceHTMLTokenizer):
        (WebInspector.SourceHTMLTokenizer.prototype.set line):
        (WebInspector.SourceHTMLTokenizer.prototype.nextToken):
        * inspector/front-end/SourceHTMLTokenizer.re2js:

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: [STYLES] Up/Down-suggestion breaks an existing keyword
        https://bugs.webkit.org/show_bug.cgi?id=53295

        Select the current word suffix before switching to the next suggestion.

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

2011-01-28  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix dist compilation for the release
        https://bugs.webkit.org/show_bug.cgi?id=53290

        * GNUmakefile.am: Added inspector files to the extra dist.

2011-01-28  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Andreas Kling.

        Const-correct HTMLSelectElement and WebSelectElement
        https://bugs.webkit.org/show_bug.cgi?id=53293

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::value): const.
        * html/HTMLSelectElement.h:

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

        Unreviewed, rolling out r76893.
        http://trac.webkit.org/changeset/76893
        https://bugs.webkit.org/show_bug.cgi?id=53287

        It made some tests crash on GTK and Qt debug bots (Requested
        by Ossy on #webkit).

        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::addRuntimeObject):
        (JSC::Bindings::RootObject::removeRuntimeObject):
        * bridge/runtime_root.h:

2011-01-27  Greg Coletta  <greg.coletta@nokia.com>

        Reviewed by Laszlo Gombos.

        Get rid of prefix header dependency for WebKit2 build system
        https://bugs.webkit.org/show_bug.cgi?id=50174

        Guard EmptyProtocalDefinitions.h to make sure it's not included twice.

        * platform/mac/EmptyProtocolDefinitions.h:

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

        Reviewed by Dan Bernstein.

        Recalc table sections if needed before calculating the first line
        box baseline.
        https://bugs.webkit.org/show_bug.cgi?id=53265

        When we try to calculate the baseline position of a table cell,
        we recurse through all the child sibling boxes (when children are
        non inline) and add their first linebox baseline values. If one of
        the children is a table with pending section recalc, we will access
        wrong table section values. We recalc table sections if it is needed.

        Test: fast/table/recalc-section-first-body-crash-main.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::firstLineBoxBaseline):

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

        Reviewed by Kenneth Russell.

        [chromium] Add CRASH calls to further debug tiled compositor memcpy crash.
        https://bugs.webkit.org/show_bug.cgi?id=52379

        Test: LayoutTests/compositing (to verify these weren't triggered)

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::invalidateRect):
        (WebCore::LayerTilerChromium::update):

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

        Reviewed by Pavel Feldman.

        Web Inspector: [STYLES] Cancelled suggestion of a property name results in a visual artifact
        https://bugs.webkit.org/show_bug.cgi?id=53242

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

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

        Unreviewed, rolling out r76891.
        http://trac.webkit.org/changeset/76891
        https://bugs.webkit.org/show_bug.cgi?id=53280

        Makes every layout test crash (Requested by othermaciej on
        #webkit).

        * page/EventHandler.cpp:
        * page/EventHandler.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleDidChange):

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

        Unreviewed, rolling out r76839.
        http://trac.webkit.org/changeset/76839
        https://bugs.webkit.org/show_bug.cgi?id=49744

        broke pixel tests

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):

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

        Reviewed by Darin Adler.

        contentEditable formatBlock crashes on divs with contenteditable="false"
        https://bugs.webkit.org/show_bug.cgi?id=53263

        Check if editableRootForPosition returns null for position.

        Test: editing/execCommand/format-block-contenteditable-false.html

        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange):

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

        Reviewed by Darin Adler.

        Remove RenderMedia members that aren't used.
        https://bugs.webkit.org/show_bug.cgi?id=53245

        Refactoring, no change in behavior, so no new tests.

        * rendering/RenderMedia.h: Removed unused member variables.

2011-01-27  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Potentially Unsafe HashSet of RuntimeObject* in RootObject definition
        https://bugs.webkit.org/show_bug.cgi?id=53271

        Precautionary change.
        Changed RootObject to use WeakGCMap instead of HashSet.
        Found will looking for another issue, but can't produce a test case
        that is problematic.  THerefore there aren't any new tests.

        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        (JSC::Bindings::RootObject::addRuntimeObject):
        (JSC::Bindings::RootObject::removeRuntimeObject):
        * bridge/runtime_root.h:

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

        Reviewed by James Robinson.

        Rename Typed Array slice() to subset()
        https://bugs.webkit.org/show_bug.cgi?id=53273

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::constructArrayBufferView):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
        * html/canvas/Float32Array.cpp:
        (WebCore::Float32Array::subset):
        * html/canvas/Float32Array.h:
        * html/canvas/Float32Array.idl:
        * html/canvas/Int16Array.cpp:
        (WebCore::Int16Array::subset):
        * html/canvas/Int16Array.h:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.cpp:
        (WebCore::Int32Array::subset):
        * html/canvas/Int32Array.h:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.cpp:
        (WebCore::Int8Array::subset):
        * html/canvas/Int8Array.h:
        * html/canvas/Int8Array.idl:
        * html/canvas/TypedArrayBase.h:
        (WebCore::TypedArrayBase::subsetImpl):
        * html/canvas/Uint16Array.cpp:
        (WebCore::Uint16Array::subset):
        * html/canvas/Uint16Array.h:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.cpp:
        (WebCore::Uint32Array::subset):
        * html/canvas/Uint32Array.h:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.cpp:
        (WebCore::Uint8Array::subset):
        * html/canvas/Uint8Array.h:
        * html/canvas/Uint8Array.idl:

2011-01-27  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Changing cursor style has no effect until the mouse moves
        https://bugs.webkit.org/show_bug.cgi?id=14344
        rdar://problem/7563712

        No tests added because we don't have infrastructure for testing actual cursor
        changes (as opposed to cursor style computation) at this time. We might add it later.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchFakeMouseMoveEventSoon): Added.
        * page/EventHandler.h: Ditto.

        * rendering/RenderObject.cpp:
        (WebCore::areNonIdenticalCursorListsEqual): Added.
        (WebCore::areCursorsEqual): Added.
        (WebCore::RenderObject::styleDidChange): Call dispatchFakeMouseMoveEventSoon if
        cursor styles changed.

2011-01-27  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Dirk Schulze.

        SVG Use Cycle is not detected
        https://bugs.webkit.org/show_bug.cgi?id=52544

        We should check if SVGUseElement::buildInstanceTree finds problem
        for every child node. If it finds problem for any children we must
        return immediately because otherwise the foundProblem variable may
        be rewritten to false.

        Test: svg/custom/recursive-use2.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildInstanceTree):

2011-01-27  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        texSubImage2D's format/type needs to match the internalformat/type from the previous texImage2D call
        https://bugs.webkit.org/show_bug.cgi?id=53054

        Test: fast/canvas/webgl/tex-sub-image-2d-bad-args.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texSubImage2DBase): Check format/type match.

2011-01-27  Yi Shen  <yi.4.shen@nokia.com>, Tor Arne Vestbø <tor.arne.vestbo@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Add fullscreen media control button for html video
        https://bugs.webkit.org/show_bug.cgi?id=51543

        Implement media control fullscreen button for QtWebKit html5 video.

        * css/mediaControlsQt.css:
        (video::-webkit-media-controls-fullscreen-button):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMediaFullscreenButton):

2011-01-27  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Remove FrameLoader::url() and update callers to use
        Document::url().
        https://bugs.webkit.org/show_bug.cgi?id=41165

        Refactor, no new tests.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::removePendingSheet):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::CachedFrameBase):
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::allowedToLoadFrameURL):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::inspectedURL):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForFrame):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):
        (WebCore::DocumentWriter::deprecatedFrameEncoding):
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        (WebCore::HistoryController::updateForSameDocumentNavigation):
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledHistoryNavigation::fire):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleRefresh):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateControlTints):
        * page/Location.cpp:
        (WebCore::Location::url):
        (WebCore::Location::setProtocol):
        (WebCore::Location::setHost):
        (WebCore::Location::setHostname):
        (WebCore::Location::setPort):
        (WebCore::Location::setPathname):
        (WebCore::Location::setSearch):
        (WebCore::Location::setHash):
        (WebCore::Location::reload):
        * page/Page.cpp:
        (WebCore::Page::goToItem):

2011-01-27  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Adler.

        Fix performance regression in ImageQualityController::objectDestroyed().
        https://bugs.webkit.org/show_bug.cgi?id=52645

        In r72282, I inadvertently introduced this regression by using a
        linear search through the hash map on object destruction.  This was
        because the hash key consisted of both object pointer and layer id,
        but on object destruction we only know the object pointer, requiring
        a search to find all the layers. 
        By replacing the hash map with two nested hash maps, where the outer key
        is the object and the inner key is the layer, we can find all the
        relevant data for an object in one hash lookup.

        * rendering/RenderBoxModelObject.cpp:
        Replace the (object,layer)->size HashMap with object->layer and
        layer->size HashMaps.
        (WebCore::ImageQualityController::isEmpty):
        Implement isEmpty() for the outer HashMap.
        (WebCore::ImageQualityController::removeLayer):
        When a layer is removed, remove it from the inner hash map.
        (WebCore::ImageQualityController::set):
        Implement set():  if the inner map exists, set the layer->size tuple
        directly.  If not, create a new inner map, set the tuple, and insert
        it in the outer map.
        (WebCore::ImageQualityController::objectDestroyed):
        Look up the object in the outer map only.
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        Cosmetic changes for the renamed now-outer hash map.
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        Do both outer and inner hash map lookups.  Call set() to add/update
        entries to the hash maps.  keyDestroyed() is now removeLayer().
        (WebCore::imageQualityController):
        Make the ImageQualityController a file-static global, so it can be
        created and destroyed on the fly.
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        If there is no ImageQualityController, don't call objectDestroyed().
        If it's empty, delete it.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):
        Also pass the Image* as the (void*) layer, since 0 is not a valid
        HashMap key.

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

        Reviewed by James Robinson.

        [chromium] Tiled compositor crashes if compositing turned off mid-paint
        https://bugs.webkit.org/show_bug.cgi?id=53198

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::draw):

2011-01-27  Carol Szabo <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        A corrupted counter tree is created when renderers are added to the
        tree bypassing RenderObject::addChild
        https://bugs.webkit.org/show_bug.cgi?id=51270

        No new tests. This patch reimplements the fix for bugs 43812 and
        51637 and hence all tests are already there as part of the original
        fixes for those bugs.

        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        Removed old workaround as this patch hopefully fixes the real
        problem.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild):
        Removed call to counter updater as it was moved to a lower level.
        (WebCore::RenderObject::destroy):
        Moved attached counter nodes destruction to after the node is
        removed from the tree.
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
        Added notifications to the Counter system such that the
        CounterForest reflects the changes to the RendererTree.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):
        Applied the same changes as for RenderObject::destroy()
        since RenderObject::destroy() is not called from here.

2011-01-27  Adam Roben  <aroben@apple.com>

        Add WKCACFViewLayerTreeHost

        This is a class that derives from CACFLayerTreeHost and uses a WKCACFView to render.

        Fixes <http://webkit.org/b/53251> <rdar://problem/8925496> CACFLayerTreeHost should use
        WKCACFView for rendering

        * WebCore.vcproj/WebCore.vcproj: Added WKCACFViewLayerTreeHost.{cpp,h}.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::acceleratedCompositingAvailable): Make the test window have a
        non-zero size. WKCACFView will always say it can't render if you pass it a 0-sized window,
        so we need a non-empty window to perform a valid test.
        (WebCore::CACFLayerTreeHost::create): First try to create a WKCACFViewLayerTreeHost, then
        fall back to a LegacyCACFLayerTreeHost.
        (WebCore::CACFLayerTreeHost::flushPendingLayerChangesNow): Moved code to react to the
        context flush from here...
        (WebCore::CACFLayerTreeHost::contextDidChange): ...to here. Derived classes are required to
        call this function whenever changes are flushed to the context.

        * platform/graphics/ca/win/CACFLayerTreeHost.h: Added contextDidChange.

        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp:
        (WebCore::LegacyCACFLayerTreeHost::createRenderer):
        (WebCore::LegacyCACFLayerTreeHost::resize):
        Changed to use flushContext instead of flushing the context manually so that we will always
        notify the base class when the context gets flushed.

        (WebCore::LegacyCACFLayerTreeHost::flushContext): Added a call to contextDidChange so the
        base class will know what happened. Moved code to schedule a render from here...
        (WebCore::LegacyCACFLayerTreeHost::contextDidChange): ...to here.

        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h: Added contextDidChange.

        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp: Added.
        (WebCore::WKCACFViewLayerTreeHost::create): If WebKitQuartzCoreAdditions, which provides
        WKCACFView, isn't present, bail. Otherwise allocate and return a new host.
        (WebCore::WKCACFViewLayerTreeHost::WKCACFViewLayerTreeHost): Initialize members.
        (WebCore::WKCACFViewLayerTreeHost::updateViewIfNeeded): Update the view if we previously
        marked that we needed to do so, and flush the context if our layer's bounds have changed.
        (WebCore::WKCACFViewLayerTreeHost::contextDidChangeCallback): Call through to
        contextDidChange.
        (WebCore::WKCACFViewLayerTreeHost::contextDidChange): Tell the WKCACFView to start rendering
        (if we didn't already), then call up to the base class.
        (WebCore::WKCACFViewLayerTreeHost::initializeContext): Set the context's user data, the
        view's layer, and hook up our "context did change" callback.
        (WebCore::WKCACFViewLayerTreeHost::resize): Mark that the view needs to be updated the next
        time we paint.
        (WebCore::WKCACFViewLayerTreeHost::createRenderer): Update our view and return whether it is
        able to render or not.
        (WebCore::WKCACFViewLayerTreeHost::destroyRenderer): Clear out all the info we passed down
        to the view.
        (WebCore::WKCACFViewLayerTreeHost::lastCommitTime): Call through to the view.
        (WebCore::WKCACFViewLayerTreeHost::flushContext): Ditto.
        (WebCore::WKCACFViewLayerTreeHost::paint): Update the view so it will draw at the right
        size, then call up to the base class.
        (WebCore::WKCACFViewLayerTreeHost::render): Invalidate the view using the passed-in dirty
        rects, then ask it to draw.

        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h: Copied from Source/WebCore/platform/graphics/ca/win/LegacyCACFLayerTreeHost.h.

2011-01-27  Adam Roben  <aroben@apple.com>

        Move LegacyCACFLayerTreeHost into its own files

        More preparation for <http://webkit.org/b/53251> <rdar://problem/8925496> CACFLayerTreeHost
        should use WKCACFView for rendering

        Reviewed by Simon Fraser.

        * WebCore.vcproj/WebCore.vcproj: Added LegacyCACFLayerTreeHost.{cpp,h}.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp: Moved code from here to new files.

        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp: Added.
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h: Added.

2011-01-27  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r76824.

        * platform/wince/DragDataWinCE.cpp:
        (WebCore::DragData::dragDataMap):

2011-01-27  Adam Roben  <aroben@apple.com>

        Split CACFLayerTreeHost into base and derived classes

        The derived class, LegacyCACFLayerTreeHost, contains all the D3D-related code. A later patch
        will add a new derived class that replaces the D3D code with a different rendering API.

        For now, LegacyCACFLayerTreeHost lives in CACFLayerTreeHost.cpp. This keeps the diff a
        little smaller. A later patch will move it to its own source files.

        Preparation for <http://webkit.org/b/53251> <rdar://problem/8925496> CACFLayerTreeHost
        should use WKCACFView for rendering

        Reviewed by Simon Fraser.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::acceleratedCompositingAvailable): Clear the window before
        destroying the host, as that is now the API contract that clients must fulfill.
        (WebCore::LegacyCACFLayerTreeHost::create): Added. Simple creator.
        (WebCore::CACFLayerTreeHost::create): Now instantiates a LegacyCACFLayerTreeHost. Calls the
        new initialize function to perform initialization that has to happen after the vtable has
        been set up.

        (WebCore::LegacyCACFLayerTreeHost::LegacyCACFLayerTreeHost):
        (WebCore::CACFLayerTreeHost::CACFLayerTreeHost):
        (WebCore::LegacyCACFLayerTreeHost::initializeContext):
        (WebCore::CACFLayerTreeHost::initialize):
        Moved some initialization code from the CACFLayerTreeHost constructor into these new
        functions.

        (WebCore::LegacyCACFLayerTreeHost::~LegacyCACFLayerTreeHost): Added. Moved code here from
        ~CACFLayerTreeHost.
        (WebCore::CACFLayerTreeHost::~CACFLayerTreeHost): Rather than clearing the window at this
        point (which would be too late, since we won't be able to call into the derived class's
        virtual functions), just assert that it has already been cleared (or was never set in the
        first place).
        (WebCore::LegacyCACFLayerTreeHost::createRenderer): Renamed from
        CACFLayerTreeHost::createRenderer, and changed to use getters instead of accessing
        CACFLayerTreeHost's data members directly.

        (WebCore::LegacyCACFLayerTreeHost::destroyRenderer):
        (WebCore::CACFLayerTreeHost::destroyRenderer):
        Moved some code to the new LegacyCACFLayerTreeHost function.

        (WebCore::LegacyCACFLayerTreeHost::resize):
        (WebCore::LegacyCACFLayerTreeHost::renderTimerFired):
        Moved these functions to LegacyCACFLayerTreeHost.

        (WebCore::LegacyCACFLayerTreeHost::paint):
        (WebCore::CACFLayerTreeHost::paint):
        Moved some code to the new LegacyCACFLayerTreeHost function.

        (WebCore::LegacyCACFLayerTreeHost::render):
        (WebCore::LegacyCACFLayerTreeHost::renderSoon):
        Moved these functions to LegacyCACFLayerTreeHost.

        (WebCore::CACFLayerTreeHost::flushPendingLayerChangesNow): Moved code to flush the context
        from here...
        (WebCore::LegacyCACFLayerTreeHost::flushContext): ...to this new function.

        (WebCore::LegacyCACFLayerTreeHost::lastCommitTime): Moved code to get the last commit time
        to this new function...
        (WebCore::CACFLayerTreeHost::notifyAnimationsStarted): ...from here.

        (WebCore::LegacyCACFLayerTreeHost::initD3DGeometry):
        (WebCore::LegacyCACFLayerTreeHost::resetDevice):
        Moved these functions to LegacyCACFLayerTreeHost.

        * platform/graphics/ca/win/CACFLayerTreeHost.h: Made some functions virtual, removed some
        members that have moved to LegacyCACFLayerTreeHost, grouped remaining members more
        logically, and added some getters used by LegacyCACFLayerTreeHost.

2011-01-27  Adam Roben  <aroben@apple.com>

        Move CACFLayerTreeHostClient to its own header file

        Rubber-stamped by Steve Falkenburg.

        * WebCore.vcproj/WebCore.vcproj: Added CACFLayerTreeHostClient.h. Also let VS have its way
        with the file.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp: Added new #include.

        * platform/graphics/ca/win/CACFLayerTreeHost.h: Removed CACFLayerTreeHostClient.

        * platform/graphics/ca/win/CACFLayerTreeHostClient.h: Added.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp: Moved some #includes here
        from the header file.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h: Replaced broader #includes
        with more specific ones, plus a forward-declaration.

2011-01-27  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Simplify small caps logic in complex text on linux
        https://bugs.webkit.org/show_bug.cgi?id=53207

        Test: fast/text/atsui-multiple-renderers.html
              fast/text/atsui-small-caps-punctuation-size.html

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::nextScriptRun): Remove redundant logic. Case changes in a text run imply FontData changes.
        (WebCore::ComplexTextController::setupFontForScriptRun): Update comment to reflect above.

2011-01-27  Adam Barth  <abarth@webkit.org>

        In which I attempt to fix the EFL build.

        * CMakeLists.txt:

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

        Reviewed by Darin Adler.

        Adding border and padding to the calculation of the local caret rect for RenderBoxes.
        Corrected for mistake in r76625

        Undo moves caret to invalid position
        https://bugs.webkit.org/show_bug.cgi?id=49744

        Tests: editing/selection/caret-painting-after-paste-undo-rtl.html
               editing/selection/caret-painting-after-paste-undo.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):

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

        Unreviewed, rolling out r76825.
        http://trac.webkit.org/changeset/76825
        https://bugs.webkit.org/show_bug.cgi?id=53256

        "caused crashes on GTK and chromium" (Requested by rniwa on
        #webkit).

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::keyDestroyed):
        (WebCore::ImageQualityController::objectDestroyed):
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        (WebCore::imageQualityController):
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):

2011-01-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Generalize the mechanism view-source uses to remember the source for an HTMLToken
        https://bugs.webkit.org/show_bug.cgi?id=53200

        Currently view-source tracks the source associated with each HTMLToken.
        We want to re-use this mechanism for the new XSS auditor.  This patch
        moves this code into its own class so it can be shared between the
        view-source parser and the general HTML parser.  This patch also add
        support for tracking the source of tokens that span document.write
        boundaries.

        No functional change.  This code change is somewhat tested by our
        view-source layout tests.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            - Fun with updating build files.
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
            - Teach HTMLDocumentParser to track the source for HTMLTokens.
              Currently, this information isn't used, but it will be shortly.
              I ran the HTML parser benchmark and this change didn't have a
              measurable effect.
        * html/parser/HTMLDocumentParser.h:
            - Composite in the HTMLSourceTracker.
        * html/parser/HTMLSourceTracker.cpp: Added.
        (WebCore::HTMLSourceTracker::HTMLSourceTracker):
        (WebCore::HTMLSourceTracker::start):
        (WebCore::HTMLSourceTracker::end):
            - This function should eventualy be folded into HTMLTokenizer.
        (WebCore::HTMLSourceTracker::sourceForToken):
        * html/parser/HTMLSourceTracker.h: Added.
        * html/parser/HTMLToken.h:
            - Now HTMLTokens always have a start index of zero.  To do the job
              of the old start index, this patch introduces the notion of a
              baseOffset.  Unlike the start index (which was used as the base
              offset for all the other indicies), the baseOffset can change
              over the lifetime of the token.  We need the flexibility to
              change the offset for tokens that span document.write boundaries.
              Values are now normalized to zero-offset when stored.
        (WebCore::HTMLToken::clear):
        (WebCore::HTMLToken::setBaseOffset):
        (WebCore::HTMLToken::end):
        (WebCore::HTMLToken::beginAttributeName):
        (WebCore::HTMLToken::endAttributeName):
        (WebCore::HTMLToken::beginAttributeValue):
        (WebCore::HTMLToken::endAttributeValue):
        * html/parser/HTMLViewSourceParser.cpp:
            - Updates the HTMLViewSourceParser to use the new
              HTMLSourceTracker.
        (WebCore::HTMLViewSourceParser::pumpTokenizer):
        (WebCore::HTMLViewSourceParser::append):
        (WebCore::HTMLViewSourceParser::sourceForToken):
            - This function now just calls through to HTMLSourceTracker.
        * html/parser/HTMLViewSourceParser.h:
        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::currentColumn):
        (WebCore::SegmentedString::setCurrentPosition):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedString::numberOfCharactersConsumed):
            - We need to handle the general case now.  The "slow" version
              doesn't turn out to be any slower in practice anyway.

2011-01-27  Sam Weinig  <sam@webkit.org>

        Fix all the builds.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paintOverhangAreas): Add parameters.

2011-01-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Add ability to do an unconstrained scroll on a ScrollView
        https://bugs.webkit.org/show_bug.cgi?id=53249

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        Initialize m_constrainsScrollingToContentEdge to true.

        (WebCore::ScrollView::setScrollOffset):
        Only constrain the offset if the m_constrainsScrollingToContentEdge is set.

        (WebCore::ScrollView::updateScrollbars):
        Simplify expression converting an IntSize to an IntPoint.
        
        (WebCore::ScrollView::paint):
        Paint the overhang if there is any.
        
        (WebCore::ScrollView::calculateOverhangAreasForPainting):
        Calculate the overhang in viewport coordinates for painting.

        * platform/ScrollView.h:
        (WebCore::ScrollView::constrainsScrollingToContentEdge):
        (WebCore::ScrollView::setConstrainsScrollingToContentEdge):
        Add bit to control whether the scroll position should be constrained
        to the content edge when set.

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::usedTotalSize):
        (WebCore::ScrollbarThemeComposite::thumbPosition):
        (WebCore::ScrollbarThemeComposite::thumbLength):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        Improve calculations of thumb size and position to take overhang into account.

2011-01-27  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG animation of Paths with segments of different coordinate modes on begin and end
        https://bugs.webkit.org/show_bug.cgi?id=52984

        At the moment we just support SVG path animations, if the number of segments on the given start path
        is the same as the number of segments on the given end path. But a segment on a given position must be identical
        on both paths as well. Not only the segment type, also the coordinate mode of the segments must be identical.
        If MoveToRel is on the second position on the start path a MoveToRel must be on the second position
        of the end path too. According to the SVG spec, at least the coordinate mode can differ. Means, if we have MoveToRel
        in the start path, we can use MoveToAbs on the same position in the end path.

        This patch fixes the blending code to follow the spec here. It was necessary to track the current position of
        both paths, transform coordinates to the same coordinate mode and transform the resulting animation coordinate back
        to the coordinate mode of either the start or the end path. Which mode is taken depends on the progress of the
        animation.

        Tests: svg/animations/animate-path-animation-Cc-Ss.html
               svg/animations/animate-path-animation-Ll-Vv-Hh.html
               svg/animations/animate-path-animation-Qq-Tt.html
               svg/animations/animate-path-animation-cC-sS-inverse.html
               svg/animations/animate-path-animation-lL-vV-hH-inverse.html
               svg/animations/animate-path-animation-qQ-tT-inverse.html

        * svg/SVGPathBlender.cpp:
        (WebCore::blendFloatPoint):
        (WebCore::blendAnimatedFloat):
        (WebCore::SVGPathBlender::blendAnimatedDimensionalFloat):
        (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::coordinateModeOfCommand):
        (WebCore::isSegmentEqual):
        (WebCore::SVGPathBlender::blendAnimatedPath):
        (WebCore::SVGPathBlender::cleanup):
        * svg/SVGPathBlender.h:

2011-01-27  Cris Neckar  <cdn@chromium.org>

        Reviewed by Dimitri Glazkov.

        Clear the parent on a css keyframe's m_style when removing it from the stylesheet.
        https://bugs.webkit.org/show_bug.cgi?id=52320

        Test: fast/css/css-keyframe-style-crash.html

        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::deleteRule):
        * css/WebKitCSSKeyframesRule.cpp:
        (WebCore::WebKitCSSKeyframesRule::~WebKitCSSKeyframesRule):

2011-01-27  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Kent Tamura.

        Color changes to option elements in a select multiple aren't drawn immediately
        https://bugs.webkit.org/show_bug.cgi?id=49790

        Redirect style changes on <option> element to the owner <select> element.

        Test: fast/repaint/select-option-background-color.html

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setRenderStyle):

2011-01-19  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Adler.

        Fix performance regression in ImageQualityController::objectDestroyed().
        https://bugs.webkit.org/show_bug.cgi?id=52645

        In r72282, I inadvertently introduced this regression by using a
        linear search through the hash map on object destruction.  This was
        because the hash key consisted of both object pointer and layer id,
        but on object destruction we only know the object pointer, requiring
        a search to find all the layers. 
        By replacing the hash map with two nested hash maps, where the outer key
        is the object and the inner key is the layer, we can find all the
        relevant data for an object in one hash lookup.

        * rendering/RenderBoxModelObject.cpp:
        Replace the (object,layer)->size HashMap with object->layer and
        layer->size HashMaps.
        (WebCore::ImageQualityController::isEmpty):
        Implement isEmpty() for the outer HashMap.
        (WebCore::ImageQualityController::removeLayer):
        When a layer is removed, remove it from the inner hash map.
        (WebCore::ImageQualityController::set):
        Implement set():  if the inner map exists, set the layer->size tuple
        directly.  If not, create a new inner map, set the tuple, and insert
        it in the outer map.
        (WebCore::ImageQualityController::objectDestroyed):
        Look up the object in the outer map only.
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        Cosmetic changes for the renamed now-outer hash map.
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        Do both outer and inner hash map lookups.  Call set() to add/update
        entries to the hash maps.  keyDestroyed() is now removeLayer().
        (WebCore::imageQualityController):
        Make the ImageQualityController a file-static global, so it can be
        created and destroyed on the fly.
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        If there is no ImageQualityController, don't call objectDestroyed().
        If it's empty, delete it.


2011-01-26  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        WebKit2: add support for drag and drop on Windows
        https://bugs.webkit.org/show_bug.cgi?id=52775
        <rdar://problem/8514409>
        
        On Windows the access to the content being dragged is
        provided via the IDataObject interface that is made available
        to the window that registers itself as drop target.
        Since this interface cannot be accessed from the WebProcess,
        in every call to one of the methods of the IDropTarget interface
        we serialize the content of the drag clipboard and send it over to
        the WebProcess.
        The bulk of this patch consists in the refactoring needed in DragData
        and ClipboardWin classes to extract the data from the serialized object.
        
        * platform/DragData.cpp:
        * platform/DragData.h:
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getWebLocData):
        (WebCore::getURL):
        (WebCore::getPlainText):
        (WebCore::getTextHTML):
        (WebCore::getCFHTML):
        (WebCore::fragmentFromFilenames):
        (WebCore::containsFilenames):
        (WebCore::fragmentFromHTML):
        (WebCore::containsHTML):
        (WebCore::getClipboardData):
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/ClipboardWin.cpp:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardWin::ClipboardWin):
        (WebCore::ClipboardWin::getData):
        (WebCore::ClipboardWin::types):
        (WebCore::ClipboardWin::files):
        (WebCore::ClipboardWin::hasData):
        * platform/win/ClipboardWin.h:
        (WebCore::ClipboardWin::create):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::DragData):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::dragDataMap):
        (WebCore::DragData::asURL):
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::asFragment):

2011-01-27  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Space characters in source document interfere with reported caret offset
        https://bugs.webkit.org/show_bug.cgi?id=53033

        Calculate caret offset from rendered text instead of from node contents.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (objectAndOffsetUnignored): Calculate the caret offset based only
        on positions and ranges, instead of using the computed offset in
        the container node.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=53197
        <rdar://problem/8895682> Make WebKit2 printing asynchronous

        * WebCore.exp.in: Export more PrintContext methods that we didn't use on Mac before.

        * page/PrintContext.cpp: (WebCore::PrintContext::spoolRect): Changed to make the same
        transformation as spoolPages does for consistency.

2011-01-27  David Grogan  <dgrogan@google.com>

        Reviewed by Jeremy Orlow.

        initial support for close() in indexeddb backend
        https://bugs.webkit.org/show_bug.cgi?id=53150

        Test: storage/indexeddb/transaction-after-close.html

        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        (WebCore::IDBDatabase::transaction):
        (WebCore::IDBDatabase::close):
        * storage/IDBDatabase.h:
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::transaction):
        (WebCore::IDBDatabaseBackendImpl::close):

2011-01-27  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG animation doesn't support calcMode discrete for number and color values.
        https://bugs.webkit.org/show_bug.cgi?id=53189

        Add support for calcMode discrete on number and color animation.

        Tests: svg/animations/animate-color-calcMode-discrete.html
               svg/animations/animate-number-calcMode-discrete.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):

2011-01-26  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        shaderSource needs to preserve original source
        https://bugs.webkit.org/show_bug.cgi?id=52833

        Test: fast/canvas/webgl/gl-getshadersource.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getShaderParameter): Intercept SHADER_SOURCE_LENGTH.
        (WebCore::WebGLRenderingContext::getShaderSource): Intercept the call.
        (WebCore::WebGLRenderingContext::shaderSource): Cache the source.
        * html/canvas/WebGLShader.cpp: Cache shader source.
        (WebCore::WebGLShader::WebGLShader):
        * html/canvas/WebGLShader.h: Ditto.
        (WebCore::WebGLShader::getSource):
        (WebCore::WebGLShader::setSource):

2011-01-27  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r76743.

        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::TextRunComponent::TextRunComponent):

2011-01-27  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Closure and Global variable details automatically collapsing on each step through JavaScript code.
        https://bugs.webkit.org/show_bug.cgi?id=53234

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

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

        Unreviewed, rolling out r76789.
        http://trac.webkit.org/changeset/76789
        https://bugs.webkit.org/show_bug.cgi?id=53238

        Broke GTK layout tests (Requested by podivilov on #webkit).

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

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

        Reviewed by Pavel Feldman.

        Web Inspector: store all settings related to the agents on the frontend side
        https://bugs.webkit.org/show_bug.cgi?id=53174

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptDebugServer.cpp:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptProfiler.cpp:
        * bindings/js/ScriptProfiler.h:
        * bindings/v8/ScriptDebugServer.cpp:
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/ScriptProfiler.cpp:
        * bindings/v8/ScriptProfiler.h:
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp: profiler and debugger enablement state is now stored
        on the front-end side and will be pushed to the backend when the frontend is loaded.
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::restoreDebugger):
        (WebCore::InspectorAgent::restoreProfiler):
        (WebCore::InspectorAgent::enableProfiler):
        (WebCore::InspectorAgent::disableProfiler):
        (WebCore::InspectorAgent::showAndEnableDebugger):
        (WebCore::InspectorAgent::enableDebugger):
        (WebCore::InspectorAgent::disableDebugger):
        * inspector/InspectorAgent.h:
        * inspector/InspectorConsoleAgent.cpp: XHR failures will be logged to the console only
        if the front-end was opened during current browser session and XHR logging is turned on
        there.
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        * inspector/InspectorSettings.cpp: Removed.
        * inspector/InspectorSettings.h: Removed.
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessagesCleared):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent.itemAction):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._toggleProfiling):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:

2011-01-27  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Closure and Global variable details automatically collapsing on each step through JavaScript code.
        https://bugs.webkit.org/show_bug.cgi?id=53234

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

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

        Reviewed by Pavel Feldman.

        Web Inspector: [Elements panel] Tooltip for relative links incorrectly identifies current URL
        https://bugs.webkit.org/show_bug.cgi?id=53171

        * inspector/front-end/inspector.js:
        (WebInspector.completeURL): Taught to understand partial href's that start with "?" (contain GET parameters only)

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

        Reviewed by Pavel Feldman.

        [V8] Crash in WebCore::addMessageToConsole
        https://bugs.webkit.org/show_bug.cgi?id=53227

        * bindings/v8/V8Proxy.cpp: check that the Frame where the error
        occured still has a page before getting a console object from it.
        (WebCore::V8Proxy::reportUnsafeAccessTo):

2011-01-27  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Remove IDBCallbacks::onSuccess() used for null values.
        https://bugs.webkit.org/show_bug.cgi?id=53178

        Remove the IDBCallbacks::onSuccess() function that was used for
        null values, and replace such calls with calls to
        IDBCallBacks::onSuccess(SerializedScriptValue::nullValue())
        instead.

        No new functionality, so no new tests.

        * storage/IDBCallbacks.h:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::updateInternal):
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        * storage/IDBRequest.cpp:
        * storage/IDBRequest.h:

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

        Unreviewed, rolling out r76773.
        http://trac.webkit.org/changeset/76773
        https://bugs.webkit.org/show_bug.cgi?id=53230

        breaks multiple GTK media tests (Requested by philn-tp on
        #webkit).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

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

        Unreviewed, rolling out r76770.
        http://trac.webkit.org/changeset/76770
        https://bugs.webkit.org/show_bug.cgi?id=53229

        Some inspector tests fail (Requested by yurys on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::isDebuggerAlwaysEnabled):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::isProfilerAlwaysEnabled):
        * bindings/js/ScriptProfiler.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::isDebuggerAlwaysEnabled):
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::isProfilerAlwaysEnabled):
        * bindings/v8/ScriptProfiler.h:
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::restoreDebugger):
        (WebCore::InspectorAgent::restoreProfiler):
        (WebCore::InspectorAgent::ensureSettingsLoaded):
        (WebCore::InspectorAgent::enableProfiler):
        (WebCore::InspectorAgent::disableProfiler):
        (WebCore::InspectorAgent::showAndEnableDebugger):
        (WebCore::InspectorAgent::enableDebugger):
        (WebCore::InspectorAgent::disableDebugger):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::settings):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::isDebuggerAlwaysEnabled):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        * inspector/InspectorSettings.cpp: Added.
        (WebCore::InspectorSettings::InspectorSettings):
        (WebCore::InspectorSettings::getBoolean):
        (WebCore::InspectorSettings::setBoolean):
        (WebCore::InspectorSettings::getLong):
        (WebCore::InspectorSettings::setLong):
        (WebCore::InspectorSettings::registerBoolean):
        (WebCore::InspectorSettings::registerLong):
        * inspector/InspectorSettings.h: Copied from Source/WebCore/bindings/v8/ScriptProfiler.h.
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.monitoringXHRStateChanged):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._toggleProfiling):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:

2011-01-26  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] LayoutTests/media/audio-mpeg4-supported.html fails
        https://bugs.webkit.org/show_bug.cgi?id=53125

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache): Add audio/x-m4a mimetype in the cache.

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

        Reviewed by Pavel Feldman.

        Web Inspector: store all settings related to the agents on the frontend side
        https://bugs.webkit.org/show_bug.cgi?id=53174

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp: profiler and debugger enablement state is now stored
        on the front-end side and will be pushed to the backend when the frontend is loaded.
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::restoreDebugger):
        (WebCore::InspectorAgent::restoreProfiler):
        (WebCore::InspectorAgent::enableProfiler):
        (WebCore::InspectorAgent::disableProfiler):
        (WebCore::InspectorAgent::showAndEnableDebugger):
        (WebCore::InspectorAgent::enableDebugger):
        (WebCore::InspectorAgent::disableDebugger):
        * inspector/InspectorAgent.h:
        * inspector/InspectorConsoleAgent.cpp: XHR failures will be logged to the console only
        if the front-end was opened during current browser session and XHR logging is turned on
        there.
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorSettings.cpp: Removed.
        * inspector/InspectorSettings.h: Removed.
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessagesCleared):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent.itemAction):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._toggleProfiling):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:

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

        Reviewed by Sam Weinig.

        REGRESSION (r76743): Uneven spacing in right-to-left justified text
        https://bugs.webkit.org/show_bug.cgi?id=53225

        Fixes failure in fast/text/atsui-spacing-features.html

        There was an inconsistency between rendering code and font code in the interpretation of
        'after expansion' and 'trailing expansion'. Changed all code to interpret these in terms of
        visual order rather than logical.

        * platform/graphics/Font.cpp:
        (WebCore::Font::expansionOpportunityCount): Added a text direction parameter and changed to
        iterate in visual order accordingly.
        * platform/graphics/Font.h:
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Pass the run direction to expansionOpportunityCount().
        (WebCore::WidthIterator::advance): For right-to-left runs, evaluate the trailing expansion
        condition with respect to the first character, which is the trailing character in visual order.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController): Pass the run direction to
        expansionOpportunityCount().
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Ditto.

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

        Don't create the Direct3D device before it's first needed

        We only need the device once we decide to render. There's no point in creating it before
        then.

        Reviewed by Sam Weinig.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::setWindow): Removed the call to createRenderer() from here.
        We already have code to create it when we first try to draw.
        (WebCore::CACFLayerTreeHost::createRenderer): Flush the context after we set our layer's
        bounds so that the bounds will take effect the next time we render (which could be just
        after this function returns).

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

        Add assertions that CACFLayerTreeHost gains and loses an HWND only once

        CACFLayerTreeHost doesn't support any other use pattern.

        Reviewed by Sam Weinig.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::CACFLayerTreeHost): Initialize new member.
        (WebCore::CACFLayerTreeHost::setWindow): Assert that we transition from not having a window,
        to having a window, to not having a window just once over the lifetime of this object.

        * platform/graphics/ca/win/CACFLayerTreeHost.h: Added m_state.

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

        Notify layers that their animations have started when we flush the context, not when we
        render

        r76372 separated context flushing from rendering, but this bit of code got left behind.

        Reviewed by Sam Weinig.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::render): Moved code to notify the layers from here to
        notifyAnimationsStarted.
        (WebCore::CACFLayerTreeHost::flushPendingLayerChangesNow): Added a call to
        notifyAnimationsStarted after we flush the context.
        (WebCore::CACFLayerTreeHost::notifyAnimationsStarted): Added. Code came from render. Changed
        to call PlatformCALayer::animationStarted rather than calling through to the client
        directly.

        * platform/graphics/ca/win/CACFLayerTreeHost.h: Added notifyAniamtionsStarted.

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

        Small cleanup in MediaPlayerPrivateFullscreenWindow

        Reviewed by Sam Weinig.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::~MediaPlayerPrivateFullscreenWindow): Moved
        code here from close(), since this was the only place that called it after the following
        change to createWindow.
        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow): Replaced code that handled the
        case where we had already created the window with an assertion that we have not already done
        so. Our single caller (FullscreenVideoController) did not require this behavior.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h: Removed layerView.

2011-01-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Move ScrollView scroll wheel code to ScrollAnimator.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollAnimator.h:
        Moved implementation of handleWheelEvent from ScrollView::wheelEvent.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        Call down to the ScrollableArea.

        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::handleWheelEvent):
        Call down to the ScrollAnimator.

        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::scrollPosition):
        (WebCore::ScrollableArea::minimumScrollPosition):
        (WebCore::ScrollableArea::maximumScrollPosition):
        (WebCore::ScrollableArea::visibleContentRect):
        (WebCore::ScrollableArea::visibleHeight):
        (WebCore::ScrollableArea::visibleWidth):
        Add functions needed to implement wheel event in the animator.

2011-01-26  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/53192> Add experimental support for HTTP pipelining in CFNetwork
        <rdar://problem/8821760>

        Reviewed by Antti Koivisto.

        This adds support for HTTP pipelining in CFNetwork, but does not
        enable it.  To enable it post-SnowLeopard, use this command:

            defaults write BUNDLE.ID WebKitEnableHTTPPipelining -bool YES

        Once enabled, it is possible to force the same load priority
        (high) to be sent to CFNetwork to allow WebCore to handle the
        scheduling:

            defaults write BUNDLE.ID WebKitForceHTTPPipeliningPriorityHigh -bool YES

        * WebCore.exp.in: Export _wkGetHTTPPipeliningPriority and
        _wkSetHTTPPipeliningPriority.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):
        Copy the priority to preflightRequest.

        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleLoad): Refactored code
        at the end of the method to use an early return.

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::load): Set the priority on the
        ResourceRequest object based on the priority of the
        CachedResourceRequest before calling
        ResourceLoadScheduler::scheduleSubresourceLoad().

        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading): Create a ResourceRequest
        object and set its priority to ResourceLoadPriorityLow before
        passing it to ResourceLoadScheduler::scheduleSubresourceLoad().

        * platform/mac/WebCoreSystemInterface.h:
        (wkGetHTTPPipeliningPriority): Added.
        (wkSetHTTPPipeliningPriority): Added.
        * platform/mac/WebCoreSystemInterface.mm:
        (wkGetHTTPPipeliningPriority): Added.
        (wkSetHTTPPipeliningPriority): Added.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt): Set m_priority when
        adopting a CrossThreadResourceRequestData.
        (WebCore::ResourceRequestBase::copyData): Set m_priority when
        creating a CrossThreadResourceRequestData.
        (WebCore::ResourceRequestBase::priority): Added.
        (WebCore::ResourceRequestBase::setPriority): Added.
        (WebCore::equalIgnoringHeaderFields): Priorities must match when
        comparing two ResourceRequest objects.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase): Set default
        priority of new objects to ResourceLoadPriorityLow.
        (WebCore::ResourceRequestBase::priority): Added declaration.
        (WebCore::ResourceRequestBase::setPriority): Added declaration.
        (WebCore::isHTTPPipeliningEnabled): Added.
        (WebCore::shouldUseHTTPPipeliningPriority): Added.

        * platform/network/cf/ResourceRequestCFNet.cpp: Updated so that
        Mac OS X and Windows share code.
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Always
        set the HTTP connection count per host, but return an
        'unlimited' value when using HTTP pipelining.  This method used
        to be defined in ResourceRequestMac.mm for Mac OS X.
        (WebCore::readBooleanPreference): Added.  Helper method for
        reading boolean user defaults.
        (WebCore::isHTTPPipeliningEnabled): Returns value of user
        default key WebKitEnableHTTPPipelining, or false if not set.
        (WebCore::shouldUseHTTPPipeliningPriority): Returns value of
        user default key WebKitForceHTTPPipeliningPriorityHigh, or false
        if not set.
        * platform/network/cf/ResourceRequestCFNet.h: Updated so that
        Mac OS X and Windows share code.  Fixed indentation.
        (WebCore::mapHTTPPipeliningPriorityToResourceLoadPriority): Added.
        (WebCore::mapResourceLoadPriorityToHTTPPipeliningPriority): Added.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Update
        HTTP pipelining priority on NSMutableFURLRequest object.
        (WebCore::ResourceRequest::doUpdateResourceRequest): Update
        m_priority from the NSURLRequest object.
        (WebCore::initializeMaximumHTTPConnectionCountPerHost): Removed.
        Code is now shared with Windows in ResourceRequestCFNet.cpp.

2011-01-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8895140> Adopt WKScrollbar metrics 
        when using WKScrollbars.

        New WebKitSystemInterface Functionality.
        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

        Some of the terrible static arrays are now only needed in the 
        old non-WK code, so they are if-def'd now.
        * platform/mac/ScrollbarThemeMac.mm:
        
        Just patching this function in a better way than I did
        before.
        (WebCore::updateArrowPlacement):
        
        Call into WK for the right values.
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        
        Return false if there are no buttons.
        (WebCore::ScrollbarThemeMac::hasButtons):

        Return an empty IntRect if there are not buttons.
        (WebCore::buttonRepaintRect):

2011-01-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Add events to represent the start/end of a gesture scroll
        https://bugs.webkit.org/show_bug.cgi?id=53215

        * WebCore.exp.in: 
        Add new file.

        * WebCore.xcodeproj/project.pbxproj:
        Add new file.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleGestureEvent):
        * page/EventHandler.h:
        Add entry point for handling gesture events.

        * platform/PlatformGestureEvent.h: Added.
        (WebCore::PlatformGestureEvent::PlatformGestureEvent):
        (WebCore::PlatformGestureEvent::type):
        (WebCore::PlatformGestureEvent::position):
        (WebCore::PlatformGestureEvent::globalPosition):
        (WebCore::PlatformGestureEvent::timestamp):
        Add platform agnostic representation of a gesture event.

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

        Reviewed by Dave Hyatt.

        <rdar://problem/8446709> Allow inter-ideograph justification for CJK
        https://bugs.webkit.org/show_bug.cgi?id=53184

        Tests: fast/text/justify-ideograph-complex.html
               fast/text/justify-ideograph-simple.html
               fast/text/justify-ideograph-vertical.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal): Corrected the type of the third parameter
        passed to the TextRun constructor and added the trailingExpansionBehavior parameter.
        * platform/graphics/Font.cpp:
        (WebCore::Font::expansionOpportunityCount): Added. Returns the number of expansion opportunities
        for text justification. On entry, isAfterExpansion says whether an expansion opportunity exists
        before the first character. On return, isAfterExpansion says whether an expansion opportunity
        exists after the last character.
        * platform/graphics/Font.h: 
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::expandLastAdvance): Added.
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun): Added a TrailingExpansionBehavior parameter to the constructors.
        Renamed padding to expansion.
        (WebCore::TextRun::expansion): Renamed padding() to this.
        (WebCore::TextRun::allowsTrailingExpansion): Added this accessor.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Initialize m_isAfterExpansion. Use Font::expansionOpportunityCount()
        and adjust the count if it includes a trailing expansion opportunity but the run disallows trailing
        expansion.
        (WebCore::WidthIterator::advance): Apply expansion before and after CJK ideographs.
        (WebCore::WidthIterator::advanceOneCharacter): Changed to not clear the GlyphBuffer so that advance()
        can expand the last advance if it is followed by a CJK ideograph.
        * platform/graphics/WidthIterator.h: Renamed m_padding to m_expansion and m_padPerSpace
        to m_expansionPerOpportunity.
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
        * platform/graphics/efl/FontEfl.cpp:
        (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
        * platform/graphics/haiku/FontHaiku.cpp:
        (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController): Initialize m_isAfterExpansion. Use
        Font::expansionOpportunityCount() and adjust the count if it includes a trailing expansion
        opportunity but the run disallows trailing expansion.
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Moved the definition and initialization
        of hasExtraSpacing outside the loop. Apply expansion before and after CJK ideographs.
        * platform/graphics/mac/ComplexTextController.h: Renamed m_padding to m_expansion and m_padPerSpace
        to m_expansionPerOpportunity.
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController): Updated for rename.
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::canExpandAroundIdeographsInComplexText): Added.
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint): Pass a TrailingExpansionBehavior to the TextRun constructor.
        (WebCore::EllipsisBox::selectionRect): Ditto.
        (WebCore::EllipsisBox::paintSelection): Ditto.
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox): Renamed m_toAdd to m_expansion.
        (WebCore::InlineBox::expansion): Renamed toAdd() to this.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect): Pass a TrailingExpansionBehavior to the TextRun constructor.
        (WebCore::InlineTextBox::paint): Ditto.
        (WebCore::InlineTextBox::paintSelection): Ditto.
        (WebCore::InlineTextBox::paintCompositionBackground): Ditto.
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker): Ditto.
        (WebCore::InlineTextBox::paintTextMatchMarker): Ditto.
        (WebCore::InlineTextBox::computeRectForReplacementMarker): Ditto.
        (WebCore::InlineTextBox::offsetForPosition): Ditto.
        (WebCore::InlineTextBox::positionForOffset): Ditto.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::setExpansion): Renamed setSpaceAdd() to this.
        (WebCore::InlineTextBox::trailingExpansionBehavior): Added. Trailing expansion is allowed if this
        is not the last leaf box on the line.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Keep expansion opportunity counts
        in a vector instead of computing them twice. Discard the trailing expansion opportunity in the
        last text box.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject): Pass a TrailingExpansionBehavior to the TextRun constructor.
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths): Ditto.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement): Ditto.
        (WebCore::RenderListBox::paintItemForeground): Ditto. Also corrected the type of the second parameter.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::getAvgCharWidth): Ditto.
        (WebCore::RenderTextControl::paintPlaceholder): Ditto.
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun): Ditto.

2011-01-26  Andy Estes  <aestes@apple.com>

        Rubber-stamped by Darin Adler.

        Inline HTMLObjectElement::hasValidClassId().

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasValidClassId):

2011-01-26  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] crash on getBoundingClientRect in complex text
        https://bugs.webkit.org/show_bug.cgi?id=53199

        Use the correct array bound; we want the number of characters processed by
        the shaper, not the longest continuous script run length.

        Test: platform/chromium-linux/fast/text/international/complex-text-rectangle.html

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::nextScriptRun):
        * platform/graphics/chromium/ComplexTextControllerLinux.h:
        (WebCore::ComplexTextController::numCodePoints):

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

        Reviewed by Alexey Proskuryakov.

        Remove cached document reference from CSSStyleSheet and XSLStyleSheet.
        https://bugs.webkit.org/show_bug.cgi?id=52084

        Test: fast/dom/css-delete-doc.html

        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::insertRule):
        (WebCore::CSSMediaRule::deleteRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        (WebCore::CSSStyleSheet::document):
        * css/CSSStyleSheet.h:
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::parentStyleSheet):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        (WebCore::XSLStyleSheet::cachedResourceLoader):
        (WebCore::XSLStyleSheet::setParentStyleSheet):
        (WebCore::XSLStyleSheet::ownerDocument):
        * xml/XSLStyleSheetQt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        (WebCore::XSLStyleSheet::cachedResourceLoader):
        (WebCore::XSLStyleSheet::ownerDocument):

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

        Reviewed by Kent Tamura.

        Reduce ref-count churn in shadowPseudoId.
        https://bugs.webkit.org/show_bug.cgi?id=53136

        Refactoring, so no new tests.

        * dom/Element.h:
        (WebCore::Element::shadowPseudoId): Changed signature to use const AtomicString&
        * html/ValidationMessage.cpp:
        (WebCore::ElementWithPseudoId::shadowPseudoId): Ditto.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::shadowPseudoId): Ditto, plus moved from the header file.
        * html/shadow/SliderThumbElement.h: Ditto.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlMuteButtonElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlVolumeSliderMuteButtonElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlPlayButtonElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlSeekForwardButtonElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlSeekBackButtonElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlRewindButtonElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlTimelineElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlVolumeSliderElement::shadowPseudoId): Ditto.
        (WebCore::MediaControlFullscreenButtonElement::shadowPseudoId): Ditto.
        * rendering/MediaControlElements.h: Ditto.

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46421, make multi-column layout work with vertical text.

        Added new tests in fast/multicol/vertical-lr and fast/multicol/vertical-rl.

        * css/html.css:
        Update p, blockquote and h1-h6 to respect directionality so that column layout tests that use those
        elements work properly.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        Fix a flipping bug with the computation of lineTopIncludingMargins where it could be incorrectly shrunk
        in some cases (causing lines to all stack on top of one another).

        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::calculateBoundaries):
        Fix calculateBoundaries to be physical rather than logical.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::addForcedColumnBreak):
        * rendering/LayoutState.h:
        Rename childY to childLogicalOffset.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::estimateLogicalTopPosition):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::removeFloatingObjectsBelow):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::calcColumnWidth):
        (WebCore::RenderBlock::desiredColumnWidth):
        (WebCore::RenderBlock::columnRectAt):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::flipForWritingModeIncludingColumns):
        (WebCore::RenderBlock::adjustForColumns):
        (WebCore::RenderBlock::adjustForBorderFit):
        (WebCore::RenderBlock::nextPageLogicalTop):
        (WebCore::RenderBlock::applyBeforeBreak):
        (WebCore::RenderBlock::applyAfterBreak):
        (WebCore::RenderBlock::adjustForUnsplittableChild):
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalRightOffsetForContent):
        (WebCore::RenderBlock::logicalLeftOffsetForContent):
        (WebCore::RenderBlock::leftForFloatIncludingMargin):
        (WebCore::RenderBlock::topForFloatIncludingMargin):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        Reworking of all the RenderBlock column functions to support flipping and vertical modes.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::flipForWritingModeIncludingColumns):
        Patch offsetFromContainer to be aware of flipped block writing modes when dealing with column layouts.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::clientLogicalBottom):
        Fix a bug in clientLogicalBottom where it didn't add in the right border/padding.
        
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        Better terminology for pagination.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::offsetFromContainer):
        (WebCore::RenderInline::mapLocalToContainer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        (WebCore::RenderLayer::hitTestChildLayerColumns):
        (WebCore::RenderLayer::localBoundingBox):
        (WebCore::RenderLayer::boundingBox):
        Patch painting in RenderLayers to be vertical-text-aware.
    
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mapLocalToContainer):
        Add code to be flipped block-aware with columns.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        Fix pagination to use better terminology.
        
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::absoluteQuadsForRange):
        Fix a bug where vertical text wasn't taken into account.

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

        Unreviewed, rolling out r76719.
        http://trac.webkit.org/changeset/76719
        https://bugs.webkit.org/show_bug.cgi?id=53122

        Broke a bunch of media tests in Chromium/Qt/GTK.

2011-01-26  Tony Chang  <tony@chromium.org>

        Reviewed by Ryosuke Niwa.

        [gtk] strip NUL characters when copying text/html on GTK+
        https://bugs.webkit.org/show_bug.cgi?id=52508

        Putting NUL characters in the text/html clipboard doesn't work in
        WebKit GTK+ (the pasted value is truncated at the NUL).  Since we're
        already stripping this character for plain text (for Windows), strip
        it in text/html too.

        * editing/MarkupAccumulator.h: mark function as virtual
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendString):
        (WebCore::StyledMarkupAccumulator::takeResults): strip nulls

2011-01-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Reliable crash with getTextAtOffset()
        https://bugs.webkit.org/show_bug.cgi?id=53131

        Properly calculate length in bytes for a UTF8 substring.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (utf8Substr): Use character instead of bytes as units to
        calculate the length in bytes for the UTF8 string.

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

        Reviewed by Kent Tamura.

        Change HTMLInputElement-derived parts of media element shadow DOM to use shadowPseudoId.
        https://bugs.webkit.org/show_bug.cgi?id=53122

        This is the first step in converting HTMLMediaElement to the new shadow DOM.

        Should not regress any existing tests. No observable change in behavior.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId): Removed now-unnecessary hard-coded pseudo-element selectors.
        (WebCore::nameToPseudoTypeMap): Ditto.
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h: Ditto.
        * css/mediaControls.css: Added proper initial values, now that elements use the proper selector pipeline.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::MediaControlInputElement): Removed the switch statement,
            which is now replaced with virtual shadowPseudoId on each corresponding class.
        (WebCore::MediaControlInputElement::styleForElement): Changed to use element pipeline.
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement): Changed to set
            display type in constructor.
        (WebCore::MediaControlMuteButtonElement::create): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlMuteButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement): Added
            to disambiguate from the MediaControlMuteButtonElement.
        (WebCore::MediaControlVolumeSliderMuteButtonElement::create): Added.
        (WebCore::MediaControlVolumeSliderMuteButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlPlayButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement): Added.
        (WebCore::MediaControlSeekForwardButtonElement::create): Added.
        (WebCore::MediaControlSeekForwardButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement): Added.
        (WebCore::MediaControlSeekBackButtonElement::create): Added.
        (WebCore::MediaControlSeekBackButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): Added.
        (WebCore::MediaControlRewindButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlReturnToRealtimeButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId): Added.
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlTimelineElement::shadowPseudoId): Added.
        (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlVolumeSliderElement::shadowPseudoId): Added.
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement): Changed to not take PseudoId as
            constructor argument.
        (WebCore::MediaControlFullscreenButtonElement::shadowPseudoId): Added.
        * rendering/MediaControlElements.h:
        (WebCore::MediaControlSeekForwardButtonElement::isForwardButton): Added.
        (WebCore::MediaControlSeekBackButtonElement::isForwardButton): Added.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createMuteButton): Changed to use new constructor.
        (WebCore::RenderMedia::createSeekBackButton): Ditto.
        (WebCore::RenderMedia::createSeekForwardButton): Ditto.
        (WebCore::RenderMedia::createVolumeSliderMuteButton): Ditto.
        * rendering/style/RenderStyleConstants.h: Removed constants that are no longer used.

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

        Reviewed by James Robinson.

        Fix multisampling support in DrawingBuffer
        https://bugs.webkit.org/show_bug.cgi?id=53154

        In DrawingBuffer's multisampling code path, fixed enum usage and a
        bug where it would incorrectly redefine the depth and stencil
        buffers. Hooked up multisampling code path in Chromium port.

        Tested manually with some accelerated 2D canvas content.
        Multisampling isn't being switched on for the accelerated 2D
        canvas at the current time because it will increase fill rate
        requirements and cause a large number of rebaselines.

        * platform/graphics/Extensions3D.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::create):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supports):

2011-01-26  Tony Chang  <tony@chromium.org>

        Unreviewed.

        [chromium] revert r68310 because of race conditions detected by tsans
        https://bugs.webkit.org/show_bug.cgi?id=53185

        Causes stability problems for Chromium, http://crbug.com/70589

        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):

2011-01-26  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Make fireEventsAndUpdateStyle use stack local vectors. 
        https://bugs.webkit.org/show_bug.cgi?id=46760

        Test: animations/animation-add-events-in-handler.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):

2011-01-26  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Remove m_URL from FrameLoader and depend on Document::url()
        instead. FrameLoader::url() will be removed in a followup patch.
        https://bugs.webkit.org/show_bug.cgi?id=41165

        Refactor only, no new tests.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateURLForPushOrReplaceState):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURL):
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::didExplicitOpen):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::url):
        (WebCore::FrameLoader::setOutgoingReferrer):
        (WebCore::FrameLoader::startIconLoader):
        (WebCore::FrameLoader::commitIconURLToIconDatabase):
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::checkIfDisplayInsecureContent):
        (WebCore::FrameLoader::checkIfRunInsecureContent):
        (WebCore::FrameLoader::updateFirstPartyForCookies):
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::shouldScrollToAnchor):
        * loader/FrameLoader.h: Rename setURL() to setOutgoingReferrer().

2011-01-25  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Antti Koivisto.

        Crashes loading pages when cancelling subresource loads through WebKit
        https://bugs.webkit.org/show_bug.cgi?id=53123
        <rdar://problem/8914361>
        
        Fix a crash that happened when cancelling subresource loads through WebKit.
        
        When a load is cancelled synchronously (via the WebKit client), CachedResourceLoader::requestResource 
        can be called recursively on the same function, either leading to infinite recursion, or deleting 
        an object when it is not done being used.
        
        The fix for this was to call checkForPendingPreloads and servePendingRequests asynchronously when 
        CachedResourceLoader::loadDone was called synchronously (due to the load being cancelled synchronously).

        Test: fast/loader/willSendRequest-null-for-preload.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setRequest): Only dispatch didReceiveServerRedirectForProvisionalLoadForFrame 
            if our new URL is non-null.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader): Initialize our timer.
        (WebCore::CachedResourceLoader::loadDone): If the CachedResource we were passed in was 0, that means this 
            function was called synchronously
            from CachedResourceRequest::load, and we don't want to call into checkForPendingPreloads synchronously, 
            so put it on a 0-delay timer to make the calls to checkForPendingPreloads and servePendingRequests asynchronous.
        (WebCore::CachedResourceLoader::loadDonePendingActionTimerFired): Call checkForPendingPreloads and servePendingRequests.
        (WebCore::CachedResourceLoader::checkForPendingPreloads): m_pendingPreloads is now a Deque instead of a Vector, 
            so use Deque methods.
        * loader/cache/CachedResourceLoader.h: Add the timer, the timer callback function, and make m_pendingPreloads a Deque.

2011-01-25  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: evaluate in console may not work when window.console is substituted or deleted.
        https://bugs.webkit.org/show_bug.cgi?id=53072

        Test: inspector/console-substituted.html

        * inspector/InjectedScriptSource.js:
        (.):

2011-01-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [cairo] Use CAIRO_OPERATOR_DARKEN when available
        https://bugs.webkit.org/show_bug.cgi?id=53084

        Use CAIRO_OPERATOR_DARKEN for CompositePlusDarker instead of
        CAIRO_OPERATOR_SATURATE when building with cairo version >= 1.10.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::toCairoOperator):

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: visualize \n in strings as unicode cr
        symbol in stack variables sidebar.
        https://bugs.webkit.org/show_bug.cgi?id=53162

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

2011-01-26  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: size is wrong for cached resources in Network panel
        - Set the size for 304/not modified resources from cached resource.
        - Add response headers size to resource transfer size.
        https://bugs.webkit.org/show_bug.cgi?id=52886

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.get transferSize):
        (WebInspector.Resource.prototype.set responseHeaders):
        (WebInspector.Resource.prototype._headersSize):
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):

2011-01-26  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Simon Hausmann.

        Fixed TiledBacking store to take into account new dirty regions caused by
        paint time layouts.

        Flawed rendering design for QtWebKit resulting in artifacts being displayed
        https://bugs.webkit.org/show_bug.cgi?id=49184

        There are no new tests as this patch aims at fixing flicker that
        happen randomly, mostly on slow hardware, thus are hard to reproduce
        consistently in an automated test.

        This patch does not fully address the said bug but it is a step in the
        right direction. A full solution to the bug, as currently perceived,
        requires either a Qt GUI API change, a performance hit for QtWebKit,
        or a hack, until a full solution is provided this patch is progress.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::updateTileBuffers):
        Changed to take into account newly dirtied areas created during
        tile update initiated layouts during the same update.

2011-01-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [SKIA] Remove "current path" of GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=53124

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        * platform/graphics/skia/PlatformContextSkia.h:

2011-01-26  Zalan Bujtas <zbujtas@gmail.com>

        Reviewed by Andreas Kling.

        [Qt] Path::normalAngleAtLength() returns incorrect value on ACID3.

        QPainterPath returns angle values with the origo being at the top left corner,
        we need to account for this in normalAngleAtLength().
        This Regressed with r66979.

        No new tests as this is already covered by ACID3.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::normalAngleAtLength):

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: live edit does not update source snippet.
        https://bugs.webkit.org/show_bug.cgi?id=53097

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: Incorrect on-hover evaluation of a variable named 'profile'.
        https://bugs.webkit.org/show_bug.cgi?id=53018

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getCompletions):
        (WebCore::InjectedScript::getCompletionsOnCallFrame):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.idl:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::getCompletionsOnCallFrame):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::getCompletions):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame.updatingCallbackWrapper):
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):

2011-01-26  Hironori Bono  <hbono@chromium.org>

        Reviewed by Kent Tamura.

        A speculative fix for Bug 52422 - [chromium] More crash in
        FontFallbackList::determinePitch(const Font* font)
        https://bugs.webkit.org/show_bug.cgi?id=52422

        My previous change may not work on non-US Windows whose system fonts
        have localized aliases matching to the system locale because of a
        font-name mismatch in createFontIndirectAndGetWinName(). This change
        tries all the fonts installed in a PC and returns the first font that we
        can create without errors.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::GetLastResortFallbackFontProcData::GetLastResortFallbackFontProcData):
        Added a struct used for getLastResortFallbackFontProc().
        (WebCore::getLastResortFallbackFontProc): Added a callback for EnumFontFamilies().
        (WebCore::FontCache::getLastResortFallbackFont): Use EnumFontFamilies() to find a last-resort font.

2011-01-26  James Robinson  <jamesr@chromium.org>

        Reviewed by Nate Chapin.

        Add a DOMTimeStamp parameter to the requestAnimationFrame callback
        https://bugs.webkit.org/show_bug.cgi?id=53142

        This adds a DOMTimeStamp parameter to the requestAnimationFrame callback to more
        closely match mozilla's proposal.  This is useful if the page has multiple imperative animations
        and wants to ensure that they all remain synchronized.  If each callback used Date.now() to
        update its animation state, they would potentially be out of sync with each other.  If they use
        the timestamp then all callbacks for the same "frame" will update to the same state.

        Test: fast/animation/request-animation-frame-timestamps.html

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithClass2Param):
        * dom/Document.cpp:
        (WebCore::Document::serviceScriptedAnimations):
        * dom/Document.h:
        * dom/RequestAnimationFrameCallback.h:
        * dom/RequestAnimationFrameCallback.idl:
        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations):
        * page/FrameView.h:

2011-01-25  Yuzo Fujishima  <yuzo@google.com>

        Unreviewed attempt to fix compilation error for Chromium Clang.

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::advance):

2011-01-25  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Dan Bernstein.

        ComplexTextController incorrectly conflates string length and range of indexes
        https://bugs.webkit.org/show_bug.cgi?id=52760

        Test: fast/text/offsetForPosition-complex-fallback.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::ComplexTextRun::setIsNonMonotonic):
        (WebCore::ComplexTextController::advance):
        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::create):
        (WebCore::ComplexTextController::ComplexTextRun::indexEnd):
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):

2011-01-25  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Scrollbars don't work correctly for top-to-bottom text in an overflow: scroll area
        https://bugs.webkit.org/show_bug.cgi?id=53048

        Test: fast/overflow/overflow-rtl-vertical-origin.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollPosition):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        Take the scroll origin into account when calculating scrollbars in more places.

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

        Windows production build fix.
        Use correct configuration-specific path in makefile.

        * WebCore.vcproj/WebCore.make:

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

        Reviewed by Dimitri Glazkov.

        Radio button group state is not restored correctly
        https://bugs.webkit.org/show_bug.cgi?id=50442

        Fixes a bug that radio button states are not restored correctly in
        a case that non-first radio button in a group is checked.

        If "checked" attribute is present, the radio button is checked and
        other radio buttons in the group are unchecked. This behavior
        disturbs form state restoring. This patch changes this behavior so
        that the "checked" attribute handling is delayed after form state
        restoring.

        Test: fast/forms/state-restore-radio-group.html

        * html/HTMLFormControlElement.h:
         Make finishParsingChildren() protected so that HTMLInpuElement can call it.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
         - Add createdByParser parameter.
         - Initialize m_stateRestored and m_parsingInProgress.
        (WebCore::HTMLInputElement::create): Sync with the constructor.
        (WebCore::HTMLInputElement::restoreFormControlState):
         Set m_stateRestored in order to refer it in finishParsingChildren().
        (WebCore::HTMLInputElement::parseMappedAttribute):
         Don't call setChecked() during parsing. Move setNeedsValidityCheck()
         to setChecked().
        (WebCore::HTMLInputElement::finishParsingChildren):
         Call setChecked() if form state is not restored.
        (WebCore::HTMLInputElement::setChecked):
         Move setNeedsValidityCheck() from parseMappedAttribute() because
         finishParsingChildren() also needs to call setNeedsValidityCheck().
        * html/HTMLInputElement.h:
         - Remove the default value of HTMLFormElement* of the HTMLInputElement
           constructor, and add createdByParser parameter.
         - Introduce m_parsingInProgress and m_stateRestored.
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::HTMLIsIndexElement):
         Sync with the HTMLInputElement constructor change.
        * html/HTMLTagNames.in: Add constructorNeedsCreatedByParser flag.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::MediaControlInputElement):
         Sync with the HTMLInputElement constructor change.
        * rendering/ShadowElement.cpp:
        (WebCore::ShadowInputElement::ShadowInputElement): ditto.
        * rendering/ShadowElement.h:
        (WebCore::ShadowElement::ShadowElement): ditto.

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

        Reviewed by Dimitri Glazkov.

        HTMLFormElement::checkValidity() returns incorrect result if 'invalid' events are canceled.
        https://bugs.webkit.org/show_bug.cgi?id=52565

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
          Check checkInvalidControlsAndCollectUnhandled() result instead of
          checking emptiness of unhandled invalid controls list.
        (WebCore::HTMLFormElement::checkValidity): ditto.
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
          Renamed from collectUnhandledInvalidControls().
          Returns true if there is any invalid control regardless of event canceling.
        * html/HTMLFormElement.h: Rename collectUnhandledInvalidControls() to
          checkInvalidControlsAndCollectUnhandled().

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

        Reviewed by Dimitri Glazkov.

        Range and number inputs should reject increment and decrement by
        keyboard or mouse wheel if they are disabled or read-only
        https://bugs.webkit.org/show_bug.cgi?id=53151

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent): Check disabled() and readOnly().
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleKeydownEventForSpinButton): ditto.
        (WebCore::TextFieldInputType::handleWheelEventForSpinButton): ditto.

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

        Reviewed by Dimitri Glazkov.

        API to support localized numbers for <input type=number>
        https://bugs.webkit.org/show_bug.cgi?id=45730

        Introduce platform/text/LocalizedNumber.h, and
        LocalizedNumberNone.cpp, which is an empty implementation of the
        functions in LocalizedNumber.h.  We use LocalizedNumberNone.cpp in
        all platforms for now.

        A string in a type=number field is parsed as a localized number
        first. If the parsing fails, it is parsed as the HTML5 number.

        We introduce HTMLInputElement::visibleValue(). It represents a value
        which should be drawn by a renderer. HTMLInputElement::value() always
        returns a number formatted for HTML5, and visibleValue() may return a
        localized number.

        No new tests because this doesn't change any behavior.

        * Android.mk: Add LocalizedNumber.h and/or LocalizedNumberNone.cpp.
        * CMakeLists.txt: ditto.
        * GNUmakefile.am: ditto.
        * WebCore.gypi: ditto.
        * WebCore.pro: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * dom/InputElement.h: Add visibleValue().
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::visibleValue): Added.  Just call InputType::visibleValue().
        * html/HTMLInputElement.h: Declare visibleValue().
        * html/InputType.cpp:
        (WebCore::InputType::visibleValue): Add the default implementation of
          visibleValue(), which returns HTMLInputElement::value().
        * html/InputType.h: Add declarations.
        * html/NumberInputType.cpp:
        (WebCore::isHTMLNumberCharacter): Renamed from isNumberCharacter().
        (WebCore::isNumberCharacter): Calls isLocalizedNumberCharacter() and isHTMLNumberCharacter().
        (WebCore::NumberInputType::visibleValue):
          Returns a localized number string produced by formatLocalizedNumber().
        (WebCore::NumberInputType::isAcceptableValue): Calls parseLocalizedNumber().
        (WebCore::NumberInputType::sanitizeValue): Calls parseLocalizedNumber().
        * html/NumberInputType.h: Add declarations.
        * platform/text/LocalizedNumber.h: Added.
        * platform/text/LocalizedNumberNone.cpp: Added.
        (WebCore::parseLocalizedNumber):
        (WebCore::formatLocalizedNumber):
        (WebCore::isLocalizedNumberCharacter):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::updateFromElement):
          Calls InputElement::visibleValue() instead of value().
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::visibleValue): Added. It just calls value().

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=53143
        Add IntRectHash

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/IntRectHash.h: Added.

        * platform/graphics/IntSizeHash.h: Don't do "using WebCore::IntSize"!

2011-01-25  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Ryosuke Niwa.

        Remove trailing whitespace in HTMLInputElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=53152

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateCheckedRadioButtons):
        (WebCore::HTMLInputElement::applyStep):
        (WebCore::HTMLInputElement::updateFocusAppearance):
        (WebCore::HTMLInputElement::mapToEntry):
        (WebCore::HTMLInputElement::setAutofilled):
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument):
        (WebCore::HTMLInputElement::didMoveToNewOwnerDocument):

2011-01-25  Mike Reed  <reed@google.com>

        Reviewed by James Robinson.

        DrawingBufer::reset() today checks if the new size is the same as its
        m_size, and if so, returns immediately. This does not match the
        semantics of <canvas>, which wants to clear its contents anytime the
        size is specified.
        https://bugs.webkit.org/show_bug.cgi?id=53149

        Test: Covered by existing <canvas> tests using gpu.

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

2011-01-25  Cris Neckar  <cdn@chromium.org>

        Reviewed by Adam Barth.

        Add a hashset of DOMURLs to ScriptExecutionContext to track back references.
        https://bugs.webkit.org/show_bug.cgi?id=53038

        Test: fast/dom/window-domurl-crash.html

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::createdDomUrl):
        (WebCore::ScriptExecutionContext::destroyedDomUrl):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::domUrls):
        * html/DOMURL.cpp:
        (WebCore::DOMURL::DOMURL):
        (WebCore::DOMURL::~DOMURL):
        (WebCore::DOMURL::contextDestroyed):
        * html/DOMURL.h:
        (WebCore::DOMURL::scriptExecutionContext):

2011-01-23  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=52983
        Eliminate m_tagHistory pointer from CSSSelector

        Keep the component selectors in the array in CSSSelectorList instead
        of maintaining a linked list between them. This allows eliminating
        m_tagHistory pointer, shrinking CSSSelector by 25% (selection performance
        seems to improve some too due to better locality).

        * WebCore.xcodeproj/project.pbxproj:
        
            Make CSSSelector.h a private header.
        
        * css/CSSGrammar.y:
        
            Use CSSParserSelector during parsing to keep the tag history in 
            a linked list. This is flattened to an array after parsing.
            Use accessors for setting selector values.
            Use OwnPtr in selector vector.
            
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::CSSPageRule):
        * css/CSSPageRule.h:
        (WebCore::CSSPageRule::create):
        
            Simplify.
    
        * css/CSSParser.cpp:
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::createFloatingSelector):
        (WebCore::CSSParser::sinkFloatingSelector):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::updateSpecifiersWithElementName):
        (WebCore::CSSParser::createPageRule):
        * css/CSSParser.h:
        (WebCore::CSSParser::reusableSelectorVector):
        
            CSSSelector -> CSSParserSelector.
            Use OwnPtr in selector vector.
            
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::CSSParserSelector):
        (WebCore::CSSParserSelector::~CSSParserSelector):
        * css/CSSParserValues.h:
        (WebCore::CSSParserSelector::releaseSelector):
        (WebCore::CSSParserSelector::setTag):
        (WebCore::CSSParserSelector::setValue):
        (WebCore::CSSParserSelector::setAttribute):
        (WebCore::CSSParserSelector::setArgument):
        (WebCore::CSSParserSelector::setSimpleSelector):
        (WebCore::CSSParserSelector::setMatch):
        (WebCore::CSSParserSelector::setRelation):
        (WebCore::CSSParserSelector::setForPage):
        (WebCore::CSSParserSelector::pseudoType):
        (WebCore::CSSParserSelector::isUnknownPseudoElement):
        (WebCore::CSSParserSelector::isSimple):
        (WebCore::CSSParserSelector::tagHistory):
        (WebCore::CSSParserSelector::setTagHistory):
        
            Linked list used during parsing.
            Avoid recursive destruction.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        (WebCore::CSSSelector::operator==):
        (WebCore::CSSSelector::selectorText):
        (WebCore::CSSSelector::setSimpleSelector):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::tagHistory):
        (WebCore::CSSSelector::tag):
        (WebCore::CSSSelector::value):
        (WebCore::CSSSelector::setTag):
        (WebCore::CSSSelector::isLastInTagHistory):
        (WebCore::CSSSelector::setNotLastInTagHistory):
        (WebCore::CSSSelector::RareData::RareData):
        (WebCore::CSSSelector::RareData::~RareData):
        (WebCore::CSSSelector::createRareData):
        (WebCore::CSSSelector::setValue):
        
            Remove m_tagHistory.
            Keep m_value in the union with the rare data pointer instead.
            Make m_value and m_tag private, implement accessors.
            Add a new bit to indicate end of the tag history (multipart selector).
            Eliminate complex destruction. Selectors are now deleted as an array or by a CSSParserSelector chain.
            
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::adoptSelectorVector):
        
            Flatten everything to an array.
        
        (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
        * css/CSSSelectorList.h:
        (WebCore::CSSSelectorList::hasOneSelector):
        (WebCore::CSSSelectorList::next):
        
            Skip over the subparts of multipart selectors to find the next selector.
    
        * css/CSSStyleRule.h:
        (WebCore::CSSStyleRule::adoptSelectorVector):
        
            CSSSelector -> CSSParserSelector.
            
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::CSSRuleSet::addRule):
        (WebCore::collectIdsAndSiblingRulesFromList):
        (WebCore::CSSStyleSelector::matchPageRulesForList):
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        * dom/SelectorNodeList.cpp:
        (WebCore::createSelectorNodeList):
        
            Use accessors.

2011-01-25  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Support small caps in complex text on linux
        https://bugs.webkit.org/show_bug.cgi?id=53051

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::nextScriptRun): Break runs at small caps boundaries.
        (WebCore::ComplexTextController::setupFontForScriptRun): Setup small caps font data if needed.
        * platform/graphics/chromium/ComplexTextControllerLinux.h: Store small caps text in separate string.

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

        Rubber-stamped by Adam Roben.

        Windows production build fix.
        Use correct environment variable escaping

        * WebCore.vcproj/WebCore.make:

2011-01-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Empty URLs are never display isolated
        https://bugs.webkit.org/show_bug.cgi?id=53053

        This check mirrors the check in the local case.  There isn't a good way
        to test this with a LayoutTest, but it is tested in Chromium (where
        this registry is used).

        * platform/SchemeRegistry.cpp:
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated):

2011-01-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Pipe a timestamp down into the PlatformWheelEvent for the Mac.
        https://bugs.webkit.org/show_bug.cgi?id=53111

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        (WebCore::PlatformWheelEvent::timestamp):
        Add timestamp member.

        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        Initialize the timestamp from the event.

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

        Unreviewed, rolling out r76625.
        http://trac.webkit.org/changeset/76625
        https://bugs.webkit.org/show_bug.cgi?id=53119

        "incorrect pixel test results" (Requested by rniwa on
        #webkit).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):

2011-01-25  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r76614.

        * platform/FileSystem.h:

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

        Reviewed by Darin Adler.

        Adding border and padding to the calculation of the local caret rect for RenderBoxes.

        Undo moves caret to invalid position
        https://bugs.webkit.org/show_bug.cgi?id=49744

        Tests: editing/selection/caret-painting-after-paste-undo-rtl.html
               editing/selection/caret-painting-after-paste-undo.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):

2011-01-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add hasPreciseScrollingDeltas bit to PlatformWheelEvent on the Mac.
        https://bugs.webkit.org/show_bug.cgi?id=53107

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        (WebCore::PlatformWheelEvent::hasPreciseScrollingDeltas):
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

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

        Reviewed by Eric Carlson.

        REGRESSION (r72119): Audio never plays on Star Wars intro animation
        https://bugs.webkit.org/show_bug.cgi?id=52467
        
        QuickTime's eat/m4a movie importer compontent doesn't list audio/m4a as a mime
        type which it supports, though it handles .m4a files just fine.  Change the way
        we build the list of supported MIME Types through a new WebKitSystemInterface
        function.
        
        Caused by r72119, which adds system-specific extension->MIME entries to the cache
        before global entries, and the system-specific entries include QuickTime's registry 
        entries which contain the audio/m4a MIME type, while its components do not.

        Test: media/audio-mpeg4-supported.html

        * WebCore.vcproj/QTMovieWinCommon.vsprops:
        * platform/graphics/win/QTMovie.cpp:
        (getMIMETypeCallBack):
        (initializeSupportedTypes):
        (QTMovie::countSupportedTypes): gSupportedTypes is now a CFArrayRef.
        (QTMovie::getSupportedType): Ditto.

2011-01-25  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Remove PlatformBridge::idbShutdown()
        https://bugs.webkit.org/show_bug.cgi?id=53077

        Since Chromium r72157, this is not used anymore. The previous use was
        to signal to the embedder that IndexedDB was shutting down, but we
        agreed it is better if the embedder keeps track of that itself.

        No new tests: this does not change any functionality.

        * platform/chromium/PlatformBridge.h:
        * storage/IDBFactoryBackendInterface.cpp:
        * storage/IDBFactoryBackendInterface.h:
        (WebCore::IDBFactoryBackendInterface::~IDBFactoryBackendInterface):
        * storage/chromium/IDBFactoryBackendInterface.cpp:

2011-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit is using CSBackupSetItemExcluded incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=53095
        rdar://problem/8790540

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::performOpenInitialization): Added code to
        exclude the database from backup one time, and record inside the
        database that this has been done.
        (WebCore::IconDatabase::wasExcludedFromBackup): Added.
        (WebCore::IconDatabase::setWasExcludedFromBackup): Added.
        * loader/icon/IconDatabase.h: Added new functions above.

        * platform/FileSystem.cpp:
        (WebCore::canExcludeFromBackup): Added.
        (WebCore::excludeFromBackup): Added.

        * platform/FileSystem.h: Added canExcludeFromBackup, excludeFromBackup,
        and pathAsURL functions. Cleaned up ifdefs and comments a bit and sorted
        things alphabetically, particularly platform-specific sections.

        * platform/cf/FileSystemCF.cpp:
        (WebCore::pathAsURL): Added.

        * platform/mac/FileSystemMac.mm:
        (WebCore::canExcludeFromBackup): Added.
        (WebCore::excludeFromBackup): Added.

        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream): Changed to call pathAsURL.
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream): Ditto.

2011-01-25  Helder Correia  <helder@sencha.com>

        Reviewed by Dirk Schulze.

        REGRESSION(75139): SVG gradients are not applied to texts
        https://bugs.webkit.org/show_bug.cgi?id=52531

        CGContextConcatCTM should use the CGLayer context, not the
        GraphicsContext. Also, the CTM needs to be adjusted (translated).
        This fixes SVG text gradient fill.

        Test: svg/css/composite-shadow-text.svg

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

2011-01-25  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ryosuke Niwa.

        Cannot extend or modify forward by word over a non-contenteditable region
        https://bugs.webkit.org/show_bug.cgi?id=53070

        Test: editing/selection/extend-forward-by-word-over-non-editable.html

        Change all instances of honorEditableBoundaryAtOrAfter to honorEditableBoundaryAtOrBefore and vice versa in the
        functions which determine the end/start of words/lines/sentences in visible_units.cpp.

        This fixes the bug where moving forwards by a word over a non-contenteditable region would place the cursor
        inside that region, and then get moved back to the start of the word due to honorEditableBoundaryAtOrBefore.
        The cursor is now moved to the end of the region (which is effectively a noop in this case).

        * editing/visible_units.cpp: Change all instances of honorEditableBoundaryAtOrAfter to
        honorEditableBoundaryAtOrBefore and vice versa.
        (WebCore::previousWordPosition):
        (WebCore::nextWordPosition):
        (WebCore::startOfLine):
        (WebCore::endOfLine):
        (WebCore::previousSentencePosition):
        (WebCore::nextSentencePosition):
        (WebCore::logicalStartOfLine):
        (WebCore::logicalEndOfLine):

2011-01-25  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed build fix.
        After r76466, efsrv.lib is used unconditionally.
        Don't guard it with ENABLE_NETSCAPE_PLUGIN_API.

        * WebCore.pro:

2011-01-24  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Style cleanup for WebGLRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=52352

        * html/canvas/WebGLBuffer.cpp:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLObject.cpp:
        * html/canvas/WebGLProgram.cpp:
        * html/canvas/WebGLRenderbuffer.cpp:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::blendFunc):
        (WebCore::WebGLRenderingContext::createShader):
        (WebCore::WebGLRenderingContext::deleteBuffer):
        (WebCore::WebGLRenderingContext::deleteShader):
        (WebCore::WebGLRenderingContext::deleteTexture):
        (WebCore::WebGLRenderingContext::disableVertexAttribArray):
        (WebCore::WebGLRenderingContext::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContext::validateRenderingState):
        (WebCore::WebGLRenderingContext::enableVertexAttribArray):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::detachAndRemoveAllObjects):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLShader.cpp:
        * html/canvas/WebGLTexture.cpp:
        * html/canvas/WebGLUniformLocation.cpp:
        * html/canvas/WebGLUniformLocation.h:

2011-01-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Eric Seidel.

        Change ENABLE_3D_CANVAS to ENABLE_WEBGL
        https://bugs.webkit.org/show_bug.cgi?id=53041

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * GNUmakefile.am:
        * WebCore.pro:
        * bindings/generic/RuntimeEnabledFeatures.h:
        * bindings/js/JSArrayBufferCustom.cpp:
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDataViewCustom.cpp:
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSFloat32ArrayCustom.cpp:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * 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/JSWebGLRenderingContextCustom.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        (WebCore::JSXMLHttpRequest::send):
        (WebCore::JSXMLHttpRequest::response):
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        * bindings/v8/custom/V8DataViewCustom.cpp:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::getCSSCanvasContextCallback):
        * bindings/v8/custom/V8Float32ArrayCustom.cpp:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::getContextCallback):
        * bindings/v8/custom/V8Int16ArrayCustom.cpp:
        * bindings/v8/custom/V8Int32ArrayCustom.cpp:
        * bindings/v8/custom/V8Int8ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint16ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint32ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint8ArrayCustom.cpp:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseAccessorGetter):
        (WebCore::V8XMLHttpRequest::sendCallback):
        * features.pri:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::reset):
        * html/HTMLCanvasElement.h:
        * html/canvas/ArrayBuffer.cpp:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/ArrayBufferView.cpp:
        * html/canvas/ArrayBufferView.idl:
        * html/canvas/DataView.cpp:
        * html/canvas/DataView.idl:
        * html/canvas/Float32Array.cpp:
        * html/canvas/Float32Array.idl:
        * html/canvas/Int16Array.cpp:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.cpp:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.cpp:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESStandardDerivatives.cpp:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESTextureFloat.cpp:
        * html/canvas/OESTextureFloat.idl:
        * html/canvas/Uint16Array.cpp:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.cpp:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.cpp:
        * html/canvas/Uint8Array.idl:
        * html/canvas/WebGLActiveInfo.idl:
        * html/canvas/WebGLBuffer.cpp:
        * html/canvas/WebGLBuffer.idl:
        * html/canvas/WebGLContextAttributes.cpp:
        * html/canvas/WebGLContextAttributes.idl:
        * html/canvas/WebGLContextEvent.idl:
        * html/canvas/WebGLExtension.cpp:
        * html/canvas/WebGLFramebuffer.cpp:
        * html/canvas/WebGLFramebuffer.idl:
        * html/canvas/WebGLGetInfo.cpp:
        * html/canvas/WebGLObject.cpp:
        * html/canvas/WebGLProgram.cpp:
        * html/canvas/WebGLProgram.idl:
        * html/canvas/WebGLRenderbuffer.cpp:
        * html/canvas/WebGLRenderbuffer.idl:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLShader.cpp:
        * html/canvas/WebGLShader.idl:
        * html/canvas/WebGLTexture.cpp:
        * html/canvas/WebGLTexture.idl:
        * html/canvas/WebGLUniformLocation.cpp:
        * html/canvas/WebGLUniformLocation.idl:
        * html/canvas/WebKitLoseContext.cpp:
        * html/canvas/WebKitLoseContext.idl:
        * page/DOMWindow.idl:
        * platform/graphics/ANGLEWebKitBridge.cpp:
        * platform/graphics/GraphicsContext3D.cpp:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        * platform/graphics/gpu/DrawingBuffer.cpp:
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/mac/WebGLLayer.mm:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/qt/Extensions3DQt.cpp:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        * platform/graphics/qt/GraphicsLayerQt.h:
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::isAcceleratedCanvas):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::containsPaintedContent):
        (WebCore::RenderLayerBacking::contentChanged):
        * webaudio/AudioBuffer.cpp:
        * webaudio/AudioBuffer.idl:
        * webaudio/RealtimeAnalyser.cpp:
        * webaudio/RealtimeAnalyser.h:
        * webaudio/RealtimeAnalyserNode.h:
        * webaudio/RealtimeAnalyserNode.idl:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setResponseType):
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

2011-01-25  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Prepare for landing of detailed heap snapshots.

        - Introduce Preferences.detailedHeapProfiles flag for controlling
          querying of detailed heap snapshots.
        - Add boilerplate code for the new view.
        - Factor out common code.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/ScriptProfiler.h:
        (WebCore::ScriptProfiler::HeapSnapshotControl::~HeapSnapshotControl):
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * bindings/v8/ScriptProfiler.h:
        (WebCore::ScriptProfiler::HeapSnapshotControl::~HeapSnapshotControl):
        * inspector/Inspector.idl:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::takeHeapSnapshot):
        * inspector/InspectorProfilerAgent.h:
        * inspector/front-end/DetailedHeapshotView.js: Added.
        (WebInspector.DetailedHeapshotView):
        (WebInspector.DetailedHeapshotView.prototype.get statusBarItems):
        (WebInspector.DetailedHeapshotView.prototype.get profile):
        (WebInspector.DetailedHeapshotView.prototype.set profile):
        (WebInspector.DetailedHeapshotView.prototype.show):
        (WebInspector.DetailedHeapshotView.prototype.hide):
        (WebInspector.DetailedHeapshotProfileType):
        (WebInspector.DetailedHeapshotProfileType.prototype.get buttonTooltip):
        (WebInspector.DetailedHeapshotProfileType.prototype.get buttonStyle):
        (WebInspector.DetailedHeapshotProfileType.prototype.buttonClicked):
        (WebInspector.DetailedHeapshotProfileType.prototype.get welcomeMessage):
        (WebInspector.DetailedHeapshotProfileType.prototype.createSidebarTreeElementForProfile):
        (WebInspector.DetailedHeapshotProfileType.prototype.createView):
        * inspector/front-end/HeapSnapshot.js: Added.
        (WebInspector.HeapSnapshotEdgesIterator):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get done):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get isElement):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get isHidden):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get name):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.next):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get node):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get nodeIndex):
        (WebInspector.HeapSnapshotEdgesIterator.prototype._getNameOrIndex):
        (WebInspector.HeapSnapshotEdgesIterator.prototype._getType):
        (WebInspector.HeapSnapshotNodeWrapper):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get edges):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get edgesCount):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get instancesCount):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get isHidden):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get name):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get selfSize):
        (WebInspector.HeapSnapshotNodeWrapper.prototype._getName):
        (WebInspector.HeapSnapshotNodeWrapper.prototype._getEdges):
        (WebInspector.HeapSnapshotNodeWrapper.prototype._getType):
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype.get rootEdges):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotProfileType.prototype.buttonClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._setRecordingProfile):
        (WebInspector.ProfilesPanel.prototype._reportHeapSnapshotProgress):
        (WebInspector.ProfilerDispatcher.prototype.setRecordingProfile):
        (WebInspector.ProfilerDispatcher.prototype.reportHeapSnapshotProgress):
        * inspector/front-end/Settings.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

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

        Reviewed by Pavel Feldman.

        Web Inspector: remove "attached" state related methods from InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=53086

        * WebCore.exp.in:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        * inspector/InspectorSettings.cpp:
        (WebCore::InspectorSettings::InspectorSettings):
        * inspector/InspectorSettings.h:

2011-01-25  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Symbian] RVCT fails to compile [U|I]nt[8|16|32]Array.h
        https://bugs.webkit.org/show_bug.cgi?id=51873
        
        Replace the using declaration, because it doesn't compile on RVCT, and WINSCW has the same issue.
        No new functionality so no new tests.

        * html/canvas/Int32Array.h:
        (WebCore::Int32Array::set):
        * html/canvas/Int8Array.h:
        (WebCore::Int8Array::set):
        * html/canvas/Uint16Array.h:
        (WebCore::Uint16Array::set):
        * html/canvas/Uint32Array.h:
        (WebCore::Uint32Array::set):
        * html/canvas/Uint8Array.h:
        (WebCore::Uint8Array::set):

2011-01-25  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        Repaint SVG elements with filter instead of relayout where possible
        https://bugs.webkit.org/show_bug.cgi?id=52200

        This patch allows repainting of filters, when their
        attribute changes does not require relayout.

        Existing dynamic-update tests cover this feature.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::clearResult): Clearing the currently stored image
        before repainting.
        * platform/graphics/filters/FilterEffect.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGResourceFilter): Not only the filter primitives,
        but filters should also be detected to allow safe testing and casting.
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives): Passing the renderer.
        (WebCore::RenderSVGResourceFilter::applyResource):
        determineFilterPrimitiveSubregion does not require the filter anymore.
        (WebCore::RenderSVGResourceFilter::postApplyResource): Repaint
        if lastEffect->hasResult() is false.
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
        Searching for all FilterEffects, whose created by the current FilterElement,
        and clearing all resulting images depending on those FilterEffects.
        * rendering/svg/RenderSVGResourceFilter.h:
        (WebCore::RenderSVGResourceFilter::isSVGResourceFilter):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):
        The filter argument is unnecessary anymore. But is is still kept as a static
        member, since the primitive renderer still does not know about the
        FilterEffect objects.
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        (WebCore::RenderSVGResourceFilterPrimitive::RenderSVGResourceFilterPrimitive):
        (WebCore::RenderSVGResourceFilterPrimitive::primitiveAttributeChanged):
        Calls RenderSVGResourceFilter::primitiveAttributeChanged.
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        Setting the new attribute value for each FilterEffect.
        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged):
        * svg/SVGFEDiffuseLightingElement.h:
        Calling primitiveAttributeChanged.
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setFilterEffectAttribute):
        This function will be removed when all FilterElement implements
        their setFilterEffectAttribute
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::primitiveAttributeChanged):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::appendEffectToEffectReferences): The
        renderers are assigned to the filter effects.
        (WebCore::SVGFilterBuilder::clearEffects):
        (WebCore::SVGFilterBuilder::clearResultsRecursive): Recursively
        clearing the result images for those filters, whose depend on
        the starting filter.
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::effectReferences): 'get' is unnecessary
        (WebCore::SVGFilterBuilder::effectByRenderer): returns the
        FilterEffect belongs to this RenderObject.

2011-01-25  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG is missing to-animation support for Path
        https://bugs.webkit.org/show_bug.cgi?id=52982

        SVG was missing 'to' animation support for SVG paths. Even the fallback to discrete
        animation did not work and an assert was thrown, because of the missing m_fromPath.
        This also influences a test of the W3C test suite. Subtest 2 of animate-elem-83-t.svg passes now.

        Test: svg/animations/animate-path-to-animation.html

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue): Take the value of the last SVGAnimateElement for
        m_fromPath, since 'to' animations are accumulative.
        (WebCore::SVGAnimateElement::calculateFromAndToValues): Added support for 'to' animations.
        (WebCore::SVGAnimateElement::resetToBaseValue): Set m_animatedPath on the first animation element to baseVal.
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::copySVGPathByteStream): Return copy of current byte stream.

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: bind resources to URLs upon adding them into the tree.
        https://bugs.webkit.org/show_bug.cgi?id=53013

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype._processCachedResources):
        (WebInspector.NetworkManager.prototype.inflightResourceForURL):
        (WebInspector.NetworkDispatcher):
        (WebInspector.NetworkDispatcher.prototype.willSendRequest):
        (WebInspector.NetworkDispatcher.prototype.markResourceAsCached):
        (WebInspector.NetworkDispatcher.prototype.didReceiveResponse):
        (WebInspector.NetworkDispatcher.prototype.didReceiveContentLength):
        (WebInspector.NetworkDispatcher.prototype.didFinishLoading):
        (WebInspector.NetworkDispatcher.prototype.didFailLoading):
        (WebInspector.NetworkDispatcher.prototype.willSendWebSocketHandshakeRequest):
        (WebInspector.NetworkDispatcher.prototype.didReceiveWebSocketHandshakeResponse):
        (WebInspector.NetworkDispatcher.prototype.didCloseWebSocket):
        (WebInspector.NetworkDispatcher.prototype._appendRedirect):
        (WebInspector.NetworkDispatcher.prototype._startResource):
        (WebInspector.NetworkDispatcher.prototype._finishResource):
        (WebInspector.NetworkDispatcher.prototype._createResource):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel.prototype.addResourceToFrame):
        (WebInspector.ResourceTreeModel.prototype._bindResourceURL):
        (WebInspector.ResourceTreeModel.prototype._clearResources):
        (WebInspector.ResourceTreeModel.prototype._unbindResourceURL):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowSourceLine):
        (WebInspector.ResourcesPanel.prototype.showSourceLine):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._parsedScriptSource):
        (WebInspector.ScriptsPanel.prototype._addScript):

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

        Reviewed by Dirk Schulze.

        Introduce FontMetrics abstraction
        https://bugs.webkit.org/show_bug.cgi?id=51456

        Use accurate floating-point metrics for SVG Font calculations instead of casting float -> integer.
        This hopefully fixes differences between 32/64 bit bots.

        Needs new layout test results for several platforms, which need to be taken from the bots landing afterwards.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::initCharWidths):

2011-01-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: debugger and browser debugger agents should manage sticky breakpoints independently.
        https://bugs.webkit.org/show_bug.cgi?id=52999

        * inspector/Inspector.idl:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::enableDebugger):
        (WebCore::InspectorAgent::inspectedURLWithoutFragment):
        * inspector/InspectorAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::setAllJavaScriptBreakpoints):
        (WebCore::InspectorDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorDebuggerAgent::restoreBreakpoints):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.BreakpointManager.prototype._pushBreakpointsToBackend):

2011-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Crash in some pages containing flash
        https://bugs.webkit.org/show_bug.cgi?id=53016

        Flash plugin can produce X errors that are handled by the GDK X
        error handler, which exits the process. Since we don't want to
        crash due to flash bugs, we install a custom error handler to show
        a warning when a X error happens without aborting.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::webkitgtkXError):
        (WebCore::PluginPackage::load):

2011-01-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement spin buttons in RenderThemeGtk
        https://bugs.webkit.org/show_bug.cgi?id=51454

        Paint inner up/down buttons for spin button elements when building
        with GTK+ 3.x.

        Test results will land with the GTK+ 2.x version of this patch.

        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeGtk::paintInnerSpinButton):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::spinButtonArrowSize):
        (WebCore::RenderThemeGtk::adjustInnerSpinButtonStyle):
        (WebCore::paintSpinArrowButton):
        (WebCore::RenderThemeGtk::paintInnerSpinButton):

2011-01-24  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed. Missed move of one m_deleted use to be outside NDEBUG block
        in r76575.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::~CachedResource):

2011-01-24  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Tony Chang.

        Add runtime checks for invariants in memory cache
        https://bugs.webkit.org/show_bug.cgi?id=53059
        
        To help track down bug 53045, add some CRASH calls in addition to
        ASSERTs, so that we can track down failures in reliability bots.

        Just some checks, no new tests necessary.
        
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::~CachedResource):

2011-01-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Leaking CSSRuleDataList objects
        https://bugs.webkit.org/show_bug.cgi?id=53062

        Fix leaked CSSRuleDataLists added to the m_pseudoRules hash.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::~CSSRuleSet):

2011-01-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        Refcount Images used in rendering code
        https://bugs.webkit.org/show_bug.cgi?id=52701

        Change StyleImage::image(RenderObject*, const IntSize&) and
        CSSImageGeneratorValue::image(RenderObject*, const IntSize&) to
        return PassRefPtr<Image>, and adjust other code accordingly.
        
        This allows us to return one-time images, for example for CSS gradients
        whose appearance may change depending on factors other than the renderer
        and the destination size.

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::image):
        * css/CSSCanvasValue.h:
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        * css/CSSGradientValue.h:
        * css/CSSImageGeneratorValue.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderImageResource.h:
        (WebCore::RenderImageResource::image):
        * rendering/RenderImageResourceStyleImage.h:
        (WebCore::RenderImageResourceStyleImage::image):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::image):
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::image):
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StyleImage.h:
        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::image):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):

2011-01-24  Tony Chang  <tony@chromium.org>

        Unreviewed, round ascent and descent to match old code.

        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):

2011-01-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        perspective() transform function should take lengths
        https://bugs.webkit.org/show_bug.cgi?id=52683
        
        The argument to the perspective() transform function should
        be a Length, rather than a bare number. Bare numbers are still
        accepted (and treated as px), but this behavior is deprecated.

        Test: animations/3d/transform-perspective.html
              transforms/3d/general/3dtransform-values.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTransform): Check the units for the perspective()
        function. Allow bare numbers for backwards compatibility.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createTransformOperations): Convert
        value to Length.
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        (WebCore::clampToPostiveInteger): Helper.
        (WebCore::PerspectiveTransformOperation::blend): Blend via Lengths.
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        (WebCore::PerspectiveTransformOperation::create): double -> Length.
        (WebCore::PerspectiveTransformOperation::perspective): Ditto.
        (WebCore::PerspectiveTransformOperation::isIdentity): Ditto.
        (WebCore::PerspectiveTransformOperation::apply): Ditto.
        (WebCore::PerspectiveTransformOperation::PerspectiveTransformOperation): Assert
        that the Length is a fixed type.

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

        Reviewed by Dimitri Glazkov.

        [Windows] Textfield <input>s have different widths.
        https://bugs.webkit.org/show_bug.cgi?id=48405

        - Apply the padding override for type=text to other textfield types too.
        - Reset margin value of outer spin button, which is not used in Windows.
        - Don't add inner spin button width to the preferred text field width.
          Text fields should have the identical widths regardless of the
          existence of spin buttons.

        Test: fast/forms/input-widths.html

        * css/themeWin.css:
        (input[type="week"]):
        (input[type="week"]:disabled):
        (input[type="search"]::-webkit-search-cancel-button):
        (input::-webkit-outer-spin-button):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        Don't add inner spin button width to the preferred width.

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

        Reviewed by Dimitri Glazkov.

        Some bugs of search cancel button and spin button about state change in
        an event handler.
        https://bugs.webkit.org/show_bug.cgi?id=46950

        Fix the following problems:
         * Type=search field didn't release event capturing
         * Assertion failure when an input field with spin buttons was changed
           to another type on focus event.
         * A input field with spin button didn't release event capturing when it
           was changed to another type on focus event.

        Tests: fast/forms/input-number-change-type-on-focus.html
               fast/forms/search-hide-cancel-on-cancel.html

        * rendering/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
         - Make the variable 'input' RefPtr.  It makes the code simpler.
         - Remove visibility check on mouseup event. We should release capturing
           anyway because the cancel button may be invisible if JavaScript code
           called by the focus event removes the input value.
        (WebCore::SpinButtonElement::detach):
         - Release capturing on detach because it is possible that a spin button
           node is detached while it is capturing events.
        (WebCore::SpinButtonElement::defaultEventHandler):
          Take a reference to this and check renderer() after some functions which
          may run JavaScript code.
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
          Make the variable 'input' RefPtr to align other functions in this file.
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult): ditto.
        * rendering/TextControlInnerElements.h: Declare SpinButtonElement::detach().

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

        Reviewed by Ojan Vafai.

        Inserting multiple whitespace using text composition (IME) should insert interleaved nbsp and whitespace.
        https://bugs.webkit.org/show_bug.cgi?id=52781

        The bug was caused by stringWithRebalancedWhitespace's replacing the space at the beginning of a paragraph
        and the end of a paragraph by a non-breaking space after it replaced two consecutive spaces by a space and
        non-breaking space pattern, thereby replacing more spaces by non-breaking spaces than needed.

        Rewrote the function using Vector<UChar> to fix the bug. New function no longer calls String::replace
        multiple times but instead it traverses through the string and replaces a space that immediately follows
        another space or appears at the beginning of a paragraph or at the end of a paragraph by a non-break space.

        * editing/CompositeEditCommand.cpp:
        * editing/htmlediting.cpp:
        (WebCore::stringWithRebalancedWhitespace): Written.
        * editing/htmlediting.h:
        (WebCore::isWhitespace): Removed from CompositeEditCommand.cpp

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

        Reviewed by James Robinson.

        Web Audio API: port FFTFrame to FFTW
        https://bugs.webkit.org/show_bug.cgi?id=52989

        Ported FFTFrame class to the open-source FFTW library. Tested with
        unit tests from Chris Rogers. Made preliminary changes to GYP
        files for conditional compilation of these files; will need to be
        adjusted once FFTW is integrated as third-party source.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/audio/FFTFrame.h:
        * platform/audio/fftw: Added.
        * platform/audio/fftw/FFTFrameFFTW.cpp: Added.
        (WebCore::FFTFrame::FFTFrame):
        (WebCore::FFTFrame::~FFTFrame):
        (WebCore::FFTFrame::multiply):
        (WebCore::FFTFrame::doFFT):
        (WebCore::FFTFrame::doInverseFFT):
        (WebCore::FFTFrame::cleanup):
        (WebCore::FFTFrame::realData):
        (WebCore::FFTFrame::imagData):
        (WebCore::FFTFrame::fftwPlanForSize):

2011-01-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Reset the page scale factor on standard frame loads
        https://bugs.webkit.org/show_bug.cgi?id=53058
        <rdar://problem/8908844>

        Add a symbol needed by WebKit2.

        * WebCore.exp.in:

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

        Reviewed by Eric Seidel.

        Stop instantiating legacy editing positions in InsertTextCommand, MoveSelectionCommand,
        ReplaceSelectionCommand, SelectionController, SpellChecker, TypingCommand, and markup.cpp
        https://bugs.webkit.org/show_bug.cgi?id=52676

        Stop instantiating legacy editing positions in the following files.

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::prepareForTextInsertion):
        (WebCore::InsertTextCommand::performTrivialReplace):
        (WebCore::InsertTextCommand::input):
        (WebCore::InsertTextCommand::insertTab):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds):
        (WebCore::ReplaceSelectionCommand::mergeEndIfNeeded):
        (WebCore::ReplaceSelectionCommand::doApply):
        (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR):
        (WebCore::ReplaceSelectionCommand::performTrivialReplace):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelectionFromNone):
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::didCheck):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::makeEditableRootEmpty):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendText):
        (WebCore::StyledMarkupAccumulator::serializeNodes):
        (WebCore::highestAncestorToWrapMarkup):
        (WebCore::createMarkup):

2011-01-24  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Adler.

        Roll back r67261 ("Don't fire onclick on middle clicks") due to
        regressions.
        https://bugs.webkit.org/show_bug.cgi?id=46733

        * html/HTMLAnchorElement.cpp:
        (WebCore::isLinkClick):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::preDispatchEventHandler):
        (WebCore::HTMLInputElement::postDispatchEventHandler):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):

2011-01-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Many DOM XHTML tests time out
        https://bugs.webkit.org/show_bug.cgi?id=52553

        Properly handle the situation where a synchronous load fails before the inner
        event loop has started. In this case, we simply do not run the inner event loop,
        or else it will block indefinitely (since no GIO or libsoup callbacks will fire).

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously): Bail out of a synchronous
        load if it fails up front.

2011-01-24  Zhenyao Mo  <zmo@google.com>

        Reviewed by Eric Seidel.

        Cleanup WebGLGetInfo and related get*Parameter helpers in WebGLRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=52338

        Removed the long/unsigned long types and corresponding get functions
        and use int/unsigned int instead.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/WebGLGetInfo.cpp:
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        (WebCore::WebGLGetInfo::getInt):
        (WebCore::WebGLGetInfo::getUnsignedInt):
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getBufferParameter):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getRenderbufferParameter):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getTexParameter):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::getIntParameter):
        (WebCore::WebGLRenderingContext::getUnsignedIntParameter):
        * html/canvas/WebGLRenderingContext.h:

2011-01-24  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Adler.

        Remove sizeInBytes from GraphicsContext3D's various implementations
        https://bugs.webkit.org/show_bug.cgi?id=52339

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::sizeInBytes):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:

2011-01-24  Adam Roben  <aroben@apple.com>

        Windows Production build fix

        * WebCore.vcproj/WebCore.make: Update for move of WebCore into Source.

2011-01-24  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Refactoring: extract IntrusiveDOMWrapperMap into a seprate class and files.
        https://bugs.webkit.org/show_bug.cgi?id=52911

        Plain refactoring, covered by the existing tests.

        * WebCore.gypi: IntrusiveDOMWrapperMap.h added.
        * bindings/v8/DOMDataStore.cpp: IntrusiveDOMWrapperMap is moved out of DOMDataStore class.
        * bindings/v8/DOMDataStore.h: IntrusiveDOMWrapperMap is moved out of DOMDataStore class.
        * bindings/v8/IntrusiveDOMWrapperMap.h: Added.
        (WebCore::ChunkedTable::ChunkedTable):
        (WebCore::ChunkedTable::add):
        (WebCore::ChunkedTable::remove):
        (WebCore::ChunkedTable::clear):
        (WebCore::ChunkedTable::visit):
        (WebCore::ChunkedTable::Chunk::Chunk):
        (WebCore::ChunkedTable::clearEntries):
        (WebCore::ChunkedTable::visitEntries):
        (WebCore::IntrusiveDOMWrapperMap::IntrusiveDOMWrapperMap):
        (WebCore::IntrusiveDOMWrapperMap::get):
        (WebCore::IntrusiveDOMWrapperMap::set):
        (WebCore::IntrusiveDOMWrapperMap::contains):
        (WebCore::IntrusiveDOMWrapperMap::visit):
        (WebCore::IntrusiveDOMWrapperMap::removeIfPresent):
        (WebCore::IntrusiveDOMWrapperMap::clear):
        (WebCore::IntrusiveDOMWrapperMap::ChunkedTableTraits::move):
        (WebCore::IntrusiveDOMWrapperMap::ChunkedTableTraits::clear):
        (WebCore::IntrusiveDOMWrapperMap::ChunkedTableTraits::visit):
        * bindings/v8/StaticDOMDataStore.h: include added.

2011-01-24  Shane Stephens  <shanestephens@google.com>

        Reviewed by Chris Marrin.

        TransformationMatrix multiply operations apply operands in wrong order.
        https://bugs.webkit.org/show_bug.cgi?id=52780

        Rename TranformationMatrix::multLeft into multiply (the method does a multRight,
        not a multLeft).

        Remove TransformationMatrix::multiply, which was actually doing a multLeft.

        Fix TransformationMatrix::operator* and operator*= such that the operand is
        applied to the right-hand side of the matrix that the method is called on.
        i.e., previously "a * b" used to compute "b * a", and "a *= b" used to store
        "b * a" in "a".  This has now been fixed so "a * b" computes "a * b" and
        "a *= b" stores "a * b" in "a".

        Convert all call sites for these methods to provide operands in the correct order.

        No new tests as patch adds no new functionality.

        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::multiply):
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        (WebCore::Matrix3DTransformOperation::apply):
        * platform/graphics/transforms/MatrixTransformOperation.h:
        (WebCore::MatrixTransformOperation::apply):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::scaleNonUniform):
        (WebCore::TransformationMatrix::scale3d):
        (WebCore::TransformationMatrix::rotate3d):
        (WebCore::TransformationMatrix::skew):
        (WebCore::TransformationMatrix::applyPerspective):
        (WebCore::TransformationMatrix::multiply):
        (WebCore::TransformationMatrix::recompose):
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::operator*=):
        (WebCore::TransformationMatrix::operator*):
        * rendering/RenderLayer.cpp:
        (WebCore::transparencyClipBox):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getTransformFromContainer):
        * rendering/TransformState.cpp:
        (WebCore::TransformState::applyTransform):
        (WebCore::HitTestingTransformState::applyTransform):

2011-01-24  Andrei Popescu  <andreip@google.com>

        Reviewed by Nate Chapin.

        IndexedDatabase methods should not take arguments of type OptionsObject
        https://bugs.webkit.org/show_bug.cgi?id=53012

        This patch reverts all IDB methods, except IDBDatabase::createObjectStore and
        IDBObjectStore::createIndex, to using a plain list of arguments instead of
        grouping the various parameters inside a single OptionsObject argument.
        This decision was made on public-webapps@w3.org mailing list.

        We also add support (v8 only for now) for passing DOMStringList objects as arguments to native
        methods. The code for obtaining a DOMStringList object from a JS array of strings existed already
        in OptionsObject.cpp, I just copied it to V8Bindings.cpp and taught the v8 code generator how to
        use it.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp:
        (WebCore::v8ValueToWebCoreDOMStringList):
        * bindings/v8/V8Binding.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.idl:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * storage/IDBIndex.idl:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStore.h:
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStore.idl:

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract dispatch API from network manager.
        https://bugs.webkit.org/show_bug.cgi?id=53009

        * WebCore.xcodeproj/project.pbxproj:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager):
        (WebInspector.NetworkManager.prototype.reset):
        (WebInspector.NetworkManager.prototype.requestContent):
        (WebInspector.NetworkManager.prototype._processCachedResources):
        (WebInspector.NetworkDispatcher):
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithRequest):
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithResponse):
        (WebInspector.NetworkDispatcher.prototype._updateResourceWithCachedResource):
        (WebInspector.NetworkDispatcher.prototype.identifierForInitialRequest):
        (WebInspector.NetworkDispatcher.prototype.willSendRequest):
        (WebInspector.NetworkDispatcher.prototype.didReceiveResponse):
        (WebInspector.NetworkDispatcher.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.NetworkDispatcher.prototype.didCommitLoadForFrame):
        (WebInspector.NetworkDispatcher.prototype.didCreateWebSocket):
        (WebInspector.NetworkDispatcher.prototype._appendRedirect):
        (WebInspector.NetworkDispatcher.prototype._startResource):
        (WebInspector.NetworkDispatcher.prototype._updateResource):
        (WebInspector.NetworkDispatcher.prototype._finishResource):
        (WebInspector.NetworkDispatcher.prototype._addFramesRecursively):
        (WebInspector.NetworkDispatcher.prototype._dispatchEventToListeners):
        (WebInspector.NetworkDispatcher.prototype._createResource):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._innerRequestContent):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype.reset):
        (WebInspector.ResourceTreeModel.prototype.unbindResourceURL):

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

        Reviewed by Pavel Feldman.

        Web Inspector: [JSC] remove ScriptDebugServer::pageCreated
        https://bugs.webkit.org/show_bug.cgi?id=53007

        It's impossible to create "provisional" inspector for pages which are
        not yet created so there is no need to listen for page creation in ScriptDebugServer.

        * bindings/js/ScriptDebugServer.cpp:
        * bindings/js/ScriptDebugServer.h:
        * page/Page.cpp:
        (WebCore::Page::Page):

2011-01-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] AppCache view on resources panel is broken.
        https://bugs.webkit.org/show_bug.cgi?id=53002


        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView.prototype._update):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync):

2011-01-24  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix warnings about unregistering an invalid timer
        https://bugs.webkit.org/show_bug.cgi?id=53006

        The ShadowBuffer's purge timer ID was initialized with 0 which lead
        to us calling QObject::killTimer(0), causing some qWarnings.

        * platform/graphics/qt/ContextShadowQt.cpp:
        (WebCore::ShadowBuffer::ShadowBuffer):
        (WebCore::ShadowBuffer::schedulePurge):

2011-01-21  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Fix heap snapshot table sorting.

        Fix table sorting to avoid qsort instability artefacts.

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

        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._sortData):
        (WebInspector.HeapSnapshotDataGridList.propertyComparator.comparator):
        (WebInspector.HeapSnapshotDataGridList.propertyComparator):

2011-01-24  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Find duplicate strings in localizedStrings.js, update it.

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

        * English.lproj/localizedStrings.js:

2011-01-24  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, build fix  for r76509.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpoint):

2011-01-24  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, build fix  for r76509.

        * bindings/js/ScriptDebugServer.h:

2011-01-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: set breakpoints by line:column.
        https://bugs.webkit.org/show_bug.cgi?id=52615

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::hasBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/Inspector.idl:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setStickyBreakpoint):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::restoreBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptBreakpoint.cpp: Removed.
        * inspector/ScriptBreakpoint.h:
        (WebCore::ScriptBreakpoint::ScriptBreakpoint):
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.get url):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.JavaScriptBreakpoint.prototype._serializeToJSON):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.continueToLine):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype._breakpointSetOnBackend):
        (WebInspector.DebuggerDispatcher.prototype.breakpointResolved):

2011-01-24  Peter Beverloo  <peter@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: recognize application/x-font-woff as a valid mime-type.
        https://bugs.webkit.org/show_bug.cgi?id=52977

        No new tests.

        * inspector/front-end/inspector.js:

2011-01-24  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, fix for r76497.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show):

2011-01-24  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Use rad2deg() from WTF instead of rolling our own.
        https://bugs.webkit.org/show_bug.cgi?id=52993

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::rotate):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):

2011-01-24  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] ResourceHandleSoup: do not wait for streams to close to issue didFinishLoading
        https://bugs.webkit.org/show_bug.cgi?id=52885

        No new tests as it does not change functionality. We will not wait for
        the the input stream to close to issue didFinishLoading to
        WebCore. We expect a subtle performance improvement with this
        patch when loading complex web pages, as we wouldn't have to wait
        for the stream to close (which involves creating a thread among
        other things).

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::closeCallback):
        (WebCore::readCallback):

2011-01-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: eliminate SourceView and ScriptView classes.
        https://bugs.webkit.org/show_bug.cgi?id=52896

        SourceView and ScriptView delegate everything to SourceFrame and should be eliminated.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.prototype._highlightSelectedLine):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.createResourceView):
        (WebInspector.ResourceView.resourceViewTypeMatchesResource):
        (WebInspector.SourceFrameContentProviderForResource):  Moved from SourceView.
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype._applyDiffMarkup):
        (WebInspector.FrameResourceTreeElement.prototype._errorsWarningsUpdated):
        * inspector/front-end/ScriptView.js: Removed.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions):
        (WebInspector.ScriptsPanel.prototype._formatScript):
        (WebInspector.SourceFrameContentProviderForScript): Moved from ScriptView.
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.show):
        (WebInspector.SourceFrame.prototype.hide):
        (WebInspector.SourceFrame.prototype.hasContent):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype.performSearch.doFindSearchMatches):
        (WebInspector.SourceFrame.prototype.performSearch):
        * inspector/front-end/SourceView.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

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

        Reviewed by Csaba Osztrogonác.

        [Qt] Move project files into Source
        https://bugs.webkit.org/show_bug.cgi?id=52891

        No new tests needed.

        * WebCore.pri:
        * WebCore.pro:

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

        Unreviewed, trivial fix.

        Fix a Chromium-only assertion failure by r76491.
        https://bugs.webkit.org/show_bug.cgi?id=38982

        Separate icon loading from the FileChooser constructor in order to avoid
        ref() before adoptRef().

        * platform/FileChooser.cpp:
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::initialize):
        (WebCore::FileChooser::create):
        * platform/FileChooser.h:

2011-01-24  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        TextControlInnerElement::m_shadowParent should be removed.
        https://bugs.webkit.org/show_bug.cgi?id=52998

        No new tests. No behavioral change.

        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::TextControlInnerElement):
        * rendering/TextControlInnerElements.h:

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

        Reviewed by Pavel Feldman.

        REGRESSION (r72895): console.trace crashes
        https://bugs.webkit.org/show_bug.cgi?id=52981

        - Use local RefPtr variable for accessing PassRefPtr arguments to make sure the PassRefPtr has
        non-null value.
        - Use PassRefPtr for objects whos ownership is passed to the inspector.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorConsoleInstrumentation.h: Added. Extract inline methods called from the console into their
        own header to reduce compilation time of other classes that depend on the inspector instrumentation.
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::startConsoleTiming):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleMarkTimeline):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole):
        (WebCore::InspectorInstrumentation::addProfile):
        (WebCore::InspectorInstrumentation::profilerEnabled):
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileName):
        * inspector/InspectorDatabaseInstrumentation.h: Added. Extract inline methods called from the datanase code into their
        own header to reduce compilation time of other classes that depend on the inspector instrumentation.
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleMarkTimelineImpl):
        (WebCore::InspectorInstrumentation::addProfileImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        * inspector/InspectorInstrumentation.h:
        * page/Console.cpp: use RefPtr local variable instead of accessing PassRefPtr argument directly.
        (WebCore::Console::addMessage):
        (WebCore::Console::trace):
        (WebCore::Console::count):
        (WebCore::Console::markTimeline):
        (WebCore::Console::profileEnd):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):

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

        Reviewed by Darin Fisher.

        [Chromium] Support icon loading for <input type=file>
        https://bugs.webkit.org/show_bug.cgi?id=38982

        An icon data in Chromium port is represented as WebCore::Image. We
        don't need OS-specific code anymore.

        * WebCore.gypi:
        * platform/graphics/Icon.h:
        (WebCore::Icon::create): Add Chromium-specific factory.
        * platform/graphics/chromium/IconChromium.cpp: Added.
        * platform/graphics/chromium/IconChromiumLinux.cpp: Removed.
        * platform/graphics/chromium/IconChromiumMac.cpp: Removed.
        * platform/graphics/chromium/IconChromiumWin.cpp: Removed.
        * platform/graphics/chromium/PlatformIcon.h:

2011-01-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move search functions from SourceView to SourceFrame.
        https://bugs.webkit.org/show_bug.cgi?id=52895

        This is the last step before eliminating SourceView and ScriptView since
        this classes just delegate everything to SourceFrame.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.set visible):
        (WebInspector.SourceFrame.prototype._clearLineHighlight):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype.performSearch.doFindSearchMatches):
        (WebInspector.SourceFrame.prototype.performSearch):
        (WebInspector.SourceFrame.prototype.searchCanceled):
        (WebInspector.SourceFrame.prototype.jumpToFirstSearchResult):
        (WebInspector.SourceFrame.prototype.jumpToLastSearchResult):
        (WebInspector.SourceFrame.prototype.jumpToNextSearchResult):
        (WebInspector.SourceFrame.prototype.jumpToPreviousSearchResult):
        (WebInspector.SourceFrame.prototype.showingFirstSearchResult):
        (WebInspector.SourceFrame.prototype.showingLastSearchResult):
        (WebInspector.SourceFrame.prototype._jumpToSearchResult):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.hide):
        (WebInspector.SourceView.prototype.searchCanceled):
        (WebInspector.SourceView.prototype.performSearch):
        (WebInspector.SourceView.prototype.jumpToFirstSearchResult):
        (WebInspector.SourceView.prototype.jumpToLastSearchResult):
        (WebInspector.SourceView.prototype.jumpToNextSearchResult):
        (WebInspector.SourceView.prototype.jumpToPreviousSearchResult):
        (WebInspector.SourceView.prototype.showingFirstSearchResult):
        (WebInspector.SourceView.prototype.showingLastSearchResult):
        (WebInspector.SourceView.prototype.clearMessages):

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

        Unreviewed, rolling out r76463.
        http://trac.webkit.org/changeset/76463
        https://bugs.webkit.org/show_bug.cgi?id=52993

        It broke canvas/philip/tests/2d.path.stroke.skew.html
        (Requested by Ossy on #webkit).

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::rotate):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):

2011-01-23  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: summary bar is not resized properly with the rest of network panel
        https://bugs.webkit.org/show_bug.cgi?id=52881

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.updateSidebarWidth):
        (WebInspector.NetworkPanel.prototype._positionSummaryBar):
        (WebInspector.NetworkPanel.prototype._toggleGridMode):

2011-01-19  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        Space and tab characters "sent" by an input method give totally different results than typing them directly
        https://bugs.webkit.org/show_bug.cgi?id=5241
        
        * Introduced TextEvent::InputTypeComposition and TypingCommand::TextCompositionType to 
          distinguish text input which is originated by composition.
        * Generalized rebalanceWhitespaceAt() to rebalanceWhitespaceOnTextSubstring() to rebalancing 
          range of string on text node, instead of surrounding part of that.

        Test: editing/inserting/insert-composition-whitespace.html

        * dom/TextEvent.h:
        (WebCore::TextEvent::isComposition):
        * dom/TextEventInputType.h: Added TextEventInputComposition as a member of TextEvent::InputType
        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace):
        (WebCore::CompositeEditCommand::shouldRebalanceLeadingWhitespaceFor):
        (WebCore::CompositeEditCommand::canRebalance):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceOnTextSubstring): Added: A generalized version of rebalanceWhitespaceAt(), which takes a range inside Text string.
        * editing/CompositeEditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::insertTextForConfirmedComposition): Added.
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::confirmComposition): Now uses insertTextForConfirmedComposition().
        (WebCore::Editor::setComposition):
        * editing/Editor.h:
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/InsertTextCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        * editing/TypingCommand.h: Added TypingCommand::m_compositionType and TypingCommand::TextCompositionType
        (WebCore::TypingCommand::setCompositionType): Added.
        (WebCore::TypingCommand::create):

2011-01-23  Mark Rowe  <mrowe@apple.com>

        Follow-up to r76477.

        Fix the scripts that detect problematic code such as static initializers
        and destructors, weak vtables, inappropriate files in the framework wrappers,
        and public headers including private headers. These had all been broken
        since the projects were moved in to the Source directory as the paths to the
        scripts were not updated at that time.

        Stop copying an IDL file in to the framework wrapper. Doing that doesn't even make sense.

        * WebCore.xcodeproj/project.pbxproj:

2011-01-23  Mark Rowe  <mrowe@apple.com>

        Build fix after r76459.

        Static member variables or globals of types that have constructors or destructors are bad as
        they generate static initializers and destructors. This is code that is run either at link time
        when the library is loaded in to memory or at application termination time. Both of these are
        terrible for performance and are thus outlawed in WebKit code.

        The typical solution is to replace the static member or global with a function that allocates
        the necessary variable on the heap. The variable is leaked to prevent it from being destroyed
        at application termination time. The DEFINE_STATIC_LOCAL macro wraps this in to a concise little
        package, but sadly fails to work in this case due to the type containing multiple template
        parameters.
        
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::inspectorAgents):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::bindInspectorAgent):
        (WebCore::InspectorInstrumentation::unbindInspectorAgent):
        (WebCore::InspectorInstrumentation::inspectorAgentForPage):

2011-01-21  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Add support for -webkit-mask properties to the
        accelerated compositing path.
        https://bugs.webkit.org/show_bug.cgi?id=49780
         
        Tests: Existing tests in LayoutTests/compositing/masks

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::draw):
        (WebCore::ContentLayerChromium::unreserveContentsTexture):
        (WebCore::ContentLayerChromium::bindContentsTexture):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setMaskLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setMaskLayer):
        (WebCore::LayerChromium::maskLayer):
        (WebCore::LayerChromium::unreserveContentsTexture):
        (WebCore::LayerChromium::bindContentsTexture):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        * platform/graphics/chromium/LayerTexture.cpp:
        (WebCore::LayerTexture::bindTexture):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::SharedValues::SharedValues):
        (WebCore::RenderSurfaceChromium::SharedValues::~SharedValues):
        (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::SharedValues::maskShaderProgram):
        (WebCore::RenderSurfaceChromium::SharedValues::maskShaderSamplerLocation):
        (WebCore::RenderSurfaceChromium::SharedValues::maskShaderMaskSamplerLocation):
        (WebCore::RenderSurfaceChromium::SharedValues::maskShaderMatrixLocation):
        (WebCore::RenderSurfaceChromium::SharedValues::maskShaderAlphaLocation):

2011-01-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Use WTF::StringHasher in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=52934

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::urlHostHash):
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHashInline):
        * platform/cf/BinaryPropertyList.cpp:
        (WebCore::IntegerArrayHash::hash):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::computeHash):
        * platform/network/ProtectionSpaceHash.h:
        (WebCore::ProtectionSpaceHash::hash):

2011-01-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Add an overload to base64Encode with String output
        https://bugs.webkit.org/show_bug.cgi?id=50122

        This change removes duplicated code.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::resourceContentBase64):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::btoa):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::createUniqueFontName):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createUniqueFontName):
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::createUniqueFontName):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::encodeBasicAuthorization):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::encodeBasicAuthorization):
        * platform/text/Base64.cpp:
        (WebCore::base64Encode):
        * platform/text/Base64.h:
        (WebCore::base64Encode):
        * platform/wince/KeygenWinCE.cpp:
        (WebCore::WebCore::signedPublicKeyAndChallengeString):

2011-01-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Add String::containsOnlyLatin1()
        https://bugs.webkit.org/show_bug.cgi?id=52979

        Use String::containsOnlyLatin1() instead of isSafeToConvertCharList().

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::btoa):
        (WebCore::DOMWindow::atob):

2011-01-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Add missing CodeGenerator dependencies
        https://bugs.webkit.org/show_bug.cgi?id=52976

        * CMakeLists.txt:

2011-01-23  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][Symbian] Fix --minimal build
        https://bugs.webkit.org/show_bug.cgi?id=52839

        Some of the plugins' functionality is reimplemented in
        Symbian specific files.
        Some of this functionality should be compiled in even if 
        the guard NETSCAPE_PLUGIN_API is turned off.
        This patch moves that functionality out of the
        NETSCAPE_PLUGIN_API guard.

        Build fix so no new tests.

        * WebCore.pro:
        * plugins/symbian/PluginPackageSymbian.cpp:

2011-01-23  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Use rad2deg() from WTF instead of rolling our own.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::rotate):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):

2011-01-23  Kenneth Rohde Christiansen <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Viewport meta: Always adjust device dimensions to the device pixel ratio.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):

2011-01-23  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Don't scale absolute geometry specified by viewport meta tag.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):

2011-01-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        Web Inspector: looks like efl doesn't regenerate InspectorBackendDispatcher.

        Touch Inspector.idl.

        * inspector/Inspector.idl:

2011-01-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: next step in splitting InspectorController.

        Splitting InspectorController is a bit tricky process.

        As a first step I'll do the next things:
        1) rename existing InspectorController to InspectorAgent;
        2) s/nspectorController/nspectorAgent/g everywhere in WebCore/inspector but InspectorInstrumentation;
        3) create a fake InspectorController derived from the InspectorAgent for the rest of WebCore and WebKit;

        The second step is a migration of a small set of functions described in bug 52510 from InspectorAgent to InspectorController.

        As far as the second step will have significant changes in the functions' implementation I'll do it as a separate patch.

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

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::nodeForId):
        (WebCore::JSInjectedScriptHost::selectDOMStorage):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::nodeForIdCallback):
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        (WebCore::InjectedScriptHost::clearConsoleMessages):
        (WebCore::InjectedScriptHost::databaseForId):
        (WebCore::InjectedScriptHost::selectDatabase):
        (WebCore::InjectedScriptHost::selectDOMStorage):
        (WebCore::InjectedScriptHost::injectedScriptForMainFrame):
        (WebCore::InjectedScriptHost::inspectorDOMAgent):
        (WebCore::InjectedScriptHost::frontend):
        (WebCore::InjectedScriptHost::didCreateWorker):
        (WebCore::InjectedScriptHost::didDestroyWorker):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::create):
        (WebCore::InjectedScriptHost::inspectorAgent):
        (WebCore::InjectedScriptHost::disconnectController):
        * inspector/InspectorAgent.cpp: Copied from Source/WebCore/inspector/InspectorController.cpp.
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::~InspectorAgent):
        (WebCore::InspectorAgent::inspectedPageDestroyed):
        (WebCore::InspectorAgent::enabled):
        (WebCore::InspectorAgent::inspectorStartsAttached):
        (WebCore::InspectorAgent::setInspectorStartsAttached):
        (WebCore::InspectorAgent::setInspectorAttachedHeight):
        (WebCore::InspectorAgent::inspectorAttachedHeight):
        (WebCore::InspectorAgent::searchingForNodeInPage):
        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
        (WebCore::InspectorAgent::inspect):
        (WebCore::InspectorAgent::focusNode):
        (WebCore::InspectorAgent::highlight):
        (WebCore::InspectorAgent::highlightDOMNode):
        (WebCore::InspectorAgent::highlightFrame):
        (WebCore::InspectorAgent::hideHighlight):
        (WebCore::InspectorAgent::mouseDidMoveOverElement):
        (WebCore::InspectorAgent::handleMousePress):
        (WebCore::InspectorAgent::setInspectorFrontendClient):
        (WebCore::InspectorAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorAgent::setSearchingForNode):
        (WebCore::InspectorAgent::connectFrontend):
        (WebCore::InspectorAgent::show):
        (WebCore::InspectorAgent::showPanel):
        (WebCore::InspectorAgent::close):
        (WebCore::InspectorAgent::disconnectFrontend):
        (WebCore::InspectorAgent::resourceAgent):
        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
        (WebCore::InspectorAgent::populateScriptObjects):
        (WebCore::InspectorAgent::pushDataCollectedOffline):
        (WebCore::InspectorAgent::restoreDebugger):
        (WebCore::InspectorAgent::restoreProfiler):
        (WebCore::InspectorAgent::unbindAllResources):
        (WebCore::InspectorAgent::didCommitLoad):
        (WebCore::InspectorAgent::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorAgent::mainResourceFiredLoadEvent):
        (WebCore::InspectorAgent::isMainResourceLoader):
        (WebCore::InspectorAgent::willSendRequest):
        (WebCore::InspectorAgent::ensureSettingsLoaded):
        (WebCore::InspectorAgent::startTimelineProfiler):
        (WebCore::InspectorAgent::stopTimelineProfiler):
        (WebCore::PostWorkerNotificationToFrontendTask::create):
        (WebCore::PostWorkerNotificationToFrontendTask::PostWorkerNotificationToFrontendTask):
        (WebCore::PostWorkerNotificationToFrontendTask::performTask):
        (WebCore::InspectorAgent::postWorkerNotificationToFrontend):
        (WebCore::InspectorAgent::didCreateWorker):
        (WebCore::InspectorAgent::didDestroyWorker):
        (WebCore::InspectorAgent::didOpenDatabase):
        (WebCore::InspectorAgent::getCookies):
        (WebCore::InspectorAgent::buildArrayForCookies):
        (WebCore::InspectorAgent::buildObjectForCookie):
        (WebCore::InspectorAgent::deleteCookie):
        (WebCore::InspectorAgent::didUseDOMStorage):
        (WebCore::InspectorAgent::didCreateWebSocket):
        (WebCore::InspectorAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorAgent::didCloseWebSocket):
        (WebCore::InspectorAgent::isRecordingUserInitiatedProfile):
        (WebCore::InspectorAgent::startUserInitiatedProfiling):
        (WebCore::InspectorAgent::stopUserInitiatedProfiling):
        (WebCore::InspectorAgent::profilerEnabled):
        (WebCore::InspectorAgent::enableProfiler):
        (WebCore::InspectorAgent::disableProfiler):
        (WebCore::InspectorAgent::showAndEnableDebugger):
        (WebCore::InspectorAgent::enableDebugger):
        (WebCore::InspectorAgent::disableDebugger):
        (WebCore::InspectorAgent::resume):
        (WebCore::InspectorAgent::setAllBrowserBreakpoints):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::didEvaluateForTestInFrontend):
        (WebCore::quadToPath):
        (WebCore::drawOutlinedQuad):
        (WebCore::drawOutlinedQuadWithClip):
        (WebCore::drawHighlightForBox):
        (WebCore::drawHighlightForLineBoxesOrSVGRenderer):
        (WebCore::convertFromFrameToMainFrame):
        (WebCore::frameToMainFrameOffset):
        (WebCore::InspectorAgent::drawNodeHighlight):
        (WebCore::InspectorAgent::drawElementTitle):
        (WebCore::InspectorAgent::openInInspectedWindow):
        (WebCore::InspectorAgent::addScriptToEvaluateOnLoad):
        (WebCore::InspectorAgent::removeAllScriptsToEvaluateOnLoad):
        (WebCore::InspectorAgent::setInspectorExtensionAPI):
        (WebCore::InspectorAgent::inspectedURL):
        (WebCore::InspectorAgent::reloadPage):
        (WebCore::InspectorAgent::setExtraHeaders):
        * inspector/InspectorAgent.h: Copied from Source/WebCore/inspector/InspectorController.h.
        (WebCore::InspectorAgent::inspectorBackendDispatcher):
        (WebCore::InspectorAgent::inspectorClient):
        (WebCore::InspectorAgent::injectedScriptHost):
        (WebCore::InspectorAgent::inspectedPage):
        (WebCore::InspectorAgent::hideDOMNodeHighlight):
        (WebCore::InspectorAgent::hideFrameHighlight):
        (WebCore::InspectorAgent::frontend):
        (WebCore::InspectorAgent::inspectorController):
        (WebCore::InspectorAgent::inspectorAgent):
        (WebCore::InspectorAgent::consoleAgent):
        (WebCore::InspectorAgent::cssAgent):
        (WebCore::InspectorAgent::domAgent):
        (WebCore::InspectorAgent::injectedScriptAgent):
        (WebCore::InspectorAgent::runtimeAgent):
        (WebCore::InspectorAgent::timelineAgent):
        (WebCore::InspectorAgent::databaseAgent):
        (WebCore::InspectorAgent::domStorageAgent):
        (WebCore::InspectorAgent::fileSystemAgent):
        (WebCore::InspectorAgent::browserDebuggerAgent):
        (WebCore::InspectorAgent::debuggerAgent):
        (WebCore::InspectorAgent::profilerAgent):
        (WebCore::InspectorAgent::applicationCacheAgent):
        (WebCore::InspectorAgent::hasInspectorFrontendClient):
        (WebCore::InspectorAgent::hasFrontend):
        (WebCore::InspectorAgent::startProfiling):
        (WebCore::InspectorAgent::stopProfiling):
        (WebCore::InspectorAgent::debuggerEnabled):
        (WebCore::InspectorAgent::state):
        (WebCore::InspectorAgent::settings):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorBrowserDebuggerAgent.h:
        (WebCore::InspectorBrowserDebuggerAgent::create):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::getCompletionsOnCallFrame):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorFileSystemAgent.cpp:
        (WebCore::InspectorFileSystemAgentCallbacks::didOpenFileSystem):
        (WebCore::InspectorFileSystemAgent::InspectorFileSystemAgent):
        (WebCore::InspectorFileSystemAgent::stop):
        (WebCore::InspectorFileSystemAgent::getFileSystemPathAsync):
        (WebCore::InspectorFileSystemAgent::didGetFileSystemPath):
        (WebCore::InspectorFileSystemAgent::didGetFileSystemError):
        * inspector/InspectorFileSystemAgent.h:
        (WebCore::InspectorFileSystemAgent::create):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::setExtensionAPI):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        (WebCore::InspectorProfilerAgent::stopUserInitiatedProfiling):
        * inspector/InspectorProfilerAgent.h:

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

        Rubber-stamped by Anders Carlsson.

        Fix FFTFrameStub to compile properly
        https://bugs.webkit.org/show_bug.cgi?id=52969

        No new tests since this is a build fix.

        * platform/audio/FFTFrameStub.cpp:
        (WebCore::FFTFrame::FFTFrame):

2011-01-22  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IndexedDB corrupts data on disk
        https://bugs.webkit.org/show_bug.cgi?id=52890

        We need to store the SerializedScriptValues on disk in a BLOB column rather than TEXT.
        Test: storage/indexeddb/data-corruption.html

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::bindBlob):
        (WebCore::SQLiteStatement::getColumnBlobAsString):
        (WebCore::SQLiteStatement::getColumnBlobAsVector):
        * platform/sql/SQLiteStatement.h:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::loadCurrentRow):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::runCommands):
        (WebCore::createTables):
        (WebCore::createMetaDataTable):
        (WebCore::migrateDatabase):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::putObjectStoreData):

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

        Not reviewed. Fix WinCE build.

        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawText):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::adjustMenuListButtonStyle):

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

        Reviewed by Dirk Schulze.

        REGRESSION: Vertical line metrics incorrect
        https://bugs.webkit.org/show_bug.cgi?id=52960

        SimpleFontDataMac.mm contains a hack to modifiy lineGap/descent for the 'Hiragino' font.
        That didn't influence the lineSpacing so far, but does now, causing regressions.

        Restore old line spacing behaviour to fix the regression.
        Covered by existing fast/blockflow, fast/repaint and fast/text/international test cases.

        * platform/graphics/FontMetrics.h:
        (WebCore::FontMetrics::FontMetrics):
        (WebCore::FontMetrics::floatLineSpacing):
        (WebCore::FontMetrics::setLineSpacing):
        (WebCore::FontMetrics::lineSpacing):
        (WebCore::FontMetrics::reset):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/pango/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont):
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformInit):

2011-01-22  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] fast/backgrounds/svg-as-mask.html fails
        https://bugs.webkit.org/show_bug.cgi?id=52906

        Transparency layers should start out with in SourceOver mode with
        alpha 1.0 (modeled after CGContextBeginTransparencyLayer.)

        * platform/graphics/qt/TransparencyLayer.h:
        (WebCore::TransparencyLayer::TransparencyLayer):

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

        Not reviewed.

        Introduce FontMetrics abstraction
        https://bugs.webkit.org/show_bug.cgi?id=51456

        Fix Chromium/Win build.

        * platform/graphics/chromium/UniscribeHelperTextRun.cpp: s/->/./
        (WebCore::UniscribeHelperTextRun::UniscribeHelperTextRun):

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

        Reviewed by Dirk Schulze.

        Introduce FontMetrics abstraction
        https://bugs.webkit.org/show_bug.cgi?id=51456

        Encapsulate ascent/descent/lineHeight/lineGap methods in a single FontMetrics class, instead of
        having to define them in both Font & SimpleFontData. Changed to store floating point values
        as default, in order to get accurate information for small sized fonts. All these methods
        now have floating-point and integer versions. Whenever an integer variant of these functions
        is called, lroundf() is used to round the value.

        This makes it possible to support small font-sizes for SVG in a follow-up patch, as well
        as fixing rounding issues when using SVG Fonts.
        
        Shouldn't affect existing tests.

        * GNUmakefile.am: Add FontMetrics.h to build. 
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp: Use style->fontMetrics() instead of style->font() to access the metrics.
        (baselinePositionForAccessibilityRenderObject):
        * css/CSSPrimitiveValue.cpp:         
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        * html/canvas/CanvasRenderingContext2D.cpp: Ditto.
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * inspector/InspectorController.cpp: Ditto.
        (WebCore::InspectorController::drawElementTitle):
        * platform/chromium/PopupMenuChromium.cpp: Ditto.
        (WebCore::PopupListBox::paintRow):
        (WebCore::PopupListBox::getRowHeight):
        * platform/graphics/Font.h: Remove ascent/descent/height/lineGap/lineSpacing/xHeight/unitsPerEm accessor...
        (WebCore::Font::fontMetrics): ... and only expose a single FontMetrics object here.
        * platform/graphics/FontFastPath.cpp: Use fontMetrics() to query metrics information.
        (WebCore::Font::emphasisMarkAscent):
        (WebCore::Font::emphasisMarkDescent):
        (WebCore::Font::emphasisMarkHeight):
        (WebCore::Font::floatWidthForSimpleText):
        * platform/graphics/FontMetrics.h: Added.
        (WebCore::FontMetrics::FontMetrics): Creates a FontMetrics object, stored in SimpleFontData.
        (WebCore::FontMetrics::unitsPerEm): Returns an unsigned describing the unitsPerEm.
        (WebCore::FontMetrics::setUnitsPerEm): Sets the unitsPerEm value.
        (WebCore::FontMetrics::floatAscent): Returns the stored m_ascent float.
        (WebCore::FontMetrics::setAscent): Sets the stored m_ascent float.
        (WebCore::FontMetrics::floatDescent): Returns the stored m_descent float.
        (WebCore::FontMetrics::setDescent): Sets the stored m_descent float.
        (WebCore::FontMetrics::floatHeight): Returns floatAscent() + floatDescent().
        (WebCore::FontMetrics::floatLineGap): Returns the stored m_lineGap float.
        (WebCore::FontMetrics::setLineGap): Sets the stored m_lineGap float.
        (WebCore::FontMetrics::floatLineSpacing): Returns the stored m_lineSpacing float.
        (WebCore::FontMetrics::setLineSpacing): Sets the stored m_lineSpacing float.
        (WebCore::FontMetrics::xHeight): Returns the stored m_xHeight float (no integer version available, hence no 'float' prefix).
        (WebCore::FontMetrics::setXHeight): Sets the stored m_xHeight float.
        (WebCore::FontMetrics::ascent): Returns a rounded version of ascent().
        (WebCore::FontMetrics::descent): Ditto (for descent).
        (WebCore::FontMetrics::height): Returns ascent() + descent().
        (WebCore::FontMetrics::lineGap): Returns a rounded version of lineGap().
        (WebCore::FontMetrics::lineSpacing): Ditto (for lineSpacing).
        (WebCore::FontMetrics::reset): Nulls all members, used only by the platform variants of SimpleFontData.
        * platform/graphics/SimpleFontData.cpp: Adapt SVG Fonts code, to initialize the FontMetrics object, as the m_ascent/etc.. members are gone.
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::initCharWidths):
        * platform/graphics/SimpleFontData.h: Remove ascent/descent/height/lineSpacing/lineGap/xHeight/unitsPerEm accessors, and members, just store a FontMetrics object and expose it.
        (WebCore::SimpleFontData::fontMetrics):
        (WebCore::SimpleFontData::avgCharWidth):
        * platform/graphics/chromium/FontChromiumWin.cpp: Use fontMetrics() to query font metrics.
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::estimateTextBounds):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareUniscribePainter::estimateTextBounds):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp: Adapt platform code, to initialize the FontMetrics object.
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp: Ditto.
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/chromium/UniscribeHelperTextRun.cpp: Use fontMetrics() to query font metrics.
        (WebCore::UniscribeHelperTextRun::UniscribeHelperTextRun):
        (WebCore::UniscribeHelperTextRun::nextWinFontData):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp: Adapt platform code, to initialize the FontMetrics object.
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/haiku/SimpleFontDataHaiku.cpp: Ditto.
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/mac/FontComplexTextMac.cpp: Use fontMetrics() to query font metrics.
        (WebCore::Font::floatWidthForComplexText):
        * platform/graphics/mac/FontMac.mm: Ditto.
        (WebCore::showGlyphsWithAdvances):
        * platform/graphics/mac/SimpleFontDataMac.mm: Adapt platform code, to initialize the FontMetrics object.
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        * platform/graphics/pango/SimpleFontDataPango.cpp: Ditto.
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/qt/SimpleFontDataQt.cpp: Ditto. (+ Switch to QFontMetricsF to get floating-point accurancy.)
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/FontCGWin.cpp: Use fontMetrics() to query font metrics.
        (WebCore::drawGDIGlyphs):
        * platform/graphics/win/FontWin.cpp: Ditto.
        (WebCore::Font::floatWidthForComplexText):
        * platform/graphics/win/SimpleFontDataCGWin.cpp: Adapt platform code, to initialize the FontMetrics object.
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        * platform/graphics/win/SimpleFontDataCairoWin.cpp: Ditto.
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/win/SimpleFontDataWin.cpp: Ditto.
        (WebCore::SimpleFontData::initGDIFont):
        * platform/graphics/wince/GraphicsContextWinCE.cpp: Use fontMetrics() to query font metrics.
        (WebCore::GraphicsContext::drawText):
        * platform/graphics/wince/SimpleFontDataWinCE.cpp: Adapt platform code, to initialize the FontMetrics object.
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/wx/SimpleFontDataWx.cpp: Ditto.
        (WebCore::SimpleFontData::platformInit):
        * platform/win/PopupMenuWin.cpp: Use style->fontMetrics() instead of style->font() to access the metrics.
        (WebCore::PopupMenuWin::calculatePositionAndSize): 
        (WebCore::PopupMenuWin::paint):
        * rendering/EllipsisBox.cpp: Ditto.
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/InlineBox.cpp: Ditto.
        (WebCore::InlineBox::logicalHeight):
        * rendering/InlineFlowBox.cpp: Ditto.
        (WebCore::verticalPositionForBox):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        * rendering/InlineTextBox.cpp: Ditto.
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        * rendering/RenderBlock.cpp: Ditto.
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::firstLineBoxBaseline):
        (WebCore::RenderBlock::lastLineBoxBaseline):
        * rendering/RenderBox.cpp: Ditto.
        (WebCore::RenderBox::localCaretRect):
        * rendering/RenderEmbeddedObject.cpp: Ditto.
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderImage.cpp: Ditto.
        (WebCore::RenderImage::setImageSizeForAltText):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderInline.cpp: Ditto.
        (WebCore::RenderInline::baselinePosition):
        * rendering/RenderListBox.cpp: Ditto.
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::itemHeight):
        * rendering/RenderListMarker.cpp: Ditto.
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        (WebCore::RenderListMarker::updateMargins):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderTextControl.cpp: Ditto.
        (WebCore::RenderTextControl::paintPlaceholder):
        * rendering/RenderTextControlSingleLine.cpp: Ditto.
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        * rendering/RenderThemeWin.cpp: Ditto.
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle):
        * rendering/mathml/RenderMathMLFraction.cpp: Ditto.
        (WebCore::RenderMathMLFraction::baselinePosition):
        * rendering/style/RenderStyle.h: Add "const FontMetrics& fontMetrics() const" accessor.
        (WebCore::InheritedFlags::fontMetrics):
        (WebCore::InheritedFlags::computedLineHeight):
        * rendering/svg/RenderSVGInlineText.cpp: Use style->fontMetrics() instead of style->font() to access the metrics.
        (WebCore::RenderSVGInlineText::positionForPoint):
        * rendering/svg/SVGInlineTextBox.cpp: Ditto.
        (WebCore::SVGInlineTextBox::selectionRectForTextFragment):
        (WebCore::positionOffsetForDecoration):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        (WebCore::SVGInlineTextBox::paintTextWithShadows):
        (WebCore::SVGInlineTextBox::calculateBoundaries):
        * rendering/svg/SVGTextLayoutEngineBaseline.cpp: Ditto.
        (WebCore::SVGTextLayoutEngineBaseline::calculateBaselineShift):
        (WebCore::SVGTextLayoutEngineBaseline::calculateAlignmentBaselineShift):
        (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphAdvanceAndOrientation):
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp: Ditto.
        (WebCore::SVGTextLayoutEngineSpacing::calculateSVGKerning):
        * rendering/svg/SVGTextMetrics.cpp: Ditto.
        (WebCore::SVGTextMetrics::SVGTextMetrics):
        * rendering/svg/SVGTextQuery.cpp: Ditto.
        (WebCore::calculateGlyphBoundaries):
        * svg/SVGFontFaceElement.cpp: 
        (WebCore::SVGFontFaceElement::unitsPerEm): Rename defaultUnitsPerEm global to gDefaultUnitsPerEm.
        * svg/SVGLength.cpp: Use style->fontMetrics() instead of style->font() to access the metrics.
        (WebCore::SVGLength::convertValueFromUserUnitsToEXS):
        (WebCore::SVGLength::convertValueFromEXSToUserUnits):

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

        Reviewed by Eric Seidel.

        Stop instantiating legacy editing positions in VisibleSelection, visible_units.cpp, Frame, and RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=52759

        Stopped instantiating legacy editing positions in the following files.

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        (WebCore::startOfBlock):
        * page/Frame.cpp:
        (WebCore::Frame::visiblePositionForPoint):
        * rendering/RenderBlock.cpp: Removed RenderBlock::positionForRenderer because it was not called anywhere.
        * rendering/RenderBlock.h: Ditto.

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

        Reviewed by James Robinson.

        [chromium] Fix compositor repaints for offscreen fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=52681

        The fast path scrolling was clipping offscreen invalidations.
        Additionally, the compositor was ignoring all invalidations that were
        entirely out of the content rect.

        Test: compositing/ to verify this caused no regressions.
        Tested fix manually in browser as I could not generate a LayoutTest that reproduced the bug in run-webkit-tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsFastPath):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::invalidateRootLayerRect):

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=52951
        WebKit2 generates a bad PDF for cross process messaging

        * page/PrintContext.cpp: (WebCore::PrintContext::spoolRect): Use a correct offset to actually
        draw inside the requested rectangle.

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

        Reviewed by Adam Barth.

        Regression: new window.onerror() implementation leaks cross-origin Javascript errors
        https://bugs.webkit.org/show_bug.cgi?id=52903

        In case of an exception in a script from different domain only generic message
        will be passed to window.onerror hander.

        Tests: http/tests/security/cross-origin-script-window-onerror-redirected.html
               http/tests/security/cross-origin-script-window-onerror.html

        * bindings/js/CachedScriptSourceProvider.h: use URL from the resource response to make sure we do all
        cross origin checks agains real script URL, not the original URL which may have resulted in a sequence
        of redirects to different domains.
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/v8/ScriptSourceCode.h: same for v8.
        (WebCore::ScriptSourceCode::url):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::dispatchErrorEvent): in case the error occurred in a script we cannot
        access provide concise "Script error." message without any information about the error source. This is
        what Firefox does in this case.

2011-01-21  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Always set composition mode through GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=52940

        GraphicsContext tracks the current composition mode so we should
        never call through to the QPainter directly.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQtCompositionMode): Changed this method to a static inline
        since it's only used by GraphicsContextQt.cpp now.

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::draw):

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

        Reviewed by Adele Peterson.

        Inconsistent handling of no-break space in justification logic
        https://bugs.webkit.org/show_bug.cgi?id=52938

        Test: fast/text/justify-nbsp.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Count no-break space as a
        space when computing the distribution of space between text boxes on the line.

2011-01-21  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Fisher.

        Crash in WebCore::HistoryController::itemsAreClones
        https://bugs.webkit.org/show_bug.cgi?id=52819

        Adds sanity checks to help diagnose the crash.

        * loader/HistoryController.cpp:

2011-01-21  Andreas Kling  <kling@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Let QPainter decide whether a composition mode is supported or not

        Lacking Porter-Duff support in the paint engine shouldn't exclude the
        Source and Source-Over modes (and has nothing to do with the blend
        and raster-op modes.)

        Delegate this decision to QPainter instead (this will cause warnings
        if an unsupported mode is used, but that's a good thing.)

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/qt/TransparencyLayer.h:
        (WebCore::TransparencyLayer::TransparencyLayer):

2011-01-21  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        fix audio build: header file should be "Noncopyable.h" and not "NonCopyable.h"
        https://bugs.webkit.org/show_bug.cgi?id=52933

        No new tests since this just fixes the build

        * webaudio/RealtimeAnalyser.h:

2011-01-21  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Fix audio build: change ChromiumBridge to PlatformBridge
        https://bugs.webkit.org/show_bug.cgi?id=52928

        No new tests since audio API is not yet implemented.

        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::AudioBus::loadPlatformResource):

2011-01-21  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add FFTFrameStub to avoid link errors during bringup on platforms without an FFT implementation
        https://bugs.webkit.org/show_bug.cgi?id=52922

        No new tests since audio API is not yet implemented.

        * WebCore.gypi:
        * platform/audio/FFTFrameStub.cpp: Added.
        (WebCore::FFTFrame::FFTFrame):
        (WebCore::FFTFrame::~FFTFrame):
        (WebCore::FFTFrame::multiply):
        (WebCore::FFTFrame::doFFT):
        (WebCore::FFTFrame::doInverseFFT):
        (WebCore::FFTFrame::cleanup):
        (WebCore::FFTFrame::realData):
        (WebCore::FFTFrame::imagData):

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

        Reviewed by Sam Weinig.

        reduce number of FrameLoaderClient::didChangeScrollOffset calls
        https://bugs.webkit.org/show_bug.cgi?id=52915

        Only notify of changes in scroll offset when there actually is a change.
        This regressed in r76291.

        Covered by Chromium browser_tests.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollToOffsetWithoutAnimation):

2011-01-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: ~InspectorResourceAgent crashes on closing inspected page.
        https://bugs.webkit.org/show_bug.cgi?id=52900

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):

2011-01-21  Chris Rogers  <crogers@google.com>

        Reviewed by Darin Fisher.

        Add run-time enable support for the web audio API
        https://bugs.webkit.org/show_bug.cgi?id=52741

        No new tests since audio API is not yet implemented.

        * WebCore.exp.in:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebkitAudioContextEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitAudioContextEnabled):
        * page/DOMWindow.idl:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setWebAudioEnabled):
        * page/Settings.h:
        (WebCore::Settings::webAudioEnabled):

2011-01-21  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Menulist text often collides with separator
        https://bugs.webkit.org/show_bug.cgi?id=51155

        Move menulist rendering to RenderThemeGtk and correct padding code
        for separators in menulists.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk): Initialize new widget members.
        (WebCore::RenderThemeGtk::getComboBoxSeparatorWidth): Added.
        (WebCore::RenderThemeGtk::comboBoxArrowSize): Added.
        (WebCore::getButtonInnerBorder): Added.
        (WebCore::RenderThemeGtk::getComboBoxPadding): Do this manually instead of using
        Mozilla code.
        (WebCore::RenderThemeGtk::paintMenuList): Ditto.
        (WebCore::setupWidget): Abstracted this part of the setupWidgetAndAddToContainer
        out to handle child widgets of comboboxes.
        (WebCore::RenderThemeGtk::setupWidgetAndAddToContainer): Abstracted out setupWidget.
        (WebCore::RenderThemeGtk::gtkContainer): Added.
        (WebCore::getGtkComboBoxButton): Added.
        (WebCore::getGtkComboBoxPieces): Added.
        (WebCore::RenderThemeGtk::gtkComboBox): Call setupWidget here.
        (WebCore::RenderThemeGtk::refreshComboBoxChildren): Added.
        (WebCore::RenderThemeGtk::gtkComboBoxButton): Added.
        (WebCore::RenderThemeGtk::gtkComboBoxArrow): Added.
        (WebCore::RenderThemeGtk::gtkComboBoxSeparator): Added.
        * platform/gtk/RenderThemeGtk.h: Added new members and methods.
        * platform/gtk/WidgetRenderingContext.h: Added new members and methods.
        * platform/gtk/WidgetRenderingContextGtk2.cpp:
        (WebCore::WidgetRenderingContext::gtkPaintArrow):
        (WebCore::WidgetRenderingContext::gtkPaintVLine):
        * platform/gtk/WidgetRenderingContextGtk3.cpp:
        (WebCore::WidgetRenderingContext::gtkPaintArrow):
        (WebCore::WidgetRenderingContext::gtkPaintVLine):
        * platform/gtk/gtk2drawing.c: Removed code for drawing menulists and buttons.
        (moz_gtk_init):
        (moz_gtk_get_widget_border):
        (moz_gtk_widget_paint):
        * platform/gtk/gtk3drawing.c:
        (moz_gtk_init):
        (moz_gtk_get_widget_border):
        (moz_gtk_widget_paint):
        * platform/gtk/gtkdrawing.h:

2011-01-21  Sam Weinig  <sam@webkit.org>

        Fix chromium mac build.

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

2011-01-21  Sam Weinig  <sam@webkit.org>

        Fix the windows build.

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paint):

2011-01-21  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add chromium bundled audio spatialization resources to WebAudio.grd
        https://bugs.webkit.org/show_bug.cgi?id=52651

        No new tests since audio API is not yet implemented.

        * WebCore.gyp/WebCore.gyp:
        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::AudioBus::loadPlatformResource):

2011-01-21  Xiyuan Xia  <xiyuan@chromium.org>

        Reviewed by Tony Chang.

        Use WebThemeEngine for relevant RenderTheme parts for chromium/linux.
        https://bugs.webkit.org/show_bug.cgi?id=52826

        * platform/chromium/ChromiumBridge.h:
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::getWebThemeState):
        (WebCore::RenderThemeChromiumLinux::adjustSliderThumbSize):
        (WebCore::RenderThemeChromiumLinux::paintCheckbox):
        (WebCore::RenderThemeChromiumLinux::setCheckboxSize):
        (WebCore::RenderThemeChromiumLinux::paintRadio):
        (WebCore::RenderThemeChromiumLinux::setRadioSize):
        (WebCore::RenderThemeChromiumLinux::paintButton):
        (WebCore::RenderThemeChromiumLinux::paintTextField):
        (WebCore::RenderThemeChromiumLinux::paintMenuList):
        (WebCore::RenderThemeChromiumLinux::paintSliderTrack):
        (WebCore::RenderThemeChromiumLinux::paintSliderThumb):
        (WebCore::RenderThemeChromiumLinux::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeChromiumLinux::paintInnerSpinButton):
        (WebCore::RenderThemeChromiumLinux::paintProgressBar):
        * rendering/RenderThemeChromiumLinux.h:
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::setCheckboxSize):
        (WebCore::RenderThemeChromiumSkia::setSizeIfAuto):
        (WebCore::RenderThemeChromiumSkia::indeterminateProgressValueRectFor):
        * rendering/RenderThemeChromiumSkia.h:

2011-01-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Part 2 of "Cleanup Scrollbar/ScrollbarClient relationship"
        https://bugs.webkit.org/show_bug.cgi?id=52779

        Rename ScrollbarClient -> ScrollableArea.

        - Also replaces Scrollbar::setClient with Scrollbar::disconnectFromScrollableArea
          since that was its only use case.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::setValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkScrollbarPseudoClass):
        * page/FrameView.h:
        * platform/PopupMenuClient.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::notityPositionChanged):
        * platform/ScrollAnimator.h:
        * platform/ScrollAnimatorWin.cpp:
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimatorWin::ScrollAnimatorWin):
        (WebCore::ScrollAnimatorWin::scroll):
        * platform/ScrollAnimatorWin.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scroll):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * platform/ScrollableArea.cpp: Copied from WebCore/platform/ScrollbarClient.cpp.
        (WebCore::ScrollableArea::ScrollableArea):
        (WebCore::ScrollableArea::~ScrollableArea):
        (WebCore::ScrollableArea::scroll):
        (WebCore::ScrollableArea::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollableArea::scrollToXOffsetWithoutAnimation):
        (WebCore::ScrollableArea::scrollToYOffsetWithoutAnimation):
        (WebCore::ScrollableArea::setScrollOffsetFromAnimation):
        * platform/ScrollableArea.h: Copied from WebCore/platform/ScrollbarClient.h.
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::createNativeScrollbar):
        (WebCore::Scrollbar::Scrollbar):
        (WebCore::Scrollbar::offsetDidChange):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::mouseMoved):
        (WebCore::Scrollbar::isWindowActive):
        (WebCore::Scrollbar::invalidateRect):
        (WebCore::Scrollbar::convertToContainingView):
        (WebCore::Scrollbar::convertFromContainingView):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::disconnectFromScrollableArea):
        (WebCore::Scrollbar::scrollableArea):
        * platform/ScrollbarClient.cpp: Removed.
        * platform/ScrollbarClient.h: Removed.
        * platform/ScrollbarThemeComposite.cpp:
        * platform/chromium/FramelessScrollView.h:
        * platform/chromium/ScrollbarThemeChromium.cpp:
        (WebCore::ScrollbarThemeChromium::paintTickmarks):
        * platform/efl/ScrollbarEfl.cpp:
        (Scrollbar::createNativeScrollbar):
        (ScrollbarEfl::ScrollbarEfl):
        (scrollbarEflEdjeMessage):
        * platform/efl/ScrollbarEfl.h:
        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::create):
        (MainFrameScrollbarGtk::MainFrameScrollbarGtk):
        (MainFrameScrollbarGtk::gtkValueChanged):
        * platform/gtk/MainFrameScrollbarGtk.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::scroll):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::contextMenu):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::scrollToRevealSelection):
        (WebCore::PopupMenuWin::wndProc):
        * platform/win/PopupMenuWin.h:
        * platform/win/ScrollbarThemeSafari.cpp:
        (WebCore::ScrollbarThemeSafari::paintTrackBackground):
        (WebCore::ScrollbarThemeSafari::paintButton):
        (WebCore::ScrollbarThemeSafari::paintThumb):
        * platform/wx/ScrollbarThemeWx.cpp:
        (WebCore::ScrollbarThemeWx::paint):
        * rendering/RenderDataGrid.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::destroyScrollbar):
        (WebCore::RenderLayer::scroll):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollToRevealElementAtListIndex):
        (WebCore::RenderListBox::scroll):
        (WebCore::RenderListBox::logicalScroll):
        (WebCore::RenderListBox::setScrollTop):
        (WebCore::RenderListBox::destroyScrollbar):
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::createScrollbar):
        * rendering/RenderMenuList.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::createCustomScrollbar):
        (WebCore::RenderScrollbar::RenderScrollbar):
        * rendering/RenderScrollbar.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createScrollbar):
        * rendering/RenderTextControlSingleLine.h:

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

        Fix Leopard build.

        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::layout): Use ceilf instead of ceil.

2011-01-21  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Properly deal with the case when conversion to string throws an exception for HTMLCollection accessors
        https://bugs.webkit.org/show_bug.cgi?id=52901

        Test: fast/dom/htmlcollection-conversion-throws-exception.html

        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getItem):

2011-01-21  Adam Roben  <aroben@apple.com>

        Separate flushing layer changes from rendering in CACFLayerTreeHost

        Old model:
          1) A change is made to a GraphicsLayer.
          2) CACFLayerTreeHost::flushPendingGraphicsLayerChangesSoon is called, which schedules the
             render timer.
          3) The timer fires, which calls through to CACFLayerTreeHost::render, which performs the
             flush and then renders.

        New model:
          1) A change is made to a GraphicsLayer.
          2) CACFLayerTreeHost::flushPendingGraphicsLayerChangesSoon is called, which tells the new
             LayerChangesFlusher singleton that this host has changes that need to be flushed.
          3) LayerChangesFlusher sets up a Windows hook that will get called on the next iteration
             of the message loop.
          4) LayerChangesFlusher's hook is called, which calls through to
             CACFLayerTreeHost::flushPendingLayerChangesNow.
          5) CACFLayerTreeHost::flushPendingLayerChangesNow schedules the render timer so the changes
             that were just flushed to the context will be rendered.

        When a change is made to a PlatformCALayer that doesn't have a corresponding GraphicsLayer
        (e.g., for rendering <video>), CACFLayerTreeHost::layerTreeDidChange takes care of
        scheduling the flush.

        This change has three advantages:
          1) Whenever we flush layer changes, we first update layout. This can cause the page to
             leave compositing mode, which in turn can cause all references to the CACFLayerTreeHost
             to be dropped. By separating flushing (and thus updating layout) from rendering, we no
             longer have to worry about this happen during rendering.
          2) The new model is much more similar to how things work on the Mac, so will hopefully
             reduce the number of platform-specific bugs.
          3) CACFLayerTreeHost::shouldRender, which was used to make sure we didn't render while a
             layout was pending, is no longer needed. It actually hasn't been needed since at least
             r75987, but removing it before now would have resulted in a crash whenever a page came
             out of compositing mode due to (1).

        Fixes <http://webkit.org/b/52852> Flushing layer changes and rendering are intertwined in
        CACFLayerTreeHost, but shouldn't be

        Reviewed by Simon Fraser.

        * WebCore.vcproj/WebCore.vcproj: Added LayerChangesFlusher.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp: Added new #include, sorted existing
        #includes.
        (WebCore::CACFLayerTreeHost::CACFLayerTreeHost): Initialize new member.
        (WebCore::CACFLayerTreeHost::layerTreeDidChange): If we aren't already flushing changes,
        schedule a flush. Removed the call to renderSoon(), which now happens when the flush is
        finished.
        (WebCore::CACFLayerTreeHost::destroyRenderer): Cancel any pending flush we had scheduled. Also
        fixed a bug where we'd fail to clear the context's layer.
        (WebCore::CACFLayerTreeHost::render): Removed code to ask the client if we should render, which
        is no longer needed. Moved code to flush layer changes from here to
        flushPendingLayerChangesNow, which is called via the above-described mechanism.
        (WebCore::CACFLayerTreeHost::flushPendingGraphicsLayerChangesSoon): Schedule a flush. Removed
        code to schedule a render, which now happens after we've flushed.
        (WebCore::CACFLayerTreeHost::flushPendingLayerChangesNow): Added. Some of this code came from
        render(). First we flush GraphicsLayer changes from GraphicsLayers to their underlying
        PlatformCALayers, then we flush changes from PlatformCALayers to the context, then we
        schedule a render so that the changes will be rendered to the screen.

        * platform/graphics/ca/win/CACFLayerTreeHost.h: Removed
        CACFLayerTreeHostClient::shouldRender. Added flushPendingLayerChangesNow and
        m_isFlushingLayerChanges.

        * platform/graphics/ca/win/LayerChangesFlusher.cpp: Added.
        (WebCore::LayerChangesFlusher::shared):
        (WebCore::LayerChangesFlusher::LayerChangesFlusher):
        (WebCore::LayerChangesFlusher::flushPendingLayerChangesSoon):
        (WebCore::LayerChangesFlusher::cancelPendingFlush):
        (WebCore::LayerChangesFlusher::hookCallback):
        (WebCore::LayerChangesFlusher::hookFired):
        (WebCore::LayerChangesFlusher::setHook):
        (WebCore::LayerChangesFlusher::removeHook):

        * platform/graphics/ca/win/LayerChangesFlusher.cpp: Added.
        (WebCore::LayerChangesFlusher::shared): Returns the singleton.
        (WebCore::LayerChangesFlusher::LayerChangesFlusher): Initialize our members.
        (WebCore::LayerChangesFlusher::flushPendingLayerChangesSoon): Add the host to the set of
        hosts with changes that need to be flushed, and set up our hook if we haven't already.
        (WebCore::LayerChangesFlusher::cancelPendingFlush): Remove the host from the set of hosts
        with changes that need to be flushed. If we have no more such hosts, remove our hook, unless
        we're currently in the process of calling out to our hosts, in which case we'll take care of
        the hook once we're done calling out.
        (WebCore::LayerChangesFlusher::hookCallback): This is the function that Windows calls when
        our hook fires. Just calls through to hookFired on the singleton.
        (WebCore::LayerChangesFlusher::hookFired): Tell all the hosts with changes that needed to be
        flushed that it's time to flush. If no hosts re-added themselves to our set during this
        process, remove our hook.
        (WebCore::LayerChangesFlusher::setHook): Calls through to ::SetWindowsHookExW.
        (WebCore::LayerChangesFlusher::removeHook): Calls through to ::UnhookWindowsHookEx.

        * platform/graphics/ca/win/LayerChangesFlusher.h: Added.

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

        Reviewed by Sam Weinig.

        GraphicsLayer should be non-copyable
        https://bugs.webkit.org/show_bug.cgi?id=52909

        Use WTF_MAKE_NONCOPYABLE on GraphicsLayer, and WTF_MAKE_FAST_ALLOCATED
        on that and KeyframeValueList.
        
        * platform/graphics/GraphicsLayer.h:

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

        Reviewed by Sam Weinig.

        Report the sized used by canvases and types arrays
        https://bugs.webkit.org/show_bug.cgi?id=52856

        Report the memory cost associated with canvas elements,
        and typed arrays to JavaScript as extraCost, so that it
        can figure this into its GC behavior.

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::toJSArrayBufferView): New templatized function, similar
        to getDOMObjectWrapper() but calls reportExtraMemoryCost() with
        the byteLength of the array.
        
        * bindings/js/JSFloat32ArrayCustom.cpp:
        (WebCore::toJS): Use toJSArrayBufferView.
        * bindings/js/JSInt16ArrayCustom.cpp:
        (WebCore::toJS): Use toJSArrayBufferView.
        * bindings/js/JSInt32ArrayCustom.cpp:
        (WebCore::toJS): Use toJSArrayBufferView.
        * bindings/js/JSInt8ArrayCustom.cpp:
        (WebCore::toJS): Use toJSArrayBufferView.
        * bindings/js/JSUint16ArrayCustom.cpp:
        (WebCore::toJS): Use toJSArrayBufferView.
        * bindings/js/JSUint32ArrayCustom.cpp:
        (WebCore::toJS): Use toJSArrayBufferView.
        * bindings/js/JSUint8ArrayCustom.cpp:
        (WebCore::toJS): Use toJSArrayBufferView.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer): Call heap.reportExtraMemoryCost()
        with the size of the canvas backing store.
        
        * html/canvas/TypedArrayBase.h:
        (WebCore::TypedArrayBase::byteLength): byteLength needs to
        be public.
        
        * platform/graphics/ImageBuffer.h: Add dataSize() method.
        
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::dataSize): Implement dataSize().
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::dataSize): Implement dataSize().
        * platform/graphics/haiku/ImageBufferHaiku.cpp:
        (WebCore::ImageBuffer::dataSize): Implement dataSize().
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::dataSize): Implement dataSize().
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::dataSize): Implement dataSize().
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBuffer::dataSize): Implement dataSize().
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::dataSize): Implement dataSize().

2011-01-21  Adam Roben  <aroben@apple.com>

        Rename WKCACFLayerRenderer[Client] to CACFLayerTreeHost[Client]

        Also renamed a few functions and data members to match.

        Fixes <http://webkit.org/b/52898> WKCACFLayerRenderer sounds like a render object, but isn't

        Reviewed by Simon Fraser.

        * WebCore.vcproj/WebCore.vcproj: Updated files' names and paths.

        * WebCore.vcproj/WebCoreQuartzCore.vsprops: Added platform/graphics/ca/win to the include
        path.

        * WebCore.vcproj/copyForwardingHeaders.cmd: Copy headers from platform/graphics/ca/win, too.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp: Renamed from Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp.
        * platform/graphics/ca/win/CACFLayerTreeHost.h: Renamed from Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        Updated for renames.

2011-01-21  Patrick Gansterer  <paroga@paroga.com>

        Original patch from François Sausset  <sausset@gmail.com>

        Reviewed by Darin Adler.

        Code cleaning in rendering/mathml/RenderMathMLFraction.cpp
        https://bugs.webkit.org/show_bug.cgi?id=52201

        Replace unneeded doubles by floats and remove unneeded casts.

        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * rendering/mathml/RenderMathMLFraction.h:

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

        Reviewed by Darin Adler.

        REGRESSION(r73618): Clicking on a search input causes a crash.
        https://bugs.webkit.org/show_bug.cgi?id=52905

        The problem is caused by TextControlInnerElement being used both as
        shadow root and an element in a shadow subtree. The code assumed it is
        only used as a shadow root.

        Since this code is all just workaround for in-progress conversion to
        new shadow DOM, I am just adding a check. This code will disappear
        completely once bug 52788 is fixed.

        Test: fast/dom/search-shadow-host-crash.html

        * dom/Node.cpp:
        (WebCore::Node::setShadowHost): Added an ASSERT for early detection
            of attempting to stomp on the parentNode.
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::detach): Added a check to only
            clear shadow host if we have one.

2011-01-21  Adam Roben  <aroben@apple.com>

        Replace some "sync compositing state" terminology with "flush pending GraphicsLayer changes"

        This seems to be the direction in which our code is moving. I chose "GraphicsLayer" as
        opposed to just "layer" because there are cases where we flush changes to CACFLayers that
        don't have a corresponding GraphicsLayer.

        Fixes <http://webkit.org/b/52894> "Sync compositing state" terminology in
        WKCACFLayerRenderer and friends is confusing

        Reviewed by Simon Fraser.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::render):
        Updated for renames.

        (WebCore::WKCACFLayerRenderer::flushPendingGraphicsLayerChangesSoon): Renamed from
        syncCompositingStateSoon, and updated for other renames.

        * platform/graphics/win/WKCACFLayerRenderer.h: Renamed m_syncLayerChanges to
        * m_shouldFlushPendingGraphicsLayerChanges.
        (WebCore::WKCACFLayerRendererClient::flushPendingGraphicsLayerChanges): Renamed from
        syncCompositingState.

2011-01-21  Adam Roben  <aroben@apple.com>

        Clean up PlatformCAAnimationWin

        Fixes <http://webkit.org/b/52904> PlatformCAAnimationWin is leaky and inefficient

        Reviewed by Simon Fraser.

        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (toCACFFillModeType):
        (fromCACFFillModeType):
        (toCACFValueFunctionType):
        (fromCACFValueFunctionType):
        Changed to take and return CFStringRefs. There's no need to convert to WebCore::String just
        so we can later convert back to CFStringRef.

        (toCACFTimingFunction): Fixed leaks by changing this to return a RetainPtr and adopting the
        results of CACFTimingFunctionCreate.
        (PlatformCAAnimation::PlatformCAAnimation): Changed not to needlessly roundtrip through
        WebCore::String. Also changed an ASSERT(0) to ASSERT_NOT_REACHED().

        (PlatformCAAnimation::setFillMode):
        (PlatformCAAnimation::setTimingFunction):
        (PlatformCAAnimation::setValueFunction):
        (PlatformCAAnimation::setTimingFunctions):
        Updated for changes to the above conversion functions.

2011-01-21  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Fisher.

        FrameLoader::checkLoadCompleteForThisFrame uses wrong history item
        https://bugs.webkit.org/show_bug.cgi?id=48812

        Most calls to stopAllLoaders now clear the history's provisional item(s).
        We can now avoid resetting the back/forward state if a new navigation
        is in progress.

        Test: http/tests/navigation/back-twice-without-commit.html
        Test: http/tests/navigation/forward-and-cancel.html

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        * WebCore.exp.in: Update stopAllLoaders signature.

2011-01-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Show caps lock indicator in password fields
        https://bugs.webkit.org/show_bug.cgi?id=52878

        Test: manual-tests/password-caps-lock.html

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::currentCapsLockState): Implement
        currentCapsLockState() using GDK API.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintCapsLockIndicator): Paint an icon
        in the password field when the caps lock modifier is locked.
        * platform/gtk/RenderThemeGtk.h:

2011-01-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move sticky breakpoints management from InspectorController to InspectorBrowserDebuggerAgent.
        https://bugs.webkit.org/show_bug.cgi?id=52874

        This is the first step of debugger api refactoring (see bug 52879).
        JavaScript breakpoints are still in the same list as native breakpoints and are restored by InspectorBrowserDebuggerAgent.
        The second step will be to move sticky JavaScript breakpoints to InspectorDebuggerAgent.

        * inspector/Inspector.idl:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints):
        (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged):
        (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::discardBindings):
        (WebCore::InspectorBrowserDebuggerAgent::didInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::didRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints):
        * inspector/InspectorBrowserDebuggerAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::resume):
        (WebCore::InspectorController::inspectedURL):
        * inspector/InspectorController.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):

2011-01-21  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Jeremy Orlow.

        Turn off uninitialized errors for ARM linux build.
        https://bugs.webkit.org/show_bug.cgi?id=52893

        Fix ARM compiler breakage.

        * WebCore.gyp/WebCore.gyp:

2011-01-21  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium] REGRESSION: Using the "Back" button
        while profiling causes renderer crash.

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

        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):

2011-01-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: switch page/Console implementation from InspectorController to InspectorInstrumentation.

        There are some places in WebCore where we still using direct InspectorController calls.
        The idea is to pass all the Inspector related calls via InspectorInstrumentaion which is the
        Inspector facade for WebCore.

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

        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addProfileImpl):
        (WebCore::InspectorInstrumentation::profilerEnabledImpl):
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileNameImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::addProfile):
        (WebCore::InspectorInstrumentation::profilerEnabled):
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileName):
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):

2011-01-12  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: breakpoints are restored incorrectly when reverting live edit.
        https://bugs.webkit.org/show_bug.cgi?id=52300

        Fix breakpoints restoring when reverting to old revision by using text diff.
        Move live edit logic from ScriptsPanel to DebuggerModel.
        Eliminate unnecessary editLine delegate in TextViewer.

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.reset):
        (WebInspector.DebuggerModel.prototype.editScriptSource):
        (WebInspector.DebuggerModel.prototype._updateScriptSource):
        (WebInspector.DebuggerModel.prototype.get callFrames):
        (WebInspector.DebuggerModel.prototype.pausedScript):
        (WebInspector.DebuggerModel.prototype.resumedScript):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.get source):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._scriptSourceChanged):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        (WebInspector.SourceFrame.prototype._doubleClick.didEditLine):
        (WebInspector.SourceFrame.prototype._doubleClick):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer):
        (WebInspector.TextViewer.prototype._handleKeyDown):
        (WebInspector.TextViewer.prototype.editLine.finishEditing):
        (WebInspector.TextViewer.prototype.editLine):
        (WebInspector.TextChunk.prototype._createRow):

2011-01-21  Adam Klein  <adamk@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Rename ChromiumBridge to PlatformBridge
        https://bugs.webkit.org/show_bug.cgi?id=52471

        No tests added as this is a rename; no change in behavior.

        * WebCore.gypi:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::reportFatalErrorInV8):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::isLinkVisited):
        * platform/android/PlatformBridge.h:
        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/chromium/ChromiumBridge.h: Removed.
        * platform/chromium/ChromiumDataObjectLegacy.cpp:
        (WebCore::ChromiumDataObjectLegacy::getData):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::revealFolderInOS):
        (WebCore::directoryName):
        (WebCore::pathByAppendingComponent):
        (WebCore::makeAllDirectories):
        (WebCore::fileExists):
        (WebCore::openFile):
        (WebCore::closeFile):
        (WebCore::seekFile):
        (WebCore::truncateFile):
        (WebCore::readFromFile):
        (WebCore::writeToFile):
        * platform/chromium/LanguageChromium.cpp:
        (WebCore::platformDefaultLanguage):
        * platform/chromium/LinkHashChromium.cpp:
        (WebCore::visitedLinkHash):
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/PlatformBridge.h:
        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/chromium/ReadableDataObject.cpp:
        (WebCore::ReadableDataObject::getData):
        (WebCore::ReadableDataObject::urlTitle):
        (WebCore::ReadableDataObject::htmlBaseUrl):
        (WebCore::ReadableDataObject::filenames):
        (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
        * platform/chromium/SSLKeyGeneratorChromium.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/chromium/ScrollbarThemeChromium.cpp:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumLinux::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumLinux::paintButton):
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):
        (WebCore::ScrollbarThemeChromiumLinux::buttonSize):
        (WebCore::ScrollbarThemeChromiumLinux::minimumThumbLength):
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::scrollbarStateToThemeState):
        (WebCore::ScrollbarThemeChromiumMac::paint):
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumWin::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumWin::paintButton):
        (WebCore::ScrollbarThemeChromiumWin::paintThumb):
        (WebCore::ScrollbarThemeChromiumWin::buttonSize):
        * platform/chromium/SharedTimerChromium.cpp:
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):
        * platform/chromium/SuddenTerminationChromium.cpp:
        (WebCore::disableSuddenTermination):
        (WebCore::enableSuddenTermination):
        * platform/chromium/SystemTimeChromium.cpp:
        (WebCore::currentTime):
        * platform/chromium/WritableDataObject.cpp:
        (WebCore::WritableDataObject::setData):
        * platform/graphics/chromium/CrossProcessFontLoading.mm:
        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::fontContainsCharacter):
        (WebCore::FillLogFont):
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::scriptFontProperties):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::querySystemForRenderStyle):
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):
        * platform/graphics/chromium/ImageChromium.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/chromium/ImageChromiumMac.mm:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/UniscribeHelperTextRun.cpp:
        (WebCore::UniscribeHelperTextRun::tryToPreloadFont):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/chromium/DNSChromium.cpp:
        (WebCore::prefetchDNS):
        * platform/qt/PlatformBridge.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        (WebCore::SQLiteFileSystem::deleteDatabaseFile):
        (WebCore::SQLiteFileSystem::getDatabaseFileSize):
        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
        (chromiumOpen):
        (chromiumDelete):
        (chromiumAccess):
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:
        * plugins/chromium/PluginDataChromium.cpp:
        (WebCore::PluginCache::plugins):
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::usesTestModeFocusRingColor):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::caretBlinkInterval):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumWin::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumWin::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumWin::systemColor):
        (WebCore::RenderThemeChromiumWin::paintButton):
        (WebCore::RenderThemeChromiumWin::paintSliderTrack):
        (WebCore::menuListButtonWidth):
        (WebCore::RenderThemeChromiumWin::paintMenuList):
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton):
        (WebCore::RenderThemeChromiumWin::paintProgressBar):
        * storage/chromium/IDBFactoryBackendInterface.cpp:
        (WebCore::IDBFactoryBackendInterface::create):
        (WebCore::IDBFactoryBackendInterface::~IDBFactoryBackendInterface):
        * storage/chromium/IDBKeyPathBackendImpl.cpp:
        (WebCore::IDBKeyPathBackendImpl::createIDBKeysFromSerializedValuesAndKeyPath):

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

        Unreviewed, rolling out r76335.
        http://trac.webkit.org/changeset/76335
        https://bugs.webkit.org/show_bug.cgi?id=52875

        profiler tests were broken (Requested by loislo on #webkit).

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::getCurrentUserInitiatedProfileName):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole):
        (WebCore::InspectorInstrumentation::inspectorControllerWithFrontendForPage):
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):

2011-01-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: switch page/Console implementation from InspectorController to InspectorInstrumentation.

        There are some places in WebCore where we still using direct InspectorController calls.
        The idea is to pass all the Inspector related calls via InspectorInstrumentaion which is the
        Inspector facade for WebCore.

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

        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addProfileImpl):
        (WebCore::InspectorInstrumentation::profilerEnabledImpl):
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileNameImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::addProfile):
        (WebCore::InspectorInstrumentation::profilerEnabled):
        (WebCore::InspectorInstrumentation::getCurrentUserInitiatedProfileName):
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):

2011-01-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix failing tests from r76291.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollPosition):
        (WebCore::ScrollView::updateScrollbars):
        Take the scroll origin into account in more places.

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

        Unreviewed, sorting an Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2011-01-20  Ben Vanik  <ben.vanik@gmail.com>

        Reviewed by Kenneth Russell.

        Implementation of the OES_standard_derivatives WebGL extension.
        https://bugs.webkit.org/show_bug.cgi?id=51678

        Changes are modeled off of the existing OESTextureFloat extension. New files,
        extension retrieval, etc all match the existing code.

        Changed ANGLEWebKitBridge to allow for multiple sets of the ANGLE shader compiler
        options. This supports the enabling of the standard derivatives flag when the
        extension is enabled. Refactored the cleanup code to make the destruction of the
        compilers (if they had been created) cleaner.

        Tested with the WebGL conformance test:
        https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/conformance/oes-standard-derivatives.html
        Passes on WebKit/OSX, Chromium/OSX, and Chromium/Windows.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        * html/canvas/OESStandardDerivatives.cpp: Added.
        (WebCore::OESStandardDerivatives::OESStandardDerivatives):
        (WebCore::OESStandardDerivatives::~OESStandardDerivatives):
        (WebCore::OESStandardDerivatives::getName):
        (WebCore::OESStandardDerivatives::create):
        * html/canvas/OESStandardDerivatives.h: Added.
        * html/canvas/OESStandardDerivatives.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension): Enable and return the new extension.
        (WebCore::WebGLRenderingContext::getParameter): Support extension enum when enabled.
        (WebCore::WebGLRenderingContext::getSupportedExtensions): 
        (WebCore::WebGLRenderingContext::hint): Validate extension enum when enabled.
        (WebCore::WebGLRenderingContext::getNumberOfExtensions):
        (WebCore::WebGLRenderingContext::getExtensionNumber):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::ANGLEWebKitBridge::~ANGLEWebKitBridge): Cleaned up compiler cleanup.
        (WebCore::ANGLEWebKitBridge::cleanupCompilers): Destruct compilers.
        (WebCore::ANGLEWebKitBridge::setResources): Cleanup existing compilers when changing
        ANGLE settings.
        (WebCore::ANGLEWebKitBridge::validateShaderSource): Cleaned up compiler cleanup on error.
        * platform/graphics/ANGLEWebKitBridge.h:
        (WebCore::ANGLEWebKitBridge::getResources):
        * platform/graphics/Extensions3D.h: Added enumeration for the extension.
        * platform/graphics/GraphicsContext3D.h: lumbing for GraphicsContext3D.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::Extensions3DOpenGL): Plumbed through a pointer to the
        GraphicsContext3D to handle resetting the shader compilers.
        (WebCore::Extensions3DOpenGL::supports): Desktop GL always supports this extension,
        so always return true.
        (WebCore::Extensions3DOpenGL::ensureEnabled): Reset shader compilers as required.
        * platform/graphics/opengl/Extensions3DOpenGL.h: Plumbing for GraphicsContext3D.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getExtensions): Plumbing for GraphicsContext3D to
        Extensions3DOpenGL.

2011-01-20  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Fix regression(r71566): PDF in RTL block might messes up text directionality.
        https://bugs.webkit.org/show_bug.cgi?id=52776

        Test: fast/dom/52776.html

        * platform/text/BidiResolver.h:
        (WebCore::::checkDirectionInLowerRaiseEmbeddingLevel):
        (WebCore::::lowerExplicitEmbeddingLevel):
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::createBidiRunsForLine):

2011-01-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        Follow-on for <rdar://problem/8890255>

        This fixes a painting error with ScrollbarPainter scrollers
        and the new drawing area code path.
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::updateArrowPlacement):

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

        Unreviewed.

        Fixing build breakage.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::willBeModified):

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

        Reviewed by Ryosuke Niwa.

        RTL: Caret goes to the opposite direction when pressing an arrow key after selection is made
        https://bugs.webkit.org/show_bug.cgi?id=49511

        Test: editing/selection/rtl-move-selection-right-left.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::willBeModified):
        Respecting the direction of the containing block when switching selection base and extent in
        RTL content.

        (WebCore::SelectionController::modifyMovingRight):
        (WebCore::SelectionController::modifyMovingLeft):
        Using directionOfEnclosingBlock when deciding to use the selection start or end to do the
        correct thing for RTL.

2011-01-20  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Null-check m_frame in DOMWindow::setLocation(), since it's
        possible to reach this point without it having been checked
        already.
        https://bugs.webkit.org/show_bug.cgi?id=52769

        Test: fast/dom/Window/Location/set-location-after-close.html

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

2011-01-20  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Darin Adler.

        setContentEditable with invalid string should throw exception.
        https://bugs.webkit.org/show_bug.cgi?id=52057

        Implemented exception throwing for setContentEditable according to the following spec:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#attr-contenteditable
        Related quotas: "On setting, if the new value is an ASCII case-insensitive match for the 
        string 'inherit' then the content attribute must be removed, if the new value is an ASCII 
        case-insensitive match for the string 'true' then the content attribute must be set to the 
        string 'true', if the new value is an ASCII case-insensitive match for the string 'false' 
        then the content attribute must be set to the string 'false', and otherwise the attribute 
        setter must raise a SYNTAX_ERR exception."

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setContentEditable): Throw exception on invalid input strings; Make setting values case-insensitive and also convert them to lower cases according to the spec.
        * html/HTMLElement.h: Add additional parameter ExceptionCode& for function setContentEditable.
        * html/HTMLElement.idl: Add exception throwing support for contentEditable setter.

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

        Reviewed by James Robinson.

        [chromium] Composited render surfaces should allow writes to alpha channel.
        https://bugs.webkit.org/show_bug.cgi?id=52766

        Test: LayoutTests/platform/chromium/compositing

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):

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

        Reviewed by Eric Carlson.

        REGRESSION (r71842): Compass video is not playing in Safari welcome page
        https://bugs.webkit.org/show_bug.cgi?id=52506

        New test: LayoutTests/media/video-currentTime-delay.html

        Call invalidateCachedTime() every time one of the cached property dependencies changes,
        i.e. m_paused and m_playbackRate.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::setPlaybackRate):
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged):

2011-01-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoffrey Garen.

        Fix for <rdar://problem/8890255>

        Allow WebKitSystemInterface to draw scrollbars 
        when appropriate.
        * WebCore.exp.in:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::scrollbarMap):
        (+[ScrollbarPrefsObserver appearancePrefsChanged:]):
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):
        (WebCore::ScrollbarThemeMac::paint):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2011-01-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Cleanup Scrollbar/ScrollbarClient relationship
        https://bugs.webkit.org/show_bug.cgi?id=52779

        Pipe all scrolling through the ScrollbarClient/ScrollAnimator
        rather than through the Scrollbar. The Scrollbar now is just
        a "view" on the scroll position of the scrollable area it is
        attached to.

        There are now two ways to scroll a scrollable area:
        - ScrollbarClient::scroll()
        - ScrollbarClient::scrollToOffsetWithoutAnimation()

        Both of these go through the ScrollAnimator (updating its state
        or starting an animation). The ScrollAnimator, in turn, now calls
        ScrollbarClient::setScrollOffsetFromAnimation, which tells the
        Scrollbars to pull a new offset (via Scrollbar::offsetDidChange)
        and tells the class that derives from ScrollbarClient to scroll
        its contents (via ScrollbarClient::setScrollOffset).

        * WebCore.xcodeproj/project.pbxproj:
        Move Scrollbar.cpp to the right place.

        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::setValue):
        Initiate the scroll through the scrollbar client, rather than the
        scrollbar itself.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollTo):
        * page/FrameView.h:
        Condense the two valueChanged overrides to a single override of the
        scrollTo function.

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimator::currentPosition):
        (WebCore::ScrollAnimator::notityPositionChanged):
        * platform/ScrollAnimator.h:
        * platform/ScrollAnimatorWin.cpp:
        (WebCore::ScrollAnimatorWin::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimatorWin::animateScroll):
        * platform/ScrollAnimatorWin.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollAnimatorMac::immediateScrollToPoint):
        Change setScrollPositionAndStopAnimation to scrollToOffsetWithoutAnimation
        and bottleneck all client notification of changed position through a new
        notityPositionChanged() function.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollOffset):
        (WebCore::ScrollView::scrollTo):
        (WebCore::ScrollView::scrollPosition):
        (WebCore::ScrollView::scroll):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (WebCore::ScrollView::horizontalScrollbar):
        (WebCore::ScrollView::verticalScrollbar):
        Update to scroll via the ScrollbarClient rather than the Scrollbar.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::offsetDidChange):
        (WebCore::Scrollbar::autoscrollPressedPart):
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::mouseMoved):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::setPressedPos):
        Change the scrollbar to only updates its offset in response to
        an offsetDidChange call.

        * platform/ScrollbarClient.cpp:
        (WebCore::ScrollbarClient::scroll):
        (WebCore::ScrollbarClient::scrollToOffsetWithoutAnimation):
        (WebCore::ScrollbarClient::scrollToXOffsetWithoutAnimation):
        (WebCore::ScrollbarClient::scrollToYOffsetWithoutAnimation):
        (WebCore::ScrollbarClient::setScrollOffsetFromAnimation):
        * platform/ScrollbarClient.h:
        (WebCore::ScrollbarClient::horizontalScrollbar):
        (WebCore::ScrollbarClient::verticalScrollbar):
        Make the increasingly misnamed ScrollbarClient responsible for
        scrolling.

        * platform/efl/ScrollbarEfl.cpp:
        (scrollbarEflEdjeMessage):
        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::gtkValueChanged):
        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::contextMenu):
        Update to move scrolling through the client.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::scrollToRevealSelection):
        (WebCore::PopupMenuWin::scrollPosition):
        (WebCore::PopupMenuWin::setScrollOffset):
        (WebCore::PopupMenuWin::scrollTo):
        (WebCore::PopupMenuWin::wndProc):
        * platform/win/PopupMenuWin.h:
        (WebCore::PopupMenuWin::verticalScrollbar):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::setScrollOffset):
        (WebCore::RenderLayer::scrollPosition):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::scroll):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scrollToRevealElementAtListIndex):
        (WebCore::RenderListBox::scroll):
        (WebCore::RenderListBox::logicalScroll):
        (WebCore::RenderListBox::scrollPosition):
        (WebCore::RenderListBox::setScrollOffset):
        (WebCore::RenderListBox::scrollTo):
        (WebCore::RenderListBox::setScrollTop):
        * rendering/RenderListBox.h:
        (WebCore::RenderListBox::verticalScrollbar):
        Update to scroll via the ScrollbarClient rather than the Scrollbar.

        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::start):
        Simplify initial paint to just do an immediate scroll to the position.

2011-01-20  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r76170.

        * platform/graphics/wince/FontWinCE.cpp: Added a missing include.
        * platform/graphics/wince/ImageBufferData.h: Added a missing include and fixed style.

2011-01-20  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        Implement mozilla's requestAnimationFrame API
        https://bugs.webkit.org/show_bug.cgi?id=51218

        This implements mozilla's proposed requestAnimationFrame API.  The idea with this API is that
        an author driving an animation from script could use window.requestAnimationFrame(callback)
        instead of window.setTimeout(callback, 0) to schedule their update logic and let the browser
        decide when to update the animations.  This avoids doing unnecessary work when the page content
        is offscreen or is being displayed at a different framerate than what the page author expects.

        Mozilla's proposal is here: https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame
        This implements window.mozRequestAnimationFrame as window.webkitRequestAnimationFrame with the
        following changes:
        *) Only the callback syntax is supported, there is no before paint event
        *) webkitRequestAnimationFrame supports a second parameter Element to let the author indicate
            what content they intend to animate.  That way if the page is being displayed but the element
            in question is offscreen, we can avoid invoking the callback.
        *) No timestamp is provided to the caller and there is no window.animationStartTime property
            (see https://bugs.webkit.org/show_bug.cgi?id=51952 for discussion of this property)
        *) window.webkitRequestAnimationFrame returns a numerical id that can be used to cancel the callback
            using window.cancelWebkitRequestAnimationFrame, to parallel window.setTimeout()/window.clearTime().

        The implementation depends on the embedder scheduling the callbacks since the callback invocation
        depends on the page's visibility and the embedder's paint scheduling, neither of which are exposed
        to WebCore.  The expectation for the embedder is that at some point Chrome::scheduleAnimation() is
        called FrameView::serviceScriptedAnimations() should be called for the associated Page's main frame.
        Ideally serviceScriptedAnimations() would be called prior to rendering - although in practice the
        embedder has to rate limit callbacks and may not be able to tie the callback directly to the
        rendering loop.

        Tests: 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-within-callback.html
               fast/animation/request-animation-frame.html

        * WebCore.gypi:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::webkitRequestAnimationFrame):
        (WebCore::Document::webkitCancelRequestAnimationFrame):
        (WebCore::Document::serviceScriptedAnimations):
        * dom/Document.h:
        * dom/RequestAnimationFrameCallback.h: Added.
        (WebCore::RequestAnimationFrameCallback::~RequestAnimationFrameCallback):
        * dom/RequestAnimationFrameCallback.idl: Added.
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::scheduleAnimation):
        * page/Chrome.cpp:
        (WebCore::Chrome::scheduleAnimation):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitRequestAnimationFrame):
        (WebCore::DOMWindow::webkitCancelRequestAnimationFrame):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleAnimation):
        (WebCore::FrameView::serviceScriptedAnimations):
        * page/FrameView.h:
        * platform/HostWindow.h:

2011-01-20  James Robinson  <jamesr@chromium.org>

        Reviewed by Nate Chapin.

        [v8] CodeGeneratorV8 generates incorrect code for callbacks with no parameters
        https://bugs.webkit.org/show_bug.cgi?id=52837

        When generating code to invoke a callback with no parameters CodeGeneratorV8.pm was generating the following:
        v8::Handle<v8::Value> argv[] = {}; which does not compile in visual studio.  Instead, if the argument count
        is 0, we can just pass a NULL pointer for the argv parameter.

        Test added to bindings/scripts/test/TestCallback.idl and covered by run-bindings-tests.  This
        patch also includes some spurious changes to the bindings tests golden files (mostly GObject)
        because the old golden files were out of date.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        (WebDOMTestCallback::callbackWithNoParam):
        * bindings/scripts/test/CPP/WebDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_callback_with_no_param):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithNoParam):
        * bindings/scripts/test/JS/JSTestCallback.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithNoParam]):
        * bindings/scripts/test/TestCallback.idl:
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithNoParam):
        * bindings/scripts/test/V8/V8TestCallback.h:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::reflectedUnsignedIntegralAttrAttrGetter):

2011-01-20  James Robinson  <jamesr@chromium.org>

        Reviewed by Eric "Baller" Seidel.

        RenderTableSection's setNeedsCellRecalc needs to null check table()
        https://bugs.webkit.org/show_bug.cgi?id=52770

        Null checks table() before deferencing it in RenderTableSection::setNeedsCellRecalc.
        This can be null during detach().  Test constructed by Eric Seidel.

        Test: fast/css-generated-content/table-with-scrollbar-corner.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setNeedsCellRecalc):
        * rendering/RenderTableSection.h:

2011-01-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Rob Buis.

        SVG Pattern doesn't take preserveAspectRatio of references Pattern
        https://bugs.webkit.org/show_bug.cgi?id=52802

        SVGPattern didn't take preserveAspectRatio of a referenced SVGPattern into account. Store preserveAspectRatio
        in PatternAttributes as well, if the attribute was set on the referenced SVGPattern element.

        Test: svg/custom/pattern-referencing-preserve-aspect-ratio.svg

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildTileImageTransform):
        * svg/PatternAttributes.h:
        (WebCore::PatternAttributes::PatternAttributes):
        (WebCore::PatternAttributes::preserveAspectRatio):
        (WebCore::PatternAttributes::setPreserveAspectRatio):
        (WebCore::PatternAttributes::hasPreserveAspectRatio):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes):

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

        Reviewed by Adele Peterson.

        <rdar://problem/8765498> REGRESSION (r72141): Cannot order prints with Aperture 3.1

        <rdar://problem/8884648> REGRESSION (r72141): Safari hangs when visiting a page on www.bfmtv.com
        https://bugs.webkit.org/show_bug.cgi?id=52765

        <rdar://problem/8890909> REGRESSION (r72141): Very Slow Rendering With Certain Markup
        https://bugs.webkit.org/show_bug.cgi?id=52265

        Test: fast/block/line-layout/negative-max-height.html

        Integer overflow detection led to a block having a huge height. This manifested as broken layout
        in the first bug and as extreme slowness in the latter bugs because of
        https://bugs.webkit.org/show_bug.cgi?id=52832

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection): Clamp maxHeight to 0 so the next line
        cannot start above this line. The negative maxHeight also caused the integer overflow detection
        logic to give the block a huge height.

2011-01-20  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Eric Carlson.

        Clean up the Media Controls CSS for Qt
        https://bugs.webkit.org/show_bug.cgi?id=52822

        Split the audio::-webkit-media-xxx and video::-webkit-media-xxx rules 
        in mediaControlsQt.css, and remove the duplicate audio::-webkit-media-xxx
        rules from mediaControlsQtFullscreen.css.

        * css/mediaControlsQt.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-play-button):
        (video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline-container):
        (video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-current-time-display):
        (video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-time-remaining-display):
        (video::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-timeline):
        (video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider-container):
        (video::-webkit-media-controls-volume-slider-container):
        (audio::-webkit-media-controls-volume-slider):
        (video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-seek-back-button):
        (video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button):
        (video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button):
        (video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-rewind-button):
        (video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button):
        (video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (video::-webkit-media-controls-toggle-closed-captions-button):
        * css/mediaControlsQtFullscreen.css:
        (video::-webkit-media-controls-time-remaining-display):
        (video::-webkit-media-controls-seek-back-button):
        (video::-webkit-media-controls-seek-forward-button):
        (video::-webkit-media-controls-rewind-button):
        (video::-webkit-media-controls-return-to-realtime-button):
        (video::-webkit-media-controls-toggle-closed-captions-button):

2011-01-20  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] Canceling of CSS numeric values increment/decrement is broken
        https://bugs.webkit.org/show_bug.cgi?id=52816

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

2011-01-20  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Andreas Kling.

        [Qt] Fix Layering violation in MediaPlayerPrivateQt.
        https://bugs.webkit.org/show_bug.cgi?id=52733

        No new tests. no behavioral change.

       * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::commitLoad):

2011-01-20  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Call malloc and memcpy directly instead of
        of strdup in convertV8ObjectToNPVariant() when
        converting strings. If there is a null character
        in the string, our use of strdup causes us to allocate
        too little memory, leading to out of bounds reads.

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

        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertV8ObjectToNPVariant):

2011-01-20  Andreas Kling  <kling@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Fill shadow scratch buffer with proper transparent pixels

        QImage::fill() has no Qt::GlobalColor overload in Qt 4.7 (coming in 4.8)
        so doing QImage::fill(Qt::transparent) will actually fill all pixels with
        the RGBA value 0x00000013.

        * platform/graphics/qt/ContextShadowQt.cpp:
        (WebCore::ShadowBuffer::scratchImage):

2011-01-19  Adam Roben  <aroben@apple.com>

        Remove WKCACFContextFlusher

        It wasn't doing anything.

        Fixes <http://webkit.org/b/52752> WKCACFContextFlusher is unused

        Reviewed by Simon Fraser.

        * WebCore.vcproj/WebCore.vcproj: Removed WKCACFContextFlusher. Also let VS have its way with
        the file.

        * platform/graphics/win/WKCACFContextFlusher.cpp: Removed.
        * platform/graphics/win/WKCACFContextFlusher.h: Removed.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::~WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::layerTreeDidChange):
        Stop telling WKCACFContextFlusher about our context, since it never did anything with it.

2011-01-19  Adam Roben  <aroben@apple.com>

        Only flush our own context when we get resized

        Fixes <http://webkit.org/b/52751> All WKCACFContexts with uncommitted
        changes get flushed whenever any composited page is resized

        Reviewed by Simon Fraser.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::resize): Just flush our own context, not all contexts
        WKCACFContextFlusher knows about. After all, ours is the only one that just got resized!

2011-01-19  Adam Roben  <aroben@apple.com>

        Make WKCACFLayerRenderer ref-counted

        This will be needed to handle cases where the client might release its reference to us while
        we're calling out to it.

        WKCACFLayerRenderer now has a setClient function, which is used rather than passing the
        client to create(). This allows clients to null out the client pointer when they're done
        with the renderer.

        Fixes <http://webkit.org/b/52749> WKCACFLayerRenderer should be
        ref-counted

        Reviewed by Simon Fraser.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::MediaPlayerPrivateFullscreenWindow):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        Updated for WKCACFLayerRenderer changes.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::acceleratedCompositingAvailable): Updated for changes to
        create().
        (WebCore::WKCACFLayerRenderer::create): No longer takes a WKCACFLayerRendererClient. Now
        returns a PassOwnPtr.
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): No longer takes a
        WKCACFLayerRendererClient.

        * platform/graphics/win/WKCACFLayerRenderer.h: Made WKCACFLayerRenderer inherit from
        RefCounted.
        (WebCore::WKCACFLayerRenderer::setClient): Added this simple setter.

2011-01-20  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][V8] Unreviewed buildfix after r76248.

        * bindings/v8/ScriptCachedFrameData.h: Add missing include.

2011-01-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: enable resource agent upon request.
        https://bugs.webkit.org/show_bug.cgi?id=52815

        We should not send network-related notifications unless front-end
        is interested.

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::resourceAgent):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::consoleAgent):
        (WebCore::InspectorController::cssAgent):
        (WebCore::InspectorController::domAgent):
        (WebCore::InspectorController::injectedScriptAgent):
        (WebCore::InspectorController::runtimeAgent):
        (WebCore::InspectorController::databaseAgent):
        (WebCore::InspectorController::domStorageAgent):
        (WebCore::InspectorController::fileSystemAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::retrieveResourceAgent):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::restore):
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        (WebCore::InspectorResourceAgent::create):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:

2011-01-20  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Refactoring of the custom allocation framework
        https://bugs.webkit.org/show_bug.cgi?id=49897

        Inheriting from FastAllocBase can result in objects getting larger (bug #33896, #46589).
        The modification replaces Noncopyable and FastAllocBase classes and these inherits with their
        equivalent macro implementation at the necessary places.

2011-01-20  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] CPU Profiles are cleared when navigating back and forth.

        Profiles are now not cleared unless renderer instance was changed.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::restoreProfiler):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):
        (WebCore::InspectorProfilerAgent::resetFrontendProfiles):
        * inspector/InspectorProfilerAgent.h:

2011-01-20  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, add new JS file refs missing from r76116.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/WebKit.qrc:

2011-01-20  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Crash when adding a rule for an ImageDocument
        https://bugs.webkit.org/show_bug.cgi?id=52811

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::addRule2):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):

2011-01-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: cleanup InspectorController's friends list.
        We have a plan to extract InspectorAgent from InspectorController.
        InspectorAgent will be accessible only from InspectorController.
        As result we can simply made some methods public and remove long
        friends list.

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

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::databaseForId):
        (WebCore::InjectedScriptHost::selectDatabase):
        (WebCore::InjectedScriptHost::selectDOMStorage):
        (WebCore::InjectedScriptHost::inspectorDOMAgent):
        (WebCore::InjectedScriptHost::frontend):
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::frontend):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::characterDataModifiedImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorInstrumentation::cancelPauseOnNativeEvent):
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        (WebCore::InspectorInstrumentation::retrieveResourceAgent):

2011-01-19  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement JavaScriptBreakpointsSidebarPane based on events from debugger model.
        https://bugs.webkit.org/show_bug.cgi?id=52723

        Extract all breakpoints-related presentation code from debugger model to JavaScriptBreakpointSidebarPane.

        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.get data):
        (WebInspector.Breakpoint.prototype.remove):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.JavaScriptBreakpointsSidebarPane):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointAdded):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointRemoved):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointEnableChanged):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointItemCheckboxClicked):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._contextMenuEventFired):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._debuggerPaused):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._debuggerResumed):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._addListElement):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._removeListElement):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._projectChanged):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._compare):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._compareBreakpoints):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._setupBreakpointElement.didGetSourceLine):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._setupBreakpointElement):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._breakpointIdForDebuggerPausedEvent):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._setBreakpointEnabled):
        (WebInspector.JavaScriptBreakpointsSidebarPane.prototype._removeBreakpoint):
        (WebInspector.NativeBreakpointsSidebarPane):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.addBreakpointItem):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.removeBreakpoint):
        (WebInspector.DebuggerModel.prototype.breakpointForId):
        (WebInspector.DebuggerModel.prototype._pausedScript):
        (WebInspector.DebuggerModel.prototype._resumedScript):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/inspector.js:

2011-01-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Andreas Kling.

        SVG Pattern doesn't take the viewBox of a referenced Pattern
        https://bugs.webkit.org/show_bug.cgi?id=52804
        
        SVGPattern element didn't use the viewBox of another SVGPattern element, referenced
        by xlink:href. Modified PatternAttributes, to take the value of the viewBox of the
        SVGPattern element as well, if the attribute was set.
        This gets checked by a W3C SVG test case.        

        Test: svg/W3C-SVG-1.1-SE/pservers-pattern-04-f.svg

        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildTileImageTransform):
        * svg/PatternAttributes.h:
        (WebCore::PatternAttributes::PatternAttributes):
        (WebCore::PatternAttributes::viewBox):
        (WebCore::PatternAttributes::setViewBox):
        (WebCore::PatternAttributes::hasViewBox):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes):

2011-01-19  Stephen White  <senorblanco@chromium.org>

        [Re-land of r76159 with a compile fix for the Chromium linux shlib
        build.]

        Reviewed by James Robinson.

        Implement accelerated path drawing and clipping for the Canvas2D GPU
        path.
        https://bugs.webkit.org/show_bug.cgi?id=52627
        
        This is done with a simple curve interpolator and the GLU tesselator,
        which is good enough for a 3-5X speedup on
        http://ie.microsoft.com/testdrive/Performance/Galactic/Default.html.

        Covered by canvas/philip/2d.path.clip.basic.html, and many, many more.
        All tests canvas/philip and fast/canvas paths pass with no
        regressions, although two have minor pixel differences which require
        rebaselining.

        * WebCore.gyp/WebCore.gyp:
        Add internal_glu include path to chromium build.
        * WebCore.gypi:
        Add internal_glu files to chromium build.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::reset):
        (WebCore::CanvasRenderingContext2D::platformLayer):
        Make CanvasRenderingContext2D more robust against failure to create
        a DrawingBuffer.
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        As in DrawingBufferMac.cpp, call reset() from the constructor.
        Also initialize size to (-1, -1), so reset() doesn't early-out.
        Add initializers for depthBuffer and stencilBuffer, and remove
        multisampleDepthStencilBuffer.
        * platform/graphics/chromium/GLES2Canvas.cpp:
        Remove some unused #includes.
        (WebCore::GLES2Canvas::State::State):
        Add clipping state, and implement save/restore via the copy constructor.
        (WebCore::operator*):
        (WebCore::Quadratic::Quadratic):
        (WebCore::Quadratic::fromBezier):
        (WebCore::Quadratic::evaluate):
        Quadratic Bezier curve class.
        (WebCore::Cubic::Cubic):
        (WebCore::Cubic::fromBezier):
        (WebCore::Cubic::evaluate):
        Cubic Bezier curve class.
        (WebCore::GLES2Canvas::clearRect):
        Add clipping support to clearRect().
        (WebCore::GLES2Canvas::fillPath):
        Implement fillPath().
        (WebCore::GLES2Canvas::fillRect):
        Add clipping support to fillRect().
        (WebCore::GLES2Canvas::clipPath):
        Implement clipPath().
        (WebCore::GLES2Canvas::clipOut):
        Stub out clipOut() (not called by Canvas 2D).
        (WebCore::GLES2Canvas::restore):
        When restoring, draw any remaining clipping paths to the stencil buffer.
        (WebCore::GLES2Canvas::drawTexturedRect):
        Add clipping support.
        (WebCore::interpolateQuadratic):
        (WebCore::interpolateCubic):
        Simple curve interpolation, using the Cubic and Quadratic classes.
        (WebCore::PolygonData::PolygonData):
        A struct to hold the tesselation data for callbacks.
        (WebCore::beginData):
        (WebCore::edgeFlagData):
        (WebCore::vertexData):
        (WebCore::endData):
        (WebCore::combineData):
        internal_glu tesselation callbacks.
        (WebCore::GLES2Canvas::createVertexBufferFromPath):
        Build an interpolated, tesselated vertex buffer and element array buffer from a given path, suitable for filling.
        (WebCore::GLES2Canvas::beginStencilDraw):
        Enable stencilling, and disable draws to the color buffer.
        (WebCore::GLES2Canvas::applyClipping):
        If clipping is enabled, set the appropriate GL state.
        * platform/graphics/chromium/GLES2Canvas.h:
        Document the flavours of drawTexturedRect() a bit, so I don't get confused.
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clear):
        (WebCore::DrawingBuffer::createSecondaryBuffers):
        (WebCore::DrawingBuffer::resizeDepthStencil):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:
        Unify m_multisampleDepthStencilBuffer with m_depthStencilBuffer. 
        Implement separate depth and stencil buffers for when
        OES_packed_depth_stencil is not available.  Refactor creation of
        multisampled and non-multisampled depth and stencil buffers into
        resizeDepthStencil().
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        Turn on stencil, turn off depth, turn off antialiasing (for now).
        (WebCore::SharedGraphicsContext3D::enableStencil):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        Implement stencil enable/disable.
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        Remove m_multisampleDepthStencilBuffer.  Set the size to (-1, -1)
        on creation, so reset() doesn't early-out.  Initialize m_depthBuffer
        and m_stencilBuffer.
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::fillPath):
        Put in GPU hooks for path clipping, and path drawing.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::canAccelerate):
        Don't check for clipping paths in canAccelerate() (since we can
        now accelerate them).
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        Don't do clipping when uploading software draws to hardware.
        * thirdparty/glu/README.webkit:
        * thirdparty/glu/gluos.h:
        #undef MIN and MAX, to fix warnings-as-errors in Chrome/Mac build.
        * thirdparty/glu/libtess/geom.c:
        * thirdparty/glu/libtess/priorityq.c:
        * thirdparty/glu/libtess/render.c:
        Use do{}while(0) instead of if(1)else construct in macro.
        * thirdparty/glu/libtess/sweep.c:
        (IsWindingInside):
        (DoneEdgeDict):
        Fix some warnings treated as errors for the Linux Release build.


2011-01-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: move releaseObjectGroup to the new Runtime agent.
        https://bugs.webkit.org/show_bug.cgi?id=52803
        (accedentally landed as r76231)

        * inspector/InspectorContorller.h:
        * inspector/InspectorContorller.cpp:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:

2011-01-20  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: build fix.

        * inspector/InspectorState.h:
        (WebCore::InspectorState::setBoolean):
        (WebCore::InspectorState::setString):
        (WebCore::InspectorState::setLong):

2011-01-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: further simplify InspectorState.
        https://bugs.webkit.org/show_bug.cgi?id=52731

        This change moves XHR logging flag into console agent,
        removes InspectorState pushing to the front-end.

        * inspector/Inspector.idl:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::state):
        (WebCore::InspectorController::settings):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        (WebCore::InspectorState::registerBoolean):
        (WebCore::InspectorState::registerString):
        (WebCore::InspectorState::registerLong):
        (WebCore::InspectorState::registerObject):
        (WebCore::InspectorState::Property::create):
        * inspector/InspectorState.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.consoleMessagesCleared):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher.dispatcher.monitoringXHRStateChanged):
        (WebInspector.ConsoleView.prototype._registerConsoleDomainDispatcher):
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
        * inspector/front-end/inspector.js:

2011-01-20  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix.

        [Qt][V8] Remove unnecessary files after r76224.

        * WebCore.pro:

2011-01-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: prepare for extracting InspectorAgent from InspectorController.
        https://bugs.webkit.org/show_bug.cgi?id=52797

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorAgent):
        (WebCore::InspectorController::cssAgent):
        (WebCore::InspectorController::injectedScriptAgent):
        (WebCore::InspectorController::resourceAgent):
        (WebCore::InspectorController::runtimeAgent):
        (WebCore::InspectorController::timelineAgent):
        (WebCore::InspectorController::databaseAgent):
        (WebCore::InspectorController::domStorageAgent):
        (WebCore::InspectorController::fileSystemAgent):
        (WebCore::InspectorController::browserDebuggerAgent):
        (WebCore::InspectorController::debuggerAgent):
        (WebCore::InspectorController::profilerAgent):
        (WebCore::InspectorController::applicationCacheAgent):

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

        Unreviewed, rolling out r76215.
        http://trac.webkit.org/changeset/76215
        https://bugs.webkit.org/show_bug.cgi?id=52799

        Caused regressions in Chromium; morrita is going to look at it
        tomrorow (Requested by jorlow on #webkit).

        * dom/TextEvent.h:
        * dom/TextEventInputType.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        * editing/CompositeEditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::confirmComposition):
        (WebCore::Editor::setComposition):
        * editing/Editor.h:
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/InsertTextCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        * editing/TypingCommand.h:
        (WebCore::TypingCommand::create):

2010-12-14  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Adam Barth.

        [V8] Get rid of delayed exception reporting in V8ConsoleMessage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=51044

        * WebCore.gypi:
        * bindings/v8/V8ConsoleMessage.cpp: Removed.
        * bindings/v8/V8ConsoleMessage.h: Removed.
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::v8UncaughtExceptionHandler):
        (WebCore::reportUnsafeJavaScriptAccess):
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::addMessageToConsole):
        (WebCore::logInfo):
        (WebCore::V8Proxy::reportUnsafeAccessTo):
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):
        (WebCore::V8Proxy::newInstance):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/specialization/V8BindingState.cpp:
        (WebCore::::immediatelyReportUnsafeAccessTo):

2011-01-19  MORITA Hajime  <morrita@google.com>

        Reviewed by Eric Seidel.

        ShadowElement::m_shadowParent should be removed
        https://bugs.webkit.org/show_bug.cgi?id=52558

        No new tests. No behavioral change.

        * rendering/ShadowElement.h:
        (WebCore::ShadowElement::ShadowElement):

2011-01-20  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: IDBObjectStore.get should fire onsuccess rather than onerror
        https://bugs.webkit.org/show_bug.cgi?id=52725

        Let IDBObjectStore.get() fire the onsuccess handler with the value
        'undefined' for when an object does not exist in the store.

        Update SerializedScriptValue to provide such an undefined value.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::nullValue):
        (WebCore::SerializedScriptValue::undefinedValue):
        * bindings/v8/SerializedScriptValue.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::getInternal):

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

        Reviewed by Pavel Feldman.

        WebCore doesn't fire window.onerror event when uncaught JavaScript exceptions are thrown
        https://bugs.webkit.org/show_bug.cgi?id=8519

        Uncaught exceptions are propagated to window.onerror hander if one is present.
        The handler is expected to be a function accepting three arguments: error message,
        resource url and line number where the exception occured.

        It was decided to dispatch ErrorEvent to all listeners/handlers no matter if they
        were created in the same isolated world where the exception occured or not.

        Tests: fast/events/window-onerror1.html
               fast/events/window-onerror10.html
               fast/events/window-onerror11.html
               fast/events/window-onerror12.html
               fast/events/window-onerror2.html
               fast/events/window-onerror3.html
               fast/events/window-onerror4.html
               fast/events/window-onerror5.html
               fast/events/window-onerror6.html
               fast/events/window-onerror7.html
               fast/events/window-onerror8.html
               fast/events/window-onerror9.html
               http/tests/security/window-onerror-exception-in-iframe.html
               userscripts/window-onerror-for-isolated-world-1.html
               userscripts/window-onerror-for-isolated-world-2.html

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSErrorHandler.cpp: Renamed from WebCore/bindings/js/JSWorkerContextErrorHandler.cpp.
        (WebCore::JSErrorHandler::JSErrorHandler):
        (WebCore::JSErrorHandler::~JSErrorHandler):
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSErrorHandler.h: Copied from WebCore/bindings/js/JSWorkerContextErrorHandler.h.
        (WebCore::JSErrorHandler::create):
        (WebCore::createJSErrorHandler):
        * bindings/js/JSEventListener.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::dispatchNow):
        (WebCore::V8ConsoleMessage::handler): the method was changed to use generic WebCore exception
        reporting mechanism which is also used by JSC bindings.
        * bindings/v8/V8ConsoleMessage.h:
        * bindings/v8/V8EventListener.h:
        * bindings/v8/V8WindowErrorHandler.cpp: Renamed from WebCore/bindings/js/JSWorkerContextErrorHandler.h.
        (WebCore::V8WindowErrorHandler::V8WindowErrorHandler):
        (WebCore::V8WindowErrorHandler::callListenerFunction):
        * bindings/v8/V8WindowErrorHandler.h: Copied from WebCore/dom/ErrorEvent.cpp.
        (WebCore::V8WindowErrorHandler::create):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::v8MessageHandler):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/Document.cpp:
        (WebCore::Document::errorEventTarget):
        (WebCore::Document::logExceptionToConsole):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * dom/ErrorEvent.cpp:
        * dom/ErrorEvent.h:
        * dom/Event.cpp:
        (WebCore::Event::isErrorEvent):
        * dom/Event.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::PendingException::PendingException):
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::reportException): this method is not virtual anymore to
        ensure that error event dispatching algorithm is the same in WorkerContext and in Document.
        (WebCore::ScriptExecutionContext::dispatchErrorEvent):
        * dom/ScriptExecutionContext.h:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::didFail):
        (WebCore::WebSocketChannel::appendToBuffer):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake):
        (WebCore::WebSocketHandshake::readStatusLine):
        (WebCore::WebSocketHandshake::readHTTPHeaders):
        (WebCore::WebSocketHandshake::checkResponseHeaders):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::postExceptionTask):
        (WebCore::postConsoleMessageTask):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        (WebCore::WorkerContext::errorEventTarget):
        (WebCore::WorkerContext::logExceptionToConsole):
        (WebCore::WorkerContext::addMessage):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::performTask):
        (WebCore::postConsoleMessageTask):
        * xml/XMLHttpRequest.cpp:
        (WebCore::reportUnsafeUsage):

2011-01-19  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        Space and tab characters "sent" by an input method give totally different results than typing them directly
        https://bugs.webkit.org/show_bug.cgi?id=5241
        
        * Introduced TextEvent::InputTypeComposition and TypingCommand::TextCompositionType to 
          distinguish text input which is originated by composition.
        * Generalized rebalanceWhitespaceAt() to rebalanceWhitespaceOnTextSubstring() to rebalancing 
          range of string on text node, instead of surrounding part of that.

        Test: editing/inserting/insert-composition-whitespace.html

        * dom/TextEvent.h:
        (WebCore::TextEvent::isComposition):
        * dom/TextEventInputType.h: Added TextEventInputComposition as a member of TextEvent::InputType
        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace):
        (WebCore::CompositeEditCommand::shouldRebalanceLeadingWhitespaceFor):
        (WebCore::CompositeEditCommand::canRebalance):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceOnTextSubstring): Added: A generalized version of rebalanceWhitespaceAt(), which takes a range inside Text string.
        * editing/CompositeEditCommand.h:
        * editing/Editor.cpp:
        (WebCore::Editor::insertTextForConfirmedComposition): Added.
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::confirmComposition): Now uses insertTextForConfirmedComposition().
        (WebCore::Editor::setComposition):
        * editing/Editor.h:
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/InsertTextCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        * editing/TypingCommand.h: Added TypingCommand::m_compositionType and TypingCommand::TextCompositionType
        (WebCore::TypingCommand::setCompositionType): Added.
        (WebCore::TypingCommand::create):

2011-01-19  Dominic Cooney  <dominicc@google.com>

        Reviewed by Kent Tamura.

        Make <keygen> no longer appear to be a <select> element to script.
        https://bugs.webkit.org/show_bug.cgi?id=52557

        The intent is to put <keygen> options into shadow DOM. This change
        takes the first step by hiding the <select> element from
        JavaScript.

        Test: fast/dom/HTMLKeygenElement/keygen.html

        * CMakeLists.txt: Adds new IDL-derived wrapper.
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:
        * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp:
        (WebKit::createKeygenWrapper):
        (WebKit::createHTMLElementWrapper):
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap): Keygen no longer DOMHTMLSelectElement
        * html/HTMLKeygenElement.h:
        (WebCore::HTMLKeygenElement::willValidate): Now public.
        * html/HTMLKeygenElement.idl: Added.
        * html/HTMLTagNames.in: Keygen's wrapper is HTMLKeygenElement.
        * page/DOMWindow.idl: Add HTMLKeygenElement constructor.

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

        Unreviewed, rolling out r76203.
        http://trac.webkit.org/changeset/76203
        https://bugs.webkit.org/show_bug.cgi?id=52784

        Broke Win compile on Chromium bots (Requested by dimich on
        #webkit).

        * WebCore.gypi:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::reportFatalErrorInV8):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::isLinkVisited):
        * platform/android/PlatformBridge.h:
        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/chromium/ChromiumBridge.h: Added.
        * platform/chromium/ChromiumDataObjectLegacy.cpp:
        (WebCore::ChromiumDataObjectLegacy::getData):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::revealFolderInOS):
        (WebCore::directoryName):
        (WebCore::pathByAppendingComponent):
        (WebCore::makeAllDirectories):
        (WebCore::fileExists):
        (WebCore::openFile):
        (WebCore::closeFile):
        (WebCore::seekFile):
        (WebCore::truncateFile):
        (WebCore::readFromFile):
        (WebCore::writeToFile):
        * platform/chromium/LanguageChromium.cpp:
        (WebCore::platformDefaultLanguage):
        * platform/chromium/LinkHashChromium.cpp:
        (WebCore::visitedLinkHash):
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/PlatformBridge.h:
        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/chromium/ReadableDataObject.cpp:
        (WebCore::ReadableDataObject::getData):
        (WebCore::ReadableDataObject::urlTitle):
        (WebCore::ReadableDataObject::htmlBaseUrl):
        (WebCore::ReadableDataObject::filenames):
        (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
        * platform/chromium/SSLKeyGeneratorChromium.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/chromium/ScrollbarThemeChromium.cpp:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumLinux::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumLinux::paintButton):
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):
        (WebCore::ScrollbarThemeChromiumLinux::buttonSize):
        (WebCore::ScrollbarThemeChromiumLinux::minimumThumbLength):
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::scrollbarStateToThemeState):
        (WebCore::ScrollbarThemeChromiumMac::paint):
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumWin::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumWin::paintButton):
        (WebCore::ScrollbarThemeChromiumWin::paintThumb):
        (WebCore::ScrollbarThemeChromiumWin::buttonSize):
        * platform/chromium/SharedTimerChromium.cpp:
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):
        * platform/chromium/SuddenTerminationChromium.cpp:
        (WebCore::disableSuddenTermination):
        (WebCore::enableSuddenTermination):
        * platform/chromium/SystemTimeChromium.cpp:
        (WebCore::currentTime):
        * platform/chromium/WritableDataObject.cpp:
        (WebCore::WritableDataObject::setData):
        * platform/graphics/chromium/CrossProcessFontLoading.mm:
        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::fontContainsCharacter):
        (WebCore::FillLogFont):
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::scriptFontProperties):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::querySystemForRenderStyle):
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):
        * platform/graphics/chromium/ImageChromium.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/chromium/ImageChromiumMac.mm:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/UniscribeHelperTextRun.cpp:
        (WebCore::UniscribeHelperTextRun::tryToPreloadFont):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/chromium/DNSChromium.cpp:
        (WebCore::prefetchDNS):
        * platform/qt/PlatformBridge.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        (WebCore::SQLiteFileSystem::deleteDatabaseFile):
        (WebCore::SQLiteFileSystem::getDatabaseFileSize):
        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
        (chromiumOpen):
        (chromiumDelete):
        (chromiumAccess):
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:
        * plugins/chromium/PluginDataChromium.cpp:
        (WebCore::PluginCache::plugins):
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::usesTestModeFocusRingColor):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::caretBlinkInterval):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumWin::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumWin::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumWin::systemColor):
        (WebCore::RenderThemeChromiumWin::paintButton):
        (WebCore::RenderThemeChromiumWin::paintSliderTrack):
        (WebCore::menuListButtonWidth):
        (WebCore::RenderThemeChromiumWin::paintMenuList):
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton):
        (WebCore::RenderThemeChromiumWin::paintProgressBar):
        * storage/chromium/IDBFactoryBackendInterface.cpp:
        (WebCore::IDBFactoryBackendInterface::create):
        (WebCore::IDBFactoryBackendInterface::~IDBFactoryBackendInterface):
        * storage/chromium/IDBKeyPathBackendImpl.cpp:
        (WebCore::IDBKeyPathBackendImpl::createIDBKeysFromSerializedValuesAndKeyPath):

2011-01-19  Helder Correia  <helder@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] GraphicsContext::strokePath() paints solid shadows with incorrect alpha
        https://bugs.webkit.org/show_bug.cgi?id=52705

        This is related to bug 52611. The shadow color alpha must be multiplied
        by the context pen alpha. Fixing this results in correct behavior for
        Canvas path stroke() and strokeRect() [which relies on stroke()].

        Tests: fast/canvas/canvas-strokePath-alpha-shadow.html
               fast/canvas/canvas-strokeRect-alpha-shadow.html

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

2011-01-19  Darin Fisher  <darin@chromium.org>

        Reviewed by Mihai Parparita.

        Re-initialize the HistoryItem fully when navigating to a HistoryItem,
        or replacing a HistoryItem, results in a different URL.

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

        This patch also forces all HistoryItems to record the post-redirect
        URL.  Previously, frames would remember the pre-redirect URL.  This is
        problematic since other members of the HistoryItem correspond to the
        post-redirect URL.

        Tests: fast/history/history-replace-updates-current-item.html
               http/tests/navigation/redirect-on-back-updates-history-item.html
               http/tests/navigation/redirect-on-reload-updates-history-item.html

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::reset):
        * history/HistoryItem.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForBackForwardNavigation):
        (WebCore::HistoryController::updateForReload):
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        (WebCore::HistoryController::initializeItem):
        (WebCore::HistoryController::createItem):
        (WebCore::HistoryController::createItemTree):
        (WebCore::HistoryController::updateCurrentItem):
        * loader/HistoryController.h:

2011-01-19  Adam Klein  <adamk@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Rename ChromiumBridge to PlatformBridge
        https://bugs.webkit.org/show_bug.cgi?id=52471

        No tests added as this is a rename; no change in behavior.

        * WebCore.gypi:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::reportFatalErrorInV8):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::isLinkVisited):
        * platform/android/PlatformBridge.h:
        * platform/audio/chromium/AudioBusChromium.cpp:
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/chromium/ChromiumBridge.h: Removed.
        * platform/chromium/ChromiumDataObjectLegacy.cpp:
        (WebCore::ChromiumDataObjectLegacy::getData):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::revealFolderInOS):
        (WebCore::directoryName):
        (WebCore::pathByAppendingComponent):
        (WebCore::makeAllDirectories):
        (WebCore::fileExists):
        (WebCore::openFile):
        (WebCore::closeFile):
        (WebCore::seekFile):
        (WebCore::truncateFile):
        (WebCore::readFromFile):
        (WebCore::writeToFile):
        * platform/chromium/LanguageChromium.cpp:
        (WebCore::platformDefaultLanguage):
        * platform/chromium/LinkHashChromium.cpp:
        (WebCore::visitedLinkHash):
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/PlatformBridge.h:
        * platform/chromium/PlatformScreenChromium.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/chromium/ReadableDataObject.cpp:
        (WebCore::ReadableDataObject::getData):
        (WebCore::ReadableDataObject::urlTitle):
        (WebCore::ReadableDataObject::htmlBaseUrl):
        (WebCore::ReadableDataObject::filenames):
        (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
        * platform/chromium/SSLKeyGeneratorChromium.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/chromium/ScrollbarThemeChromium.cpp:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumLinux::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumLinux::paintButton):
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):
        (WebCore::ScrollbarThemeChromiumLinux::buttonSize):
        (WebCore::ScrollbarThemeChromiumLinux::minimumThumbLength):
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::scrollbarStateToThemeState):
        (WebCore::ScrollbarThemeChromiumMac::paint):
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        (WebCore::ScrollbarThemeChromiumWin::scrollbarThickness):
        (WebCore::ScrollbarThemeChromiumWin::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumWin::paintButton):
        (WebCore::ScrollbarThemeChromiumWin::paintThumb):
        (WebCore::ScrollbarThemeChromiumWin::buttonSize):
        * platform/chromium/SharedTimerChromium.cpp:
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):
        * platform/chromium/SuddenTerminationChromium.cpp:
        (WebCore::disableSuddenTermination):
        (WebCore::enableSuddenTermination):
        * platform/chromium/SystemTimeChromium.cpp:
        (WebCore::currentTime):
        * platform/chromium/WritableDataObject.cpp:
        (WebCore::WritableDataObject::setData):
        * platform/graphics/chromium/CrossProcessFontLoading.mm:
        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::fontContainsCharacter):
        (WebCore::FillLogFont):
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::scriptFontProperties):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::querySystemForRenderStyle):
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        (WebCore::fillBMPGlyphs):
        * platform/graphics/chromium/ImageChromium.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/chromium/ImageChromiumMac.mm:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/UniscribeHelperTextRun.cpp:
        (WebCore::UniscribeHelperTextRun::tryToPreloadFont):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/chromium/DNSChromium.cpp:
        (WebCore::prefetchDNS):
        * platform/qt/PlatformBridge.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        (WebCore::SQLiteFileSystem::deleteDatabaseFile):
        (WebCore::SQLiteFileSystem::getDatabaseFileSize):
        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
        (chromiumOpen):
        (chromiumDelete):
        (chromiumAccess):
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:
        * plugins/chromium/PluginDataChromium.cpp:
        (WebCore::PluginCache::plugins):
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::usesTestModeFocusRingColor):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::caretBlinkInterval):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumWin::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumWin::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumWin::systemColor):
        (WebCore::RenderThemeChromiumWin::paintButton):
        (WebCore::RenderThemeChromiumWin::paintSliderTrack):
        (WebCore::menuListButtonWidth):
        (WebCore::RenderThemeChromiumWin::paintMenuList):
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton):
        (WebCore::RenderThemeChromiumWin::paintProgressBar):
        * storage/chromium/IDBFactoryBackendInterface.cpp:
        (WebCore::IDBFactoryBackendInterface::create):
        (WebCore::IDBFactoryBackendInterface::~IDBFactoryBackendInterface):
        * storage/chromium/IDBKeyPathBackendImpl.cpp:
        (WebCore::IDBKeyPathBackendImpl::createIDBKeysFromSerializedValuesAndKeyPath):

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

        Unreviewed, rolling out r76187.
        http://trac.webkit.org/changeset/76187
        https://bugs.webkit.org/show_bug.cgi?id=52778

        Broke caret-showing tests on SnowLeopard and Chromium
        (Requested by dimich on #webkit).

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2011-01-19  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Kent Tamura.

        Fix for Bug 52279 - WebCore::RenderBlock::updateFirstLetter crashes for anonymous blocks
        https://bugs.webkit.org/show_bug.cgi?id=52279

        In constructing text fragments to handle first-letter rule, first add
        the text for the non-first letters and then remove the original text,
        rather than the other way around. Otherwise, the text can be added to
        an anoymous block that is different from the original one. This breaks
        the assumption that a first letter render object has a non-null sibling
        for the non-first letters and causes a crash.

        Test: fast/css/first-letter-anonymous-block-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):

2011-01-19  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r76194.
        http://trac.webkit.org/changeset/76194
        https://bugs.webkit.org/show_bug.cgi?id=51218

        Caused mysterious compile failure on the chromium win
        build.webkit.org bots

        * WebCore.gypi:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * dom/RequestAnimationFrameCallback.h: Removed.
        * dom/RequestAnimationFrameCallback.idl: Removed.
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/HostWindow.h:

2011-01-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        GraphicsLayers in subframes can get sync'd multiple times
        https://bugs.webkit.org/show_bug.cgi?id=52489

        Some cleanup that will work towards fixing this bug.
        
        Tested by existing iframe compositing tests.

        * WebCore.exp.in: syncCompositingStateRecursive()
        was renamed to syncCompositingStateIncludingSubframes().

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::syncCompositingStateForThisFrame): Some
        code cleanup: do all the word we need to do for this frame,
        including the needsLayout() check.
        (WebCore::FrameView::syncCompositingStateIncludingSubframes):
        This is no longer recursive; instead, it iterates over descendant
        frames via the frame tree, calling syncCompositingStateForThisFrame()
        on each Frame's view.

        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::isFlushingLayers): Getter for the flag.
        * rendering/RenderLayerCompositor.cpp: 
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges): Maintain
        a flag to say if we're flushing, which allows us to assert on re-entrant flushes.
        (WebCore::RenderLayerCompositor::enclosingCompositorFlushingLayers):
        Add the ability to get the rootmost compositor that is in the middle
        of a flush.

2011-01-19  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        Implement mozilla's requestAnimationFrame API
        https://bugs.webkit.org/show_bug.cgi?id=51218

        This implements mozilla's proposed requestAnimationFrame API.  The idea with this API is that
        an author driving an animation from script could use window.requestAnimationFrame(callback)
        instead of window.setTimeout(callback, 0) to schedule their update logic and let the browser
        decide when to update the animations.  This avoids doing unnecessary work when the page content
        is offscreen or is being displayed at a different framerate than what the page author expects.

        Mozilla's proposal is here: https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame
        This implements window.mozRequestAnimationFrame as window.webkitRequestAnimationFrame with the
        following changes:
        *) Only the callback syntax is supported, there is no before paint event
        *) webkitRequestAnimationFrame supports a second parameter Element to let the author indicate
            what content they intend to animate.  That way if the page is being displayed but the element
            in question is offscreen, we can avoid invoking the callback.
        *) No timestamp is provided to the caller and there is no window.animationStartTime property
            (see https://bugs.webkit.org/show_bug.cgi?id=51952 for discussion of this property)
        *) window.webkitRequestAnimationFrame returns a numerical id that can be used to cancel the callback
            using window.cancelWebkitRequestAnimationFrame, to parallel window.setTimeout()/window.clearTime().

        The implementation depends on the embedder scheduling the callbacks since the callback invocation
        depends on the page's visibility and the embedder's paint scheduling, neither of which are exposed
        to WebCore.  The expectation for the embedder is that at some point Chrome::scheduleAnimation() is
        called FrameView::serviceScriptedAnimations() should be called for the associated Page's main frame.
        Ideally serviceScriptedAnimations() would be called prior to rendering - although in practice the
        embedder has to rate limit callbacks and may not be able to tie the callback directly to the
        rendering loop.

        Tests: 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-within-callback.html
               fast/animation/request-animation-frame.html

        * WebCore.gypi:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::webkitRequestAnimationFrame):
        (WebCore::Document::webkitCancelRequestAnimationFrame):
        (WebCore::Document::serviceScriptedAnimations):
        * dom/Document.h:
        * dom/RequestAnimationFrameCallback.h: Added.
        (WebCore::RequestAnimationFrameCallback::~RequestAnimationFrameCallback):
        * dom/RequestAnimationFrameCallback.idl: Added.
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::scheduleAnimation):
        * page/Chrome.cpp:
        (WebCore::Chrome::scheduleAnimation):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitRequestAnimationFrame):
        (WebCore::DOMWindow::webkitCancelRequestAnimationFrame):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/FrameView.cpp:
        (WebCore::FrameView::scheduleAnimation):
        (WebCore::FrameView::serviceScriptedAnimations):
        * page/FrameView.h:
        * platform/HostWindow.h:

2011-01-13  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [GTK] Move progress bar painting out of gtk2drawing.c
        https://bugs.webkit.org/show_bug.cgi?id=52385

        Move progress bar painting to RenderThemeGtk2 and share some animation
        logic between the GTK+ 2.x and GTK+ 3.x port.

        No new tests. This should not change functionality.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::animationRepeatIntervalForProgressBar): Moved from RenderThemeGtk3.
        (WebCore::RenderThemeGtk::animationDurationForProgressBar): Ditto.
        (WebCore::RenderThemeGtk::calculateProgressRect): Calculate the proper rectangle for the
        progress indicator given the rect for the maximum size of the indicator.
        * platform/gtk/RenderThemeGtk.h: Added calculateProgressRect declaration and
        a new widget member for GTK+ 2.x
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::platformInit): Added initialization for the new widget member.
        (WebCore::RenderThemeGtk::paintProgressBar): Paint the progress bar manually instead of
        calling the old Mozilla code.
        (WebCore::RenderThemeGtk::gtkProgressBar): Added.
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::paintProgressBar): Call calculateProgressRect now to get
        the area of the progress indicator.
        * platform/gtk/gtk2drawing.c: Remove unused code.
        (moz_gtk_get_widget_border):
        (moz_gtk_widget_paint):
        * platform/gtk/gtkdrawing.h: Ditto.

2011-01-19  Dmitry Titov  <dimich@chromium.org>

        [Chromium] Not reviewed, reverts the following changes:
        http://trac.webkit.org/changeset/76164 (build fix)
        http://trac.webkit.org/changeset/76159 (main change)

        The change broke Chromium Linux-shlib build.

        Original issue:
        Accelerated canvas2D has bad clipping performance.
        https://bugs.webkit.org/show_bug.cgi?id=52627

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::reset):
        (WebCore::CanvasRenderingContext2D::platformLayer):
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::State::State):
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::fillRect):
        (WebCore::GLES2Canvas::restore):
        (WebCore::GLES2Canvas::drawTexturedRect):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clear):
        (WebCore::DrawingBuffer::createSecondaryBuffers):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::fillPath):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::canAccelerate):
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        * thirdparty/glu/README.webkit:
        * thirdparty/glu/gluos.h:
        * thirdparty/glu/libtess/geom.c:
        * thirdparty/glu/libtess/priorityq.c:
        * thirdparty/glu/libtess/render.c:
        * thirdparty/glu/libtess/sweep.c:
        (IsWindingInside):
        (DoneEdgeDict):

2011-01-19  Levi Weintraub  <leviw@google.com>

        Reviewed by Darin Adler.

        Re-committing this with the proper expected results.

        Changing RenderText::localCaretRect to clip to its containing block's logicalLeft and
        logicalRightLayoutOverflow instead of simply using logicalLeft and logicalRight, as this
        resulted in the caret being placed incorrectly in overflowing editable IFrame content.

        Long lines in non-white-space-pre editable documents show cursor in wrong place
        https://bugs.webkit.org/show_bug.cgi?id=48132

        Test: editing/selection/caret-painting-in-overflowing-autowrap-content.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2011-01-18 MORITA Hajime <morrita@google.com>

        Reviewed by David Levin.

        ElementRareData::m_shadowRoot should not be RefPtr.
        https://bugs.webkit.org/show_bug.cgi?id=51914

        Makes ElementRareData::m_shadowRoot a raw pointer because
        ElementRareData::m_shadowRoot should be like a
        ContaineNode::m_firstChild, which is also a raw pointer.
        pointer. Which also means that both the shadow root and the shadow
        host reference each other as a parent-and-child relationship, via
        a raw pointer.
        
        Note that it is safe not to manipulate the ref-count of
        m_shadowRoot because Node::m_parent of the shadow root points its
        shadow host, and the object isn't deleted even if the refcount is
        zero, as long as the node has non-null m_parent. (See TreeShared.)
        
        The shadow root node is finally destroyed inside
        removeShadowRoot(), where we store the root node into a local
        RefPtr, then make the node's m_parent null, which results the
        destroy the node, at the end of the function, by RefPtr::~RefPtr.
        
        No new tests. No behavioral change.

        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::shadowRoot):
        (WebCore::Element::setShadowRoot):
        (WebCore::Element::removeShadowRoot):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::~ElementRareData):

2011-01-12  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Move text field painting out of gtk2drawing.c
        https://bugs.webkit.org/show_bug.cgi?id=52327

        No new tests. This should not change behavior.

        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::paintButton): Use the setWidgetHasFocus helper.
        (WebCore::RenderThemeGtk::paintTextField): Do this manually now instead
        of calling into the Mozilla code.
        * platform/gtk/WidgetRenderingContext.cpp: Added a couple more wrappers
        for GTK+ theme functions.
        (WebCore::WidgetRenderingContext::gtkPaintFlatBox):
        (WebCore::WidgetRenderingContext::gtkPaintShadow):
        * platform/gtk/WidgetRenderingContext.h: Added new method declarations.
        * platform/gtk/gtk2drawing.c: Remove unused code.
        (moz_gtk_get_widget_border):
        (moz_gtk_widget_paint):
        * platform/gtk/gtkdrawing.h:

2011-01-19  Antti Koivisto  <antti@apple.com>

        Reviewed by Oliver Hunt.

        Cache function offsets to speed up javascript parsing
        https://bugs.webkit.org/show_bug.cgi?id=52622
        
        Use cache to save function offsets and some other info.
        This avoids quite a bit of work when reparsing the source.

        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::cache):
        (WebCore::CachedScriptSourceProvider::cacheSizeChanged):
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/js/ScriptSourceProvider.h:
        (WebCore::ScriptSourceProvider::ScriptSourceProvider):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::destroyDecodedData):
        (WebCore::CachedScript::sourceProviderCache):
        (WebCore::CachedScript::sourceProviderCacheSizeChanged):
        * loader/cache/CachedScript.h:

2011-01-11  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Move toggle button rendering out of gtk2drawing.c
        https://bugs.webkit.org/show_bug.cgi?id=52258

        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::platformInit): Initialize new button members.
        (WebCore::adjustRectForFocus): Added this function which inflates a rect based
        on a widget's exterior focus.
        (WebCore::RenderThemeGtk::adjustRepaintRect): Account for exterior focus.
        (WebCore::setToggleSize): Only listen to indicator-size to properly size
        checkboxes and radio buttons.
        (WebCore::RenderThemeGtk::setCheckboxSize): Call new setToggleSize properly.
        (WebCore::paintToggle): Added.
        (WebCore::RenderThemeGtk::paintCheckbox): Call paintToggle.
        (WebCore::RenderThemeGtk::setRadioSize): Call new setToggleSize properly.
        (WebCore::RenderThemeGtk::paintRadio): Call paintToggle.
        (WebCore::RenderThemeGtk::gtkRadioButton): Added.
        (WebCore::RenderThemeGtk::gtkCheckButton): Added.
        * platform/gtk/WidgetRenderingContext.cpp:
        (WebCore::WidgetRenderingContext::WidgetRenderingContext): Use a static extra space
        variable. This is good enough for all themes that I've tested and prevents having to
        pass information from RenderThemeGtk about every single type of widget.
        (WebCore::WidgetRenderingContext::gtkPaintFocus): Use the paintRect
        to draw instead of m_paintRect. This is important when we're painting
        something that isn't the size of the total rect.
        (WebCore::WidgetRenderingContext::gtkPaintCheck): Added.
        (WebCore::WidgetRenderingContext::gtkPaintOption): Added.
        * platform/gtk/WidgetRenderingContext.h: Updated to reflect new methods.
        * platform/gtk/gtkdrawing.h: Remove newly unused code.
        * platform/gtk/gtk2drawing.c: Ditto.

2011-01-19  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Build fix for r76170
        https://bugs.webkit.org/show_bug.cgi?id=52758

        * platform/graphics/chromium/UniscribeHelperTextRun.cpp:

2011-01-19  David D. Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/52687> Clean up FrameLoader methods for PLUGIN_PROXY_FOR_VIDEO

        Reviewed by Eric Carlson.

        * loader/FrameLoader.cpp: Declare the methods here.
        (WebCore::FrameLoader::hideMediaPlayerProxyPlugin):
        (WebCore::FrameLoader::showMediaPlayerProxyPlugin):
        * loader/FrameLoader.cpp: Moved methods to here...
        (WebCore::FrameLoader::hideMediaPlayerProxyPlugin):
        (WebCore::FrameLoader::showMediaPlayerProxyPlugin):
        * loader/SubframeLoader.cpp: ...from here.
        (WebCore::FrameLoader::hideMediaPlayerProxyPlugin):
        (WebCore::FrameLoader::showMediaPlayerProxyPlugin):

2011-01-19  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Mihai Parparita.

        Perform some forward declaration
        https://bugs.webkit.org/show_bug.cgi?id=52522

        No new tests because no new functionality.

        * accessibility/AccessibilityObject.h:
        * css/WebKitCSSMatrix.cpp:
        * html/HTMLAreaElement.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * inspector/InspectorController.cpp:
        * platform/graphics/FloatPoint.cpp:
        * platform/graphics/Font.cpp:
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/StringTruncator.cpp:
        * platform/graphics/WidthIterator.cpp:
        * platform/graphics/mac/ComplexTextController.cpp:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        * platform/graphics/mac/FontComplexTextMac.cpp:
        * platform/graphics/transforms/TransformationMatrix.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:
        * rendering/EllipsisBox.cpp:
        * rendering/InlineTextBox.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderListBox.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderText.cpp:
        * rendering/RenderTextControl.cpp:
        * rendering/svg/SVGInlineTextBox.cpp:
        * rendering/svg/SVGMarkerLayoutInfo.h:
        * rendering/svg/SVGTextMetrics.cpp:
        * svg/SVGFont.cpp:

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

        Reviewed by Kenneth Russell.

        [chromium] Tiled compositor should use texture manager
        https://bugs.webkit.org/show_bug.cgi?id=52418

        Test: compositing/

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::LayerTilerChromium):
        (WebCore::LayerTilerChromium::reset):
        (WebCore::LayerTilerChromium::createTile):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::draw):
        * platform/graphics/chromium/LayerTilerChromium.h:
        (WebCore::LayerTilerChromium::Tile::Tile):
        (WebCore::LayerTilerChromium::Tile::texture):

2011-01-19  Stephen White  <senorblanco@chromium.org>

        Unreviewed; build fix for chromium.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::fillPath):

2011-01-18  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.

        Implement accelerated path drawing and clipping for the Canvas2D GPU
        path.
        https://bugs.webkit.org/show_bug.cgi?id=52627
        
        This is done with a simple curve interpolator and the GLU tesselator,
        which is good enough for a 3-5X speedup on
        http://ie.microsoft.com/testdrive/Performance/Galactic/Default.html.

        Covered by canvas/philip/2d.path.clip.basic.html, and many, many more.
        All tests canvas/philip and fast/canvas paths pass with no
        regressions, although two have minor pixel differences which require
        rebaselining.

        * WebCore.gyp/WebCore.gyp:
        Add internal_glu include path to chromium build.
        * WebCore.gypi:
        Add internal_glu files to chromium build.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::reset):
        (WebCore::CanvasRenderingContext2D::platformLayer):
        Make CanvasRenderingContext2D more robust against failure to create
        a DrawingBuffer.
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        As in DrawingBufferMac.cpp, call reset() from the constructor.
        Also initialize size to (-1, -1), so reset() doesn't early-out.
        Add initializers for depthBuffer and stencilBuffer, and remove
        multisampleDepthStencilBuffer.
        * platform/graphics/chromium/GLES2Canvas.cpp:
        Remove some unused #includes.
        (WebCore::GLES2Canvas::State::State):
        Add clipping state, and implement save/restore via the copy constructor.
        (WebCore::operator*):
        (WebCore::Quadratic::Quadratic):
        (WebCore::Quadratic::fromBezier):
        (WebCore::Quadratic::evaluate):
        Quadratic Bezier curve class.
        (WebCore::Cubic::Cubic):
        (WebCore::Cubic::fromBezier):
        (WebCore::Cubic::evaluate):
        Cubic Bezier curve class.
        (WebCore::GLES2Canvas::clearRect):
        Add clipping support to clearRect().
        (WebCore::GLES2Canvas::fillPath):
        Implement fillPath().
        (WebCore::GLES2Canvas::fillRect):
        Add clipping support to fillRect().
        (WebCore::GLES2Canvas::clipPath):
        Implement clipPath().
        (WebCore::GLES2Canvas::clipOut):
        Stub out clipOut() (not called by Canvas 2D).
        (WebCore::GLES2Canvas::restore):
        When restoring, draw any remaining clipping paths to the stencil buffer.
        (WebCore::GLES2Canvas::drawTexturedRect):
        Add clipping support.
        (WebCore::interpolateQuadratic):
        (WebCore::interpolateCubic):
        Simple curve interpolation, using the Cubic and Quadratic classes.
        (WebCore::PolygonData::PolygonData):
        A struct to hold the tesselation data for callbacks.
        (WebCore::beginData):
        (WebCore::edgeFlagData):
        (WebCore::vertexData):
        (WebCore::endData):
        (WebCore::combineData):
        internal_glu tesselation callbacks.
        (WebCore::GLES2Canvas::createVertexBufferFromPath):
        Build an interpolated, tesselated vertex buffer and element array buffer from a given path, suitable for filling.
        (WebCore::GLES2Canvas::beginStencilDraw):
        Enable stencilling, and disable draws to the color buffer.
        (WebCore::GLES2Canvas::applyClipping):
        If clipping is enabled, set the appropriate GL state.
        * platform/graphics/chromium/GLES2Canvas.h:
        Document the flavours of drawTexturedRect() a bit, so I don't get confused.
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::clear):
        (WebCore::DrawingBuffer::createSecondaryBuffers):
        (WebCore::DrawingBuffer::resizeDepthStencil):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:
        Unify m_multisampleDepthStencilBuffer with m_depthStencilBuffer. 
        Implement separate depth and stencil buffers for when
        OES_packed_depth_stencil is not available.  Refactor creation of
        multisampled and non-multisampled depth and stencil buffers into
        resizeDepthStencil().
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        Turn on stencil, turn off depth, turn off antialiasing (for now).
        (WebCore::SharedGraphicsContext3D::enableStencil):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        Implement stencil enable/disable.
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        Remove m_multisampleDepthStencilBuffer.  Set the size to (-1, -1)
        on creation, so reset() doesn't early-out.  Initialize m_depthBuffer
        and m_stencilBuffer.
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::fillPath):
        Put in GPU hooks for path clipping, and path drawing.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::canAccelerate):
        Don't check for clipping paths in canAccelerate() (since we can
        now accelerate them).
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        Don't do clipping when uploading software draws to hardware.
        * thirdparty/glu/README.webkit:
        * thirdparty/glu/gluos.h:
        #undef MIN and MAX, to fix warnings-as-errors in Chrome/Mac build.
        * thirdparty/glu/libtess/geom.c:
        * thirdparty/glu/libtess/priorityq.c:
        * thirdparty/glu/libtess/render.c:
        Use do{}while(0) instead of if(1)else construct in macro.
        * thirdparty/glu/libtess/sweep.c:
        (IsWindingInside):
        (DoneEdgeDict):
        Fix some warnings treated as errors for the Linux Release build.

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

        Unreviewed, rolling out r76144.
        http://trac.webkit.org/changeset/76144
        https://bugs.webkit.org/show_bug.cgi?id=52737

        Broke tests on multiple bots, mostly Chromium Canaries
        (Requested by dimich on #webkit).

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2011-01-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        [CSS Gradients] Crash due to out-of-memory with repeating-linear-gradient and latter stop positioned before former
        https://bugs.webkit.org/show_bug.cgi?id=52732
        
        When repeating gradient stops, make sure that the first and last stops are not at the same
        place, otherwise we'll add stops indefinitely and run out of memory.

        Test: fast/gradients/zero-range-repeating-gradient-hang.html

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):

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

        Reviewed by Darin Adler.

        Remove event forwarding logic from input[type=range], simplify event flow and thumb positioning logic.
        https://bugs.webkit.org/show_bug.cgi?id=52464

        This change has two parts:

        1) Utilize shadow DOM event retargeting to get rid of forwarding events
           via render tree;
        2) Move thumb positioning logic from RenderSlider to SliderThumbElement.

        These two are highly co-dependent. It looked ugly when I tried to
        separate them.

        No change in behavior, covered by existing tests.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Added invocation of
            InputType::handleMouseDownEvent.
        * html/InputType.cpp:
        (WebCore::InputType::handleMouseDownEvent): Added empty decl.
        * html/InputType.h: Added def.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent): Added to handle the case
            when the user clicks on the track of the slider. Also removed the
            forwardEvent method.
        * html/RangeInputType.h: Added/removed defs.
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::dragFrom): Added a helper method to start
            dragging from any position.
        (WebCore::SliderThumbElement::dragTo): Added a helper method to drag to
            specified position.
        (WebCore::SliderThumbElement::setPosition): Collapsed most of the positioning
            logic in RenderSlider into this method, which is now a simple calculation
            and adjusting of thumb position based on supplied coordinates.
        (WebCore::SliderThumbElement::startDragging): Added.
        (WebCore::SliderThumbElement::stopDragging): Added.
        (WebCore::SliderThumbElement::defaultEventHandler): Removed most of the
            old position-sniffing logic and replaced with simple calls to start,
            stop, and drag the thumb.
        * html/shadow/SliderThumbElement.h: Added defs.
        * rendering/RenderSlider.cpp: Removed a bunch of code that is no longer
            necessary.
        * rendering/RenderSlider.h: Removed defs, removed now-unnecessary friendliness.

2011-01-19  Shane Stephens  <shanestephens@google.com>

        Reviewed by Chris Marrin.

        Make AffineTransform and TransformationMatrix do matrix multiplication in the correct order (Column Major)
        https://bugs.webkit.org/show_bug.cgi?id=48031

        Fixed reversal, renamed matrix methods to be clearer, found all examples of operator* and
        operator*= usage and switched operand order.

        No new tests as this refactor doesn't add functionality.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::baseTransform):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::fillRect):
        (WebCore::GLES2Canvas::concatCTM):
        (WebCore::GLES2Canvas::drawQuad):
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::setupLayerForOpaqueCompositeLayer):
        (WebCore::TransparencyWin::setupTransformForKeepTransform):
        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::AffineTransform::multiply):
        (WebCore::AffineTransform::rotate):
        * platform/graphics/transforms/AffineTransform.h:
        (WebCore::AffineTransform::operator*=):
        (WebCore::AffineTransform::operator*):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::drawPattern):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::clipToTextMask):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::localToBorderBoxTransform):
        * rendering/svg/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::calculateTransformationToOutermostSVGCoordinateSystem):
        (WebCore::SVGImageBufferTools::renderSubtreeToImageBuffer):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::finalizeTransformMatrices):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::computeCTM):
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGMatrix.h:
        (WebCore::SVGMatrix::multiply):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):
        (WebCore::SVGSVGElement::viewBoxToViewTransform):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::animatedLocalTransform):
        * svg/SVGTransformList.cpp:
        (WebCore::SVGTransformList::concatenate):

2011-01-19  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Darin Adler.

        The return value of contentEditable() function should depend on the DOM attribute
        instead of render style userModify. The code change fixed test cases in the bug
        and partially fixed test cases in other contentEditable bugs;

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

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::contentEditable):

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

        Reviewed by Darin Adler.

        Changing RenderText::localCaretRect to clip to its containing block's logicalLeft and
        logicalRightLayoutOverflow instead of simply using logicalLeft and logicalRight, as this
        resulted in the caret being placed incorrectly in overflowing editable IFrame content.

        Long lines in non-white-space-pre editable documents show cursor in wrong place
        https://bugs.webkit.org/show_bug.cgi?id=48132

        Test: editing/selection/caret-painting-in-overflowing-autowrap-content.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2011-01-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        WK2 - Multiple crashes in PlatformCALayer::replaceSublayer
        https://bugs.webkit.org/show_bug.cgi?id=52695

        Added ASSERTs to the places we assume a non-null superlayer.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):

2011-01-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix for <rdar://problem/8882916> Overlay scrollers require 
        content to layout underneath the scrollbar area

        The render tree should not include scrollbar size for
        overlay scrollers. This patch will allow scrollers on
        the WebView to behave like overflow:overlay.

        Treat overlay scrollers the same way as the !includeScrollbars
        case.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):

        No corner rect for overlay scrollers.
        (WebCore::ScrollView::scrollCornerRect):

        usesOverlayScrollbars() currently always returns no.
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::usesOverlayScrollbars):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::usesOverlayScrollbars):

        includeVerticalScrollbarSize() and includeHorizontalScrollbarSize()
        should return false for overlay scrollers. They already return
        false for overflow:overlay.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::includeVerticalScrollbarSize):
        (WebCore::RenderBox::includeHorizontalScrollbarSize):
        * rendering/RenderBox.h:

        In the render tree, always treat overlay scrollers like
        they have a width and height of 0.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::verticalScrollbarWidth):
        (WebCore::RenderLayer::horizontalScrollbarHeight):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::verticalScrollbarWidth):

2011-01-18  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] simplify complex text code, fixing a handful of layout tests
        https://bugs.webkit.org/show_bug.cgi?id=52661

        Change ComplexTextControllerLinux to lay out RTL text to the left from
        the starting point.  (Previously it always went to the right.)  This allows
        us to map pixel offsets more directly into offsets within the text runs,
        simplifying a few of the text-fiddling functions (they no longer need to
        track the current position, as ComplexTextController now does it).

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::reset):
        (WebCore::ComplexTextController::setGlyphXPositions):
        * platform/graphics/chromium/ComplexTextControllerLinux.h:
        (WebCore::ComplexTextController::offsetX):
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::glyphIndexForXPositionInScriptRun):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):

2011-01-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move methods from InjectedScript domain into DOM,
        Runtime and Debugger domains. Introduce InspectorRuntimeAgent.
        https://bugs.webkit.org/show_bug.cgi?id=52717

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getCompletions):
        (WebCore::InjectedScript::getCompletionsOnCallFrame):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::injectedScriptForMainWorld):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptSource.js:
        (.):
        ():
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::getNodeProperties):
        (WebCore::InspectorDOMAgent::getNodePrototypes):
        (WebCore::InspectorDOMAgent::injectedScriptForNodeId):
        * inspector/InspectorDOMAgent.h:
        (WebCore::EventListenerInfo::EventListenerInfo):
        (WebCore::InspectorDOMAgent::DOMListener::~DOMListener):
        (WebCore::InspectorDOMAgent::create):
        (WebCore::InspectorDOMAgent::cast):
        (WebCore::InspectorDOMAgent::documents):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::getCompletionsOnCallFrame):
        (WebCore::InspectorDebuggerAgent::injectedScriptForCallFrameId):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp: Added.
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::~InspectorRuntimeAgent):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::getCompletions):
        (WebCore::InspectorRuntimeAgent::getProperties):
        (WebCore::InspectorRuntimeAgent::setPropertyValue):
        (WebCore::InspectorRuntimeAgent::pushNodeToFrontend):
        (WebCore::InspectorRuntimeAgent::injectedScriptForObjectId):
        * inspector/InspectorRuntimeAgent.h: Copied from Source/WebCore/inspector/InjectedScript.h.
        (WebCore::InspectorRuntimeAgent::create):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):

2011-01-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add UglifyJS parser and formatter files
        https://bugs.webkit.org/show_bug.cgi?id=51702

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ScriptFormatter.js:
        (WebInspector.ScriptFormatter.positionToLocation):
        (WebInspector.ScriptFormatter.prototype.format.messageHandler):
        (WebInspector.ScriptFormatter.prototype.format):
        (WebInspector.ScriptFormatter.prototype._buildMapping):
        (WebInspector.ScriptFormatter.prototype._convertPosition):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.formatSource.didFormat):
        (WebInspector.SourceFrame.prototype.formatSource):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/parse-js.js: Added. UglifyJS parser.
        * inspector/front-end/process.js: Added. UglifyJS formatter.
        * inspector/front-end/scriptFormatterWorker.js: Added. Worker script that wraps UglifyJS code.
        (onmessage):
        (beautify):
        (loadModule):
        (require):
        * inspector/front-end/utilities.js:
        ():

2011-01-19  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [JSC] scripts have incorrect starting line (always 1).
        https://bugs.webkit.org/show_bug.cgi?id=52721

        Test: inspector/debugger-scripts.html

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::dispatchFailedToParseSource):
        (WebCore::ScriptDebugServer::sourceParsed):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::create):
        (WebCore::StringSourceProvider::startPosition):
        (WebCore::StringSourceProvider::StringSourceProvider):

2011-01-19  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Send origin/url as part of speech input requests to the embedder.
        https://bugs.webkit.org/show_bug.cgi?id=52718

        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::startRecognition): Pass up additional origin parameter.
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::startRecognition): Updated prototype.
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler): Pass the frame origin to speech input request.

2011-01-19  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Support auto-increment keys
        https://bugs.webkit.org/show_bug.cgi?id=52576

        Add support for auto-increment keys.

        Test: storage/indexeddb/objectstore-autoincrement.html

        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::genAutoIncrementKey):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):

2011-01-19  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Laszlo Gombos and Tor Arne Vestbø.

        [Qt] Remove unnecessary "../Source" from paths
        after moving source files into Source is finished.

        * WebCore.pri:
        * WebCore.pro:

2011-01-19  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Employ TextPrompt for CSS property name/value autocompletion
        https://bugs.webkit.org/show_bug.cgi?id=52212

        WebInspector.CSSKeywordCompletions contains a hand-written list of accepted CSS property value keywords
        for each property. WebInspector.TextPrompt is used to suggest both the name and value keywords while
        editing styles, in place of the old custom suggestion code.

        * inspector/front-end/CSSCompletions.js:
        (WebInspector.CSSCompletions.prototype.startsWith): Fix array-out-of-bounds error.
        * inspector/front-end/CSSKeywordCompletions.js: Added.
        (WebInspector.CSSKeywordCompletions.forProperty):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle):
        (WebInspector.StylePropertyTreeElement.prototype):
        ():
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt):
        (WebInspector.TextPrompt.prototype.removeFromElement):
        (WebInspector.TextPrompt.prototype._onKeyDown):
        (WebInspector.TextPrompt.prototype.tabKeyPressed):
        (WebInspector.TextPrompt.prototype.upKeyPressed):
        (WebInspector.TextPrompt.prototype.downKeyPressed):
        (WebInspector.TextPrompt.prototype._moveBackInHistory):
        (WebInspector.TextPrompt.prototype._moveForwardInHistory):
        * inspector/front-end/inspector.css:
        (.auto-complete-text, .editing .auto-complete-text):
        * inspector/front-end/inspector.html:

2011-01-19  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        Implement onformchange and onforminput event handlers
        https://bugs.webkit.org/show_bug.cgi?id=26141

        Tests: fast/forms/formchange-event.html
               fast/forms/forminput-event.html

        * bindings/scripts/CodeGeneratorGObject.pm: Added event names.
        * dom/Document.h: Added event definitions.
        * dom/Document.idl: Added event definitions.
        * dom/Element.h: Added event definitions.
        * dom/Element.idl: Added event definitions.
        * dom/Event.cpp:
        (WebCore::Event::fromUserGesture): Added a condition for a formchange event in handling user gestures.
        * dom/EventNames.h: Added event definitions.
        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer): Replaced a direct dispatchEvent() call into dispatchInputEvents(), a virtual function which broadcasts forminput events for HTML elements.
        * dom/Node.cpp:
        (WebCore::Node::dispatchInputEvents): Defined basic dispatchInputEvents() described above.
        (WebCore::Node::dispatchChangeEvents): Defined basic dispatchChangeEvents() described above.
        (WebCore::Node::defaultEventHandler): Replaced a direct dispatchEvent() call into dispatchInputEvents().
        * dom/Node.h:
        * html/FormAssociatedElement.h: Added isResettable() to check the element is resettable or not.
        * html/HTMLAttributeNames.in: Added event names.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute): Added event handling.
        (WebCore::HTMLElement::shadowAncestorOwnerForm): Added to get an ancestor <form> element from a shadow element.
        (WebCore::HTMLElement::dispatchChangeEvents): Defined dispatchChangeEvents() for HTML elements described above.
        (WebCore::HTMLElement::dispatchInputEvents): Defined dispatchInputEvents() for HTML elements described above.
        * html/HTMLElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFormControlChangeEvent): Added calling dispatchFormChange() to broadcast formchange events.
        (WebCore::HTMLFormControlElement::dispatchFormControlInputEvent): Defined newly to dispatch an input event with broadcasting forminput events.
        * html/HTMLFormControlElement.h: Added isResettable().
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::broadcastFormEvent): Added to broadcast forminput or formchange events.
        (WebCore::HTMLFormElement::dispatchFormInput): Defined newly to broadcast forminput events.
        (WebCore::HTMLFormElement::dispatchFormChange): Defined newly to broadcast formchange events.
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl: Added dispatchFormInput() and dispatchFormChange() DOM API definitions.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::stepUpFromRenderer): Replaced a direct dispatchEvent() call into dispatchInputEvents().
        * html/HTMLInputElement.h: Added isResettable().
        * html/HTMLKeygenElement.h: Added isResettable().
        * html/HTMLObjectElement.h: Added isResettable().
        * html/HTMLOutputElement.h: Added isResettable().
        * html/HTMLSelectElement.h: Added isResettable().
        * html/HTMLTextAreaElement.h: Added isResettable().
        * page/DOMWindow.h: Added event definitions.
        * page/DOMWindow.idl: Added event definitions.
        * rendering/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler): Replaced a direct dispatchEvent() call into dispatchInputEvents().

2011-01-19  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] delete pending callback from callback map before invoking it
        https://bugs.webkit.org/show_bug.cgi?id=52707

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.ExtensionServerClient.prototype._onCallback):

2011-01-19  Levi Weintraub  <leviw@google.com>

        Reviewed by Ryosuke Niwa.

        Replaced rangeCompliantEquivalent with Position::parentAnchoredEquivalent
        and simplified the logic a bit. Unfortunately, Tables and some legacy
        editing positions still need to be handled specifically.

        remove rangeCompliantEquivalent and replace it with Position methods
        https://bugs.webkit.org/show_bug.cgi?id=25057

        No new tests as this is a refactor that doesn't change behavior.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::caretRangeFromPoint):
        * dom/Position.cpp:
        (WebCore::Position::parentAnchoredEquivalent):
        * dom/Position.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::insertNodeAt):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializePositionData):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        * editing/Editor.cpp:
        (WebCore::Editor::textDirectionForSelection):
        (WebCore::Editor::advanceToNextMisspelling):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::shouldUseBreakElement):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::handleStyleSpansBeforeInsertion):
        * editing/VisiblePosition.cpp:
        (WebCore::makeRange):
        (WebCore::setStart):
        (WebCore::setEnd):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::firstRange):
        (WebCore::VisibleSelection::toNormalizedRange):
        (WebCore::makeSearchRange):
        * editing/htmlediting.cpp:
        (WebCore::indexForVisiblePosition):
        * editing/htmlediting.h:
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        * page/DOMSelection.cpp:
        (WebCore::anchorPosition):
        (WebCore::focusPosition):
        (WebCore::basePosition):
        (WebCore::extentPosition):

2011-01-19  Peter Rybin  <peter.rybin@gmail.com>

        Reviewed by Yury Semikhatsky.

        Web Inspector: script column offset is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=52580

        Column is updated in 3 places, 2 less probable places contained error.
        Fixed now.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::advanceSlowCase):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedString::advancePastNewline):

2011-01-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make InjectedScriptAccess API a part of Web Inspector protocol.
        https://bugs.webkit.org/show_bug.cgi?id=52652

        Calls served by the InjectedScript should be first class protocol
        citizens, not dispatched via single protocol message.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::evaluateInCallFrame):
        (WebCore::InjectedScript::evaluateOnSelf):
        (WebCore::InjectedScript::getCompletions):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::pushNodeToFrontend):
        (WebCore::InjectedScript::resolveNode):
        (WebCore::InjectedScript::getNodeProperties):
        (WebCore::InjectedScript::getNodePrototypes):
        (WebCore::InjectedScript::setPropertyValue):
        (WebCore::InjectedScript::makeCall):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::evaluate):
        (WebCore::InjectedScriptHost::evaluateInCallFrame):
        (WebCore::InjectedScriptHost::evaluateOnSelf):
        (WebCore::InjectedScriptHost::getCompletions):
        (WebCore::InjectedScriptHost::getProperties):
        (WebCore::InjectedScriptHost::pushNodeToFrontend):
        (WebCore::InjectedScriptHost::resolveNode):
        (WebCore::InjectedScriptHost::getNodeProperties):
        (WebCore::InjectedScriptHost::getNodePrototypes):
        (WebCore::InjectedScriptHost::setPropertyValue):
        (WebCore::InjectedScriptHost::injectedScriptForObjectId):
        (WebCore::InjectedScriptHost::injectedScriptForNodeId):
        (WebCore::InjectedScriptHost::injectedScriptForMainWorld):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorObject::getNumber):
        * inspector/InspectorValues.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.evaluateInTargetWindow):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        * inspector/front-end/ExtensionPanel.js:
        (WebInspector.ExtensionWatchSidebarPane.prototype.setExpression):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/InjectedScriptAccess.js: Removed.
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.resolveNode):
        (WebInspector.RemoteObject.prototype.getProperties):
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.pushNodeToFrontend):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-01-18  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Minor cleanup: make 2nd argument of removeIfPresnt accept only a value type stored in the DOM map
        https://bugs.webkit.org/show_bug.cgi?id=51683

        Covered by the existing tests.

        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::weakNodeCallback):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::removeIfPresent):
        * bindings/v8/DOMDataStore.h:
        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::removeIfPresent):

2011-01-18 MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.
        
        Refactoring: EventHandler::handleTextInputEvent should accept an enum instead of bools.
        https://bugs.webkit.org/show_bug.cgi?id=52608

        No new tests. no behavioral change.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::create):
        (WebCore::TextEvent::createForDrop):
        (WebCore::TextEvent::TextEvent):
        * dom/TextEvent.h:
        (WebCore::TextEvent::isLineBreak):
        (WebCore::TextEvent::isBackTab):
        (WebCore::TextEvent::isPaste):
        (WebCore::TextEvent::isDrop):
        * dom/TextEventInputType.h: Added. Extracted from TextEvent::TextInputType.
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertBacktab):
        (WebCore::executeInsertLineBreak):
        (WebCore::executeInsertNewline):
        (WebCore::executeInsertTab):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTextInputEvent):
        * page/EventHandler.h:

2011-01-18  Ben Vanik  <ben.vanik@gmail.com>

        Reviewed by Kenneth Russell.

        Updating ANGLE in WebKit to r533.
        https://bugs.webkit.org/show_bug.cgi?id=47194

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::ANGLEWebKitBridge::ANGLEWebKitBridge):
        (WebCore::ANGLEWebKitBridge::~ANGLEWebKitBridge):
        (WebCore::ANGLEWebKitBridge::validateShaderSource):
        Update to new ANGLE API for shader validation.
        * platform/graphics/ANGLEWebKitBridge.h:
        (WebCore::ANGLEWebKitBridge::setResources): 
        Renaming types to new names.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        Initialize ANGLEResources with ANGLE init call to prevent uninitialized variables.

2011-01-18  MORITA Hajime  <morrita@google.com>

        Reviewed by Simon Fraser.

        Refactoring: Extract RoundedIntRect class
        https://bugs.webkit.org/show_bug.cgi?id=51664

        RoundedIntRect is a pair of rect and four IntSize objects which represent
        corner radii of the rectangle. IntSize is grouped into RoundedIntRect::Radii.
        Now RenderStyle::getRoundedBorderFor() and RenderStyle::getRoundedInnerBorderWithBorderWidths()
        return RoundedIntRect and GraphicsContext::addRoundedRectClip(), GraphicsContext::fillRoundedRect()
        and other functions accept RoundedIntRect as an argument.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/RoundedIntRect.cpp: Added.
        (WebCore::RoundedIntRect::Radii::isZero):
        (WebCore::RoundedIntRect::Radii::scale):
        (WebCore::RoundedIntRect::Radii::expand):
        (WebCore::RoundedIntRect::Radii::includeLogicalEdges):
        (WebCore::RoundedIntRect::Radii::excludeLogicalEdges):
        (WebCore::RoundedIntRect::RoundedIntRect):
        (WebCore::RoundedIntRect::includeLogicalEdges):
        (WebCore::RoundedIntRect::excludeLogicalEdges):
        * platform/graphics/RoundedIntRect.h: Added.
        (WebCore::RoundedIntRect::Radii::Radii):
        (WebCore::RoundedIntRect::Radii::setTopLeft):
        (WebCore::RoundedIntRect::Radii::setTopRight):
        (WebCore::RoundedIntRect::Radii::setBottomLeft):
        (WebCore::RoundedIntRect::Radii::setBottomRight):
        (WebCore::RoundedIntRect::Radii::topLeft):
        (WebCore::RoundedIntRect::Radii::topRight):
        (WebCore::RoundedIntRect::Radii::bottomLeft):
        (WebCore::RoundedIntRect::Radii::bottomRight):
        (WebCore::RoundedIntRect::Radii::expand):
        (WebCore::RoundedIntRect::Radii::shrink):
        (WebCore::RoundedIntRect::rect):
        (WebCore::RoundedIntRect::radii):
        (WebCore::RoundedIntRect::isRounded):
        (WebCore::RoundedIntRect::isEmpty):
        (WebCore::RoundedIntRect::setRect):
        (WebCore::RoundedIntRect::setRadii):
        (WebCore::RoundedIntRect::move):
        (WebCore::RoundedIntRect::inflate):
        (WebCore::RoundedIntRect::inflateWithRadii):
        (WebCore::RoundedIntRect::expandRadii):
        (WebCore::RoundedIntRect::shrinkRadii):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBoxSideFromPath):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintSliderTrack):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSearchFieldCancelButton):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/style/BorderData.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor):
        (WebCore::calcConstraintScaleFor):
        (WebCore::RenderStyle::getRoundedBorderFor):
        (WebCore::RenderStyle::getRoundedInnerBorderWithBorderWidths):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setBorderRadius):

2011-01-18  MORITA Hajime  <morrita@google.com>

        Reviewed by Simon Fraser.

        Refactoring: Extract RoundedIntRect class
        https://bugs.webkit.org/show_bug.cgi?id=51664

        RoundedIntRect is a pair of rect and four IntSize objects which represent
        corner radii of the rectangle. IntSize is grouped into RoundedIntRect::Radii.
        Now RenderStyle::getRoundedBorderFor() and RenderStyle::getRoundedInnerBorderWithBorderWidths()
        return RoundedIntRect and GraphicsContext::addRoundedRectClip(), GraphicsContext::fillRoundedRect()
        and other functions accept RoundedIntRect as an argument.

        No new tests. No behavioral change.

        * Android.mk:
        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/RoundedIntRect.cpp: Added.
        (WebCore::RoundedIntRect::Radii::isZero):
        (WebCore::RoundedIntRect::Radii::scale):
        (WebCore::RoundedIntRect::Radii::expand):
        (WebCore::RoundedIntRect::Radii::includeLogicalEdges):
        (WebCore::RoundedIntRect::Radii::excludeLogicalEdges):
        (WebCore::RoundedIntRect::RoundedIntRect):
        (WebCore::RoundedIntRect::includeLogicalEdges):
        (WebCore::RoundedIntRect::excludeLogicalEdges):
        * platform/graphics/RoundedIntRect.h: Added.
        (WebCore::RoundedIntRect::Radii::Radii):
        (WebCore::RoundedIntRect::Radii::setTopLeft):
        (WebCore::RoundedIntRect::Radii::setTopRight):
        (WebCore::RoundedIntRect::Radii::setBottomLeft):
        (WebCore::RoundedIntRect::Radii::setBottomRight):
        (WebCore::RoundedIntRect::Radii::topLeft):
        (WebCore::RoundedIntRect::Radii::topRight):
        (WebCore::RoundedIntRect::Radii::bottomLeft):
        (WebCore::RoundedIntRect::Radii::bottomRight):
        (WebCore::RoundedIntRect::Radii::expand):
        (WebCore::RoundedIntRect::Radii::shrink):
        (WebCore::RoundedIntRect::rect):
        (WebCore::RoundedIntRect::radii):
        (WebCore::RoundedIntRect::isRounded):
        (WebCore::RoundedIntRect::isEmpty):
        (WebCore::RoundedIntRect::setRect):
        (WebCore::RoundedIntRect::setRadii):
        (WebCore::RoundedIntRect::move):
        (WebCore::RoundedIntRect::inflate):
        (WebCore::RoundedIntRect::inflateWithRadii):
        (WebCore::RoundedIntRect::expandRadii):
        (WebCore::RoundedIntRect::shrinkRadii):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBoxSideFromPath):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintSliderTrack):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSearchFieldCancelButton):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/style/BorderData.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor):
        (WebCore::calcConstraintScaleFor):
        (WebCore::RenderStyle::getRoundedBorderFor):
        (WebCore::RenderStyle::getRoundedInnerBorderWithBorderWidths):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setBorderRadius):

2011-01-18  Victoria Kirst  <vrk@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Adding support for YV16 video frame formats.
        https://bugs.webkit.org/show_bug.cgi?id=52345

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::determineTextureFormat):
        (WebCore::VideoLayerChromium::draw):

2011-01-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8479998> REGRESSION (r67660): broken button layout at devforums.apple.com
        
        Exclude floating objects from shrinking to avoid floats.  They should never do this.  Timing-related bugs could
        occur as a result of this mistake, and the change to rewrite pagination to defer layout of floats until they
        got encountered on the correct line exposed this issue.

        Added /fast/block/float/float-overflow-hidden-containing-block-width.html.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::shrinkToAvoidFloats):

2011-01-18  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Make CheckedInt<long> and CheckedInt<unsigned long> work
        https://bugs.webkit.org/show_bug.cgi?id=52401

        * html/canvas/CheckedInt.h:
        (WebCore::CheckedInt::CheckedInt): Merge with the patch provided by Benoit Jacob.
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferDataImpl): Use CheckedInt<long> instead of CheckedInt<int>.
        (WebCore::WebGLBuffer::associateBufferSubDataImpl): Ditto.

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

        Reviewed by David Levin.

        Must strip comments from WebGL shaders before enforcing character set
        https://bugs.webkit.org/show_bug.cgi?id=52390

        Strip comments from incoming shaders, preserving line numbers,
        before validating that they conform to the ESSL character set.
        Revert changes from http://trac.webkit.org/changeset/75735 which
        allowed invalid characters to be passed to certain APIs.

        Tested with WebGL layout tests, conformance test suite and several
        WebGL demos in both Safari and Chromium.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::StripComments::StripComments::process):
        (WebCore::WebGLRenderingContext::shaderSource):

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

        Reviewed by Eric Seidel.

        Stop instantiating legacy editing positions in DeleteSelectionCommand, IndentOudentCommand,
        InsertLineBreakCommand, InsertListCOmmand.cpp, InsertParagraphSeparatorCommand, and htmlediting.cpp
        https://bugs.webkit.org/show_bug.cgi?id=52644

        This is a cleanup to stop instantiating legacy editing positions in the following tests.
        firstDeepEditingPositionForNode and lastDeepEditingPositionForNode in htmlediting.h are not updated
        because doing so requires significant code changes. They are tracked on the bug 52642.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd):
        (WebCore::updatePositionForNodeRemoval):
        (WebCore::DeleteSelectionCommand::removeNode):
        (WebCore::updatePositionForTextRemoval):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApplyForSingleParagraph):
        (WebCore::InsertListCommand::unlistifyParagraph):
        (WebCore::InsertListCommand::listifyParagraph):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/htmlediting.cpp:
        (WebCore::enclosingBlock):
        (WebCore::enclosingList):
        (WebCore::enclosingListChild):
        (WebCore::indexForVisiblePosition):
        (WebCore::isNodeVisiblyContainedWithin):
        (WebCore::avoidIntersectionWithNode):

2011-01-18  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ryosuke Niwa.

        Tweak style in visible_units.cpp and TextIterator.cpp in preparation for another patch
        https://bugs.webkit.org/show_bug.cgi?id=52610

        This is a purely aesthetic change.

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):

2011-01-18  Adam Klein  <adamk@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Replace ChromiumBridge::widgetSetCursor with ChromeClient::setCursor
        https://bugs.webkit.org/show_bug.cgi?id=42236

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/WidgetChromium.cpp:
        (WebCore::Widget::setCursor):

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

        Reviewed by Darin Adler.

        REGRESSION: A problem with Voiceover and finding links
        https://bugs.webkit.org/show_bug.cgi?id=52324

        Fallout from recent change to make WebCore return its own scroll view.
           1) There were two scroll views in the hierarchy, one which no needed to be ignored.
           2) Hit tests for sub frames needed to be offset.
           3) The check for whether an attachment is ignored must happen earlier than using
              the helpText to determine if an element should be ignored.

        Test: platform/mac/accessibility/iframe-with-title-correct-hierarchy.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper scrollViewParent]):

2011-01-18  Adam Roben  <aroben@apple.com>

        Call alternate CFHTTPCookie functions if available

        Fixes <http://webkit.org/b/52637> <rdar://problem/8878984>.

        Reviewed by Darin Adler.

        * platform/network/cf/CookieJarCFNet.cpp: Added soft-linking macros to
        pull in the alternate CFHTTPCookie functions.

        (WebCore::cookieDomain):
        (WebCore::cookieExpirationTime):
        (WebCore::cookieName):
        (WebCore::cookiePath):
        (WebCore::cookieValue):
        Added these wrappers around the CFHTTPCookie functions. We call the
        alternate functions if they exist, otherwise fall back to the current
        functions.

        (WebCore::filterCookies):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        Changed to use the wrapper functions.

2011-01-18  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] Filenames are converted to URLs during edit drags
        https://bugs.webkit.org/show_bug.cgi?id=52096

        * platform/gtk/DragDataGtk.cpp: Only advertise and deliver filenames as URLs if the
        conversion policy allows it.
        (WebCore::DragData::containsURL): Ditto.
        (WebCore::DragData::asURL): Ditto.

2011-01-18  Helder Correia  <helder@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Incorrect shadow alpha with semi-transparent solid fillStyle
        https://bugs.webkit.org/show_bug.cgi?id=52611

        This is related to bug 52559. The shadow color alpha must be multiplied
        by the context brush alpha.

        Test: fast/canvas/canvas-fillPath-alpha-shadow.html

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

2011-01-18  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fail resource.requestContent() immediately for WebSocket resources
        https://bugs.webkit.org/show_bug.cgi?id=52628

        * English.lproj/localizedStrings.js: Rename WebSocket -> WebSockets in resource catetegories (rest are in plural, too)
        * inspector/front-end/ExtensionServer.js: Do not expose webInspector.resources.Types in extensions API (obsolete)
        (WebInspector.ExtensionServer.prototype._buildExtensionAPIInjectedScript):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.Type.toUIString): Remove ResourceType.Media as it's not used.
        (WebInspector.Resource.Type.toString): ditto.
        (WebInspector.Resource.prototype.requestContent): Fail immediately for WebSocket resources.
        * inspector/front-end/inspector.js: Rename WebSocket -> WebSockets in resource catetegories (rest are in plural, too)

2011-01-18  Helder Correia  <helder@sencha.com>

        Reviewed by Dirk Schulze.

        REGRESSION(75139): SVG gradients are not applied to texts
        https://bugs.webkit.org/show_bug.cgi?id=52531

        r75139 caused a problem with filling and stroking text with a gradient
        fill in SVG. The order of CGContextConcatCTM and CGContextClipToRect
        was mixed up.

        Test: svg/css/text-gradient-shadow.svg

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

2011-01-18  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        Unable to indirectly animate visibility of SVGUseElement
        https://bugs.webkit.org/show_bug.cgi?id=50240

        SVGUseElement::recalcStyle should take care of its shadow
        tree's style recalculation when it is called with change >= Inherit
        or when childNeedsStyleRecalc() is true because in these two
        cases needStyleRecalc() may not be true.

        Test: svg/custom/use-inherit-style.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::recalcStyle):

2011-01-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: provide script length to frontend.
        https://bugs.webkit.org/show_bug.cgi?id=52620

        * inspector/Inspector.idl:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.parsedScriptSource):
        * inspector/front-end/Script.js:
        (WebInspector.Script):

2011-01-18  Zoltan Herczeg  <zherczeg@webkit.org>

        Rubber-stamped by Csaba Osztrogonác

        Fixing ChangeLog

        Removing a line introduced by
        http://trac.webkit.org/changeset/75743/trunk/Source/WebCore/ChangeLog
        Removing an unnecessary space before a time stamp.

2011-01-17  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [refactoring] use events to notify NetworkManager clients
        https://bugs.webkit.org/show_bug.cgi?id=52588

        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView): Do not expose public interface to resource count. Do not reset resource count upon reset().
        (WebInspector.AuditLauncherView.prototype._resetResourceCount):
        (WebInspector.AuditLauncherView.prototype._onResourceStarted):
        (WebInspector.AuditLauncherView.prototype._onResourceFinished):
        * inspector/front-end/AuditsPanel.js: Do not expose public interface to resource start/finish events.
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype._notifyResourceFinished):
        (WebInspector.ExtensionServer.prototype.initExtensions):
        * inspector/front-end/NetworkManager.js: Dispatch events rather than directly call clients.
        (WebInspector.NetworkManager):
        (WebInspector.NetworkManager.prototype.willSendRequest):
        (WebInspector.NetworkManager.prototype.markResourceAsCached):
        (WebInspector.NetworkManager.prototype.didReceiveResponse):
        (WebInspector.NetworkManager.prototype.didReceiveContentLength):
        (WebInspector.NetworkManager.prototype.setInitialContent):
        (WebInspector.NetworkManager.prototype.didCommitLoadForFrame):
        (WebInspector.NetworkManager.prototype.willSendWebSocketHandshakeRequest):
        (WebInspector.NetworkManager.prototype.didReceiveWebSocketHandshakeResponse):
        (WebInspector.NetworkManager.prototype._startResource):
        (WebInspector.NetworkManager.prototype._finishResource):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._onResourceStarted):
        (WebInspector.NetworkPanel.prototype._appendResource):
        (WebInspector.NetworkPanel.prototype._onResourceUpdated):
        (WebInspector.NetworkPanel.prototype._refreshResource):
        (WebInspector.NetworkPanel.prototype._onMainResourceChanged):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype._refreshResource):

2011-01-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: preserve pause on exception state in settings.
        https://bugs.webkit.org/show_bug.cgi?id=52619

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getInspectorState):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.debuggerWasEnabled):
        (WebInspector.ScriptsPanel.prototype._updatePauseOnExceptionsState):
        (WebInspector.ScriptsPanel.prototype._togglePauseOnExceptions):
        (WebInspector.ScriptsPanel.prototype._setPauseOnExceptions):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone.populateInspectorState):

2011-01-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [REGRESSION] JavaScript exceptions aren't shown in source frame.
        https://bugs.webkit.org/show_bug.cgi?id=52623

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage):
        (WebInspector.ConsoleMessage.prototype._formatMessage):

2011-01-18  Pavel Feldman  <pfeldman@chromium.org>

        Revert r76017. No need to guard InspectorInstrumentation:: in WebCore.

        * page/Page.cpp:
        (WebCore::networkStateChanged):

2011-01-18  Konstantin Tokarev  <annulen@yandex.ru>

        Reviewed by Kent Tamura.

        Fixed compilation when Inspector is disabled
        https://bugs.webkit.org/show_bug.cgi?id=52564

        * page/Page.cpp:
        (WebCore::networkStateChanged): Added ENABLE(INSPECTOR) guard

2011-01-18  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r76004, r76005, r76007, and r76011.
        http://trac.webkit.org/changeset/76004
        http://trac.webkit.org/changeset/76005
        http://trac.webkit.org/changeset/76007
        http://trac.webkit.org/changeset/76011
        https://bugs.webkit.org/show_bug.cgi?id=51664

        The r76004 broke pixel tests.
        (The failure was missed due to the tolerance.)

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/RoundedIntRect.cpp: Removed.
        * platform/graphics/RoundedIntRect.h: Removed.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        (WebCore::uniformlyExpandBorderRadii):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBoxSideFromPath):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintSliderTrack):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSearchFieldCancelButton):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/style/BorderData.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::constrainCornerRadiiForRect):
        (WebCore::RenderStyle::getBorderRadiiForRect):
        (WebCore::RenderStyle::getInnerBorderRadiiForRectWithBorderWidths):
        * rendering/style/RenderStyle.h:

2011-01-17  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add source column field to debugger call frames.
        https://bugs.webkit.org/show_bug.cgi?id=52443

        * bindings/js/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::JavaScriptCallFrame):
        * bindings/js/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::create):
        (WebCore::JavaScriptCallFrame::line):
        (WebCore::JavaScriptCallFrame::column):
        (WebCore::JavaScriptCallFrame::update):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::createCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::updateCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::callEvent):
        (WebCore::ScriptDebugServer::atStatement):
        (WebCore::ScriptDebugServer::returnEvent):
        (WebCore::ScriptDebugServer::exception):
        (WebCore::ScriptDebugServer::willExecuteProgram):
        (WebCore::ScriptDebugServer::didExecuteProgram):
        (WebCore::ScriptDebugServer::didReachBreakpoint):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::column):
        * bindings/v8/JavaScriptCallFrame.h:
        * inspector/InjectedScriptSource.js:
        ():
        * inspector/JavaScriptCallFrame.idl:

2011-01-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=52370
        <rdar://problem/8856808>
        Style sharing optimization no longer works on major web sites
        
        The code in CSSStyleSelector::locateSharedStyle() that tries to share style information between element has been defeated 
        by widespread use of certain CSS selectors (:first-child pseudo class and similar). The current implementation disables
        the sharing optimization for the whole page if one of these constructs is seen in any style sheet used by the page.  
        
        This patch gets the style sharing back to 25-40% range on most web sites.

        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::propertiesEqual):
            
            Needed to improve equality checking in NamedNodeMap::mappedMapsEquivalent.
        
        * css/CSSSelector.h:
        (WebCore::CSSSelector::isSiblingSelector):
        
            Test for selectors that are affected by the sibling elements.
        
        * css/CSSStyleSelector.cpp:
        (WebCore::elementCanUseSimpleDefaultStyle):
        (WebCore::collectSiblingRulesInDefaultStyle):
        (WebCore::assertNoSiblingRulesInDefaultStyle):
            
            Extract sibling rules from the MathML default stylesheet. 
            Assert that no other default stylesheet has them.
            
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::CSSStyleSelector::locateCousinList):
        (WebCore::CSSStyleSelector::matchesSiblingRules):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::collectIdsAndSiblingRulesFromList):
        (WebCore::CSSRuleSet::collectIdsAndSiblingRules):

            Track sibling rules and ids used in the stylesheets to allow much more fine-grained rejection of cases
            where style sharing can't be used.

        * css/CSSStyleSelector.h:
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::mappedMapsEquivalent):
            
            Check also for CSSValue mutation from DOM. 
            
        * mathml/MathMLMathElement.cpp:
        (WebCore::MathMLMathElement::insertedIntoDocument):
        * mathml/MathMLMathElement.h:
        
            MathML default style sheet has sibling rules which don't get noticed by the normal document
            stylesheet parsing.
        
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setFirstChildState):
        (WebCore::InheritedFlags::setLastChildState):
        (WebCore::InheritedFlags::setChildIndex):
        
            These all make style non-shareable (unique).

2011-01-18  MORITA Hajime  <morrita@google.com>

        Unreviewed crash fix on release builds.

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

2011-01-18  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, update localizedStrings.js.

        * English.lproj/localizedStrings.js:

2011-01-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: implement script beautifier prototype.
        https://bugs.webkit.org/show_bug.cgi?id=51588

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ScriptFormatter.js: Added.
        (WebInspector.ScriptFormatter): Implements JavaScript source beautification and conversion between original and
        formatted line numbers
        (WebInspector.ScriptFormatter.findLineEndings):
        (WebInspector.ScriptFormatter.locationToPosition):
        (WebInspector.ScriptFormatter.positionToLocation):
        (WebInspector.ScriptFormatter.upperBound):
        (WebInspector.ScriptFormatter.prototype.format):
        (WebInspector.ScriptFormatter.prototype.originalLineNumberToFormattedLineNumber):
        (WebInspector.ScriptFormatter.prototype.formattedLineNumberToOriginalLineNumber):
        (WebInspector.ScriptFormatter.prototype.originalPositionToFormattedLineNumber):
        (WebInspector.ScriptFormatter.prototype.formattedLineNumberToOriginalPosition):
        (WebInspector.ScriptFormatter.prototype._convertPosition):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._clearCurrentExecutionLine):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        (WebInspector.ScriptsPanel.prototype._formatScript):
        * inspector/front-end/SourceFrame.js: Convert original line numbers to UI line numbers and vice versa
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2011-01-18  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix as follow-up of r76004.

        * GNUmakefile.am: Include RoundedIntRect files in the build

2011-01-18  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r76002.
        http://trac.webkit.org/changeset/76002
        https://bugs.webkit.org/show_bug.cgi?id=49790

        breaks a bunch of fast/forms tests on mac and GTK

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setRenderStyle):

2011-01-18 MORITA Hajime <morrita@google.com>

        Unreviewed windows build fix.

        * WebCore.vcproj/WebCore.vcproj:

2011-01-17  MORITA Hajime  <morrita@google.com>

        Reviewed by Simon Fraser.

        Refactoring: Extract RoundedIntRect class
        https://bugs.webkit.org/show_bug.cgi?id=51664

        RoundedIntRect is a pair of rect and four IntSize objects which represent
        corner radii of the rectangle. IntSize is grouped into RoundedIntRect::Radii.
        Now RenderStyle::getRoundedBorderFor() and RenderStyle::getRoundedInnerBorderWithBorderWidths()
        return RoundedIntRect and GraphicsContext::addRoundedRectClip(), GraphicsContext::fillRoundedRect()
        and other functions accept RoundedIntRect as an argument.

        No new tests. No behavioral change.

        * Android.mk:
        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/RoundedIntRect.cpp: Added.
        (WebCore::RoundedIntRect::Radii::isZero):
        (WebCore::RoundedIntRect::Radii::scale):
        (WebCore::RoundedIntRect::Radii::expand):
        (WebCore::RoundedIntRect::Radii::includeLogicalEdges):
        (WebCore::RoundedIntRect::Radii::excludeLogicalEdges):
        (WebCore::RoundedIntRect::RoundedIntRect):
        (WebCore::RoundedIntRect::includeLogicalEdges):
        (WebCore::RoundedIntRect::excludeLogicalEdges):
        * platform/graphics/RoundedIntRect.h: Added.
        (WebCore::RoundedIntRect::Radii::Radii):
        (WebCore::RoundedIntRect::Radii::setTopLeft):
        (WebCore::RoundedIntRect::Radii::setTopRight):
        (WebCore::RoundedIntRect::Radii::setBottomLeft):
        (WebCore::RoundedIntRect::Radii::setBottomRight):
        (WebCore::RoundedIntRect::Radii::topLeft):
        (WebCore::RoundedIntRect::Radii::topRight):
        (WebCore::RoundedIntRect::Radii::bottomLeft):
        (WebCore::RoundedIntRect::Radii::bottomRight):
        (WebCore::RoundedIntRect::Radii::expand):
        (WebCore::RoundedIntRect::Radii::shrink):
        (WebCore::RoundedIntRect::location):
        (WebCore::RoundedIntRect::size):
        (WebCore::RoundedIntRect::x):
        (WebCore::RoundedIntRect::y):
        (WebCore::RoundedIntRect::width):
        (WebCore::RoundedIntRect::height):
        (WebCore::RoundedIntRect::right):
        (WebCore::RoundedIntRect::bottom):
        (WebCore::RoundedIntRect::rect):
        (WebCore::RoundedIntRect::radii):
        (WebCore::RoundedIntRect::isRounded):
        (WebCore::RoundedIntRect::isEmpty):
        (WebCore::RoundedIntRect::setRect):
        (WebCore::RoundedIntRect::setRadii):
        (WebCore::RoundedIntRect::move):
        (WebCore::RoundedIntRect::inflate):
        (WebCore::RoundedIntRect::inflateWithRadii):
        (WebCore::RoundedIntRect::expandRadii):
        (WebCore::RoundedIntRect::shrinkRadii):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBoxSideFromPath):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintSliderTrack):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSearchFieldCancelButton):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):
        * rendering/style/BorderData.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor):
        (WebCore::calcConstraintScaleFor):
        (WebCore::RenderStyle::getRoundedBorderFor):
        (WebCore::RenderStyle::getRoundedInnerBorderWithBorderWidths):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setBorderRadius):

2011-01-17  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Kent Tamura.

        Color changes to option elements in a select multiple aren't drawn immediately
        https://bugs.webkit.org/show_bug.cgi?id=49790

        Redirect style changes on <option> element to the owner <select> element.

        Tests: fast/forms/select-option-background-color-change.html
               fast/forms/select-option-color-change.html
               fast/forms/select-option-visibility-change.html

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setRenderStyle):

2011-01-17  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r75995.
        http://trac.webkit.org/changeset/75995
        https://bugs.webkit.org/show_bug.cgi?id=51914

        Causes assertion failures.

        * dom/Element.cpp:
        (WebCore::Element::shadowRoot):
        (WebCore::Element::setShadowRoot):
        (WebCore::Element::removeShadowRoot):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):

2011-01-17  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r75999.
        http://trac.webkit.org/changeset/75999

        * dom/Element.cpp:
        (WebCore::Element::removeShadowRoot):

2011-01-17 MORITA Hajime  <morrita@google.com>

        Unreviewed crash fix, which introduced at r75995

        * dom/Element.cpp:
        (WebCore::Element::removeShadowRoot):

2011-01-17  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        ElementRareData::m_shadowRoot should not be RefPtr.
        https://bugs.webkit.org/show_bug.cgi?id=51914

        This change makes m_shadowRoot a raw pointer, as Node::m_parent is.
        This change is safe because shadow host pointer is stored as TreeShared::m_parent
        which prevents deletion unless set to null.
        
        No test, no behavioral change.

        * dom/Element.cpp:
        (WebCore::Element::shadowRoot):
        (WebCore::Element::setShadowRoot):
        (WebCore::Element::removeShadowRoot):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):

2011-01-17  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Some WebKit2 layout tests crash due to focus being on a frame in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=52607

        No new tests. Existing tests crash in WebKit2 without this fix.
        
        I suspect there are other consequences besides the WebKit2 crash, but I
        was unable to identify any for certain.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame): If a frame still has focus when its page
        goes in the page cache, reset focus to the main frame.

2011-01-17  Adam Roben  <aroben@apple.com>

        Simplify WKCACFLayerRenderer's API

        createRenderer/destroyRenderer are now hidden behind setHostWindow.
        WKCACFLayerRendererClient::animationsStarted has been removed, as it
        was never called. (The work it was supposed to do was already being
        accomplished by WKCACFLayerRenderer::render telling each layer that
        animations are starting.)

        Fixes <http://webkit.org/b/52587> WKCACFLayerRenderer is hard to use

        Reviewed by Chris Marrin.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow): Moved the
        call to setHostWindow here from the WM_CREATE handler. The WM_CREATE
        handler was causing the Direct3D device to be created, but MSDN says
        you shouldn't create a device while handling WM_CREATE. Removed
        no-longer-needed call to createRenderer (setHostWindow does this now)
        and the never-needed call to setNeedsDisplay (we never draw into the
        root layer; this was just creating an unnecessary backing store the
        size of the screen!).
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc): Moved WM_CREATE
        code, as described above. Removed call to destroyRenderer when handling
        WM_DESTROY; setHostWindow does this now. Fixed up our WM_PAINT handler
        to do a synchronous paint and to clear our dirty region, while I was in
        here.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::~WKCACFLayerRenderer): Changed to call
        setHostWindow instead of destroyRenderer; the former calls the latter
        if needed.
        (WebCore::WKCACFLayerRenderer::setHostWindow): Moved here from the
        header file. Destroys our old renderer (i.e., IDirect3DDevice9) if
        we're losing our window, or creates a renderer if we're gaining a
        window.
        (WebCore::WKCACFLayerRenderer::createRenderer): Updated for WKSI function rename.
        (WebCore::WKCACFLayerRenderer::destroyRenderer): Changed to clear the
        D3D device from our context before releasing the device.

        * platform/graphics/win/WKCACFLayerRenderer.h: Removed
        WKCACFLayerRendererClient::animationsStarted. Removed setNeedsDisplay.
        Make createRenderer, destroyRenderer, and renderSoon private.

2011-01-17  Adam Roben  <aroben@apple.com>

        Remove special-cased support for providing content for the root layer

        Clients will just have to provide content through the normal
        GraphicsLayer channels now!

        Support for <http://webkit.org/b/52582> WebView should paint directly
        into a GraphicsLayer when in accelerated compositing mode

        Reviewed by Simon Fraser and Chris Marrin.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): Removed
        initialization of m_backingStoreDirty, which has itself been removed.
        (WebCore::WKCACFLayerRenderer::setNeedsDisplay): Moved code to schedule
        a sync from here to syncCompositingStateSoon. We only need to call
        renderSoon if we don't call syncCompositingStateSoon; the latter
        function calls the former.
        (WebCore::WKCACFLayerRenderer::paint): Removed code to handle
        m_backingStoreDirty. We don't want to know anything about clients'
        backing stores.
        (WebCore::WKCACFLayerRenderer::syncCompositingStateSoon): Added. Code
        came from setNeedsDisplay.

        * platform/graphics/win/WKCACFLayerRenderer.h:
        Removed setRootContents[AndDisplay], setBackingStoreDirty, and
        m_backingStoreDirty. Made paint() public so that clients can force a
        synchronous render (e.g., when handling WM_PAINT).

2011-01-17  Adam Roben  <aroben@apple.com>

        Remove contexts from WKCACFContextFlusher before destroying them

        We aren't really using WKCACFContextFlusher for anything useful at the
        moment, but that will probably change in the near future.

        I couldn't come up with a way to test this because it isn't possible to
        resize a window in DumpRenderTree.

        Fixes <http://webkit.org/b/52573> REGRESSION (r75262): Crash beneath
        WKCACFContextFlusher::flushAllContexts when resizing window on page
        that uses accelerated compositing

        Reviewed by Simon Fraser.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::~WKCACFLayerRenderer): Remove our
        context from WKCACFContextFlusher. (This code was erroneously removed
        from WKCACFLayerRenderer::destroyRenderer in r75262. This is a more
        sensible place for it.)

2011-01-17  Adam Roben  <aroben@apple.com>

        Don't access the CACFLayerRef's sublayers directly from PlatformCALayer

        There might be a secret extra sublayer (the tile parent layer) that
        PlatformCALayer doesn't know about. When PlatformCALayer would
        encounter this, it would try to use the tile parent layer's
        PlatformCALayer wrapper, which was null, and then would crash. We now
        ask PlatformCALayerWinInternal for the sublayer list, since that class
        knows about the tile parent layer and can exclude it from the sublayer
        list.

        Covered by compositing/tiling/huge-layer-resize.html.

        Fixes <http://webkit.org/b/52597> Crash beneath
        PlatformCALayer::adoptSublayers when switching out of tiling mode
        (null-dereference of a PlatformCALayer)

        Reviewed by Darin Adler and Chris Marrin.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::adoptSublayers):
        (printLayer):
        Changed to use PlatformCALayerWinInternal::getSublayers.

        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::getSublayers): Added. Retrieves the list
        of PlatformCALayers that represent our sublayers. Significantly, this
        code knows about the tile parent layer and can thus exclude it.

        * platform/graphics/ca/win/PlatformCALayerWinInternal.h: Added
        getSublayers.

2011-01-17  Naoki Takano  <takano.naoki@gmail.com>

        Reviewed by Kent Tamura.

        [Chromium] Fix popup menu re-positioning when the menu is opened upward, above the corresponding form field.
        https://bugs.webkit.org/show_bug.cgi?id=51382
        http://crbug.com/60427

        Calculate correct location of popup window whenever the items in the window change.

        No new tests, because this fix is for Chromium project and hard to test only in WebKit project

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::layoutAndCalculateWidgetRect): New Function to layout and calculate popup widget rect.
        (WebCore::PopupContainer::showPopup): Move widgetRect calculation logic to calculateWidgetRect().
        (WebCore::PopupContainer::refresh): Add parameter focusRect to take the location and the size of focus text input field to calculate correct popup window location.
        * platform/chromium/PopupMenuChromium.h: Append new input parameter for refresh().

2011-01-17  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * WebCore.exp.in:

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

        Reviewed by Darin Adler.

        Use of invalid hash map key in CSSFontFaceSource::getFontData() with 0-sized remote font
        https://bugs.webkit.org/show_bug.cgi?id=52598

        Test: fast/css/font-face-zero-hash-key.html

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Add 1 to the font size to avoid a 0 hash key.
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::getFontData): Ditto.

2011-01-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/52596> Add missing DOMDocument/DOMDocumentFragment headers to Xcode project

        Reviewed by Dan Bernstein.

        This fixes two issues:

        Add missing DOMDocumentFragmentPrivate.h and
        DOMDocumentPrivate.h files to the project.  These files were
        never added to the the project although their *Internal.h
        counterparts were added in r16548 and r17390.

        Add missing DOMDocumentFragmentInternal.h to the Headers
        section.  It was moved from Headers to "Copy Generated Headers"
        in r31045, but it should have an entry in both sections.

        * WebCore.xcodeproj/project.pbxproj:

2011-01-17  Helder Correia  <helder@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] Incorrect shadow alpha with pattern fillStyle
        https://bugs.webkit.org/show_bug.cgi?id=52559

        The shadow color opacity needs to be set on the shadow painter.
        This is related to bug 52556.

        Test: fast/canvas/canvas-fillPath-pattern-shadow.html

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

2011-01-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Andreas Kling.

        [GTK] Port a crash fix from libsoup upstream to the libsoup cache code
        https://bugs.webkit.org/show_bug.cgi?id=52586

        No new tests. This is just a merge from upstream.

        * platform/network/soup/cache/soup-http-input-stream.c:
        (webkit_soup_http_input_stream_got_chunk): Properly handle unsigned numbers.

2011-01-17  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix some headers with missing or misspelled #ifndef guards
        https://bugs.webkit.org/show_bug.cgi?id=52545

        No new tests because no new functionality.

        * ForwardingHeaders/runtime/InitializeThreading.h:
        * editing/SmartReplace.h:
        * loader/CrossOriginAccessControl.h:
        * loader/NetscapePlugInStreamLoader.h:
        * platform/chromium/ClipboardUtilitiesChromium.h:
        * platform/graphics/cairo/DrawErrorUnderline.h:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/win/WebCoreTextRenderer.h:

2011-01-17  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: follow-up fix for r52574: do not reuse clear() for navigation.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.clear):
        (WebInspector.NetworkPanel.prototype.mainResourceChanged):

2011-01-17  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] No need to content sniff 304 Not Modified responses
        https://bugs.webkit.org/show_bug.cgi?id=52570

        Makes no sense to wait for the outcome of content sniffing when WebCore
        is validating resources. If we get a 304 Not Modified it means that we can
        safely use the cached version of the resource we're asking for.

        No new tests because it does not change functionality, it just
        calls didReceiveResponse sooner for 304 Not Modified responses.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):

2011-01-17  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Anders Carlsson.

        REGRESSION: Assertion failure in FrameLoader::continueLoadAfterWillSubmitForm() when
        navigating back to an unreachable URL
        https://bugs.webkit.org/show_bug.cgi?id=52388

        Test: http/tests/navigation/go-back-to-error-page.html

        * history/PageCache.cpp:
        (WebCore::PageCache::canCachePageContainingThisFrame):
        Do not cache any error pages (which we can recognize as having substitute data and/or an
        unreachableURL).

2011-01-17  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: fixing typo in r75952.

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshNameCell):

2011-01-17  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Drag and drop support: refactoring of image from link and image from selection
        https://bugs.webkit.org/show_bug.cgi?id=52496

        This work cleans up the Mac code and makes it more similar to the Windows implementation,
        avoiding the use of an NSView when the FrameView can be used.
        The refactoring is a necessary step towards the complete support of drag and drop
        in WebKit2.
        
        * page/mac/FrameMac.mm:
        (WebCore::Frame::imageFromRect): Modified to use FrameView instead of NSView
        to generate the image for drag.

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

        Rubber-stamped by Mark Rowe.

        Update xcodeproj svn:ignore to include xcuserdata.

        * WebCore.xcodeproj: Modified property svn:ignore.
        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj: Modified property svn:ignore.

2011-01-17  Alexey Proskuryakov  <ap@apple.com>

        Leopard build fix.

        * page/PrintContext.cpp: GCC complained about shortening a double value to float.

2011-01-17  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

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

        No change in behavior, so no tests.

        * WebCore.exp.in: Export additional methods, as I'm going to use more code from PrintContext.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::~PrintContext): No need to clear m_pageRects, the object is being
        destroyed already.
        (WebCore::PrintContext::pageCount): Changed page count from int to size_t.
        (WebCore::PrintContext::pageRect): Ditto.
        (WebCore::PrintContext::computePageRects): Pass allowHorizontalTiling as an argument.
        PrintContext already has code to calculate scale factor, so it makes sense to make methods
        that contain it universal (allowHorizontalTiling is always true for Safari).
        Round page height to an integer, because Mac code does that, and because page height is
        treated as integer almost everywhere else in code.
        (WebCore::PrintContext::begin): Allow calling this function multiple times. There is no need
        to return to screen mode if e.g. "print backgounds" option changes.
        (WebCore::PrintContext::computeAutomaticScaleFactor): Expose scale factor computation, so
        that clients don't have to copy it.
        (WebCore::PrintContext::spoolRect): Add a way to spool a precomputed rect - handy if a request
        comes from code that doesn't have page number.
        (WebCore::PrintContext::pageNumberForElement): Page number int -> size_t.

        * page/PrintContext.h: Added comments and FIXMEs. PrintContext needs cleanup, but that
        depends on deciding how it really needs to work (e.g. whether computePageRects() should
        cause relayout).

2011-01-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: unify image data source assignment, add image url
        to the image view properties list.
        https://bugs.webkit.org/show_bug.cgi?id=52584

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype._createContentIfNeeded.onImageLoad):
        (WebInspector.ImageView.prototype._createContentIfNeeded):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshNameCell):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.populateImageSource):
        (WebInspector.Resource.prototype._contentURL):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype.onattach):

2011-01-17  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] webInspector.resources.onFinished is not fired for redirected resources
        Make resource start/finish hanlding more consistent.
        https://bugs.webkit.org/show_bug.cgi?id=52452

        * inspector/front-end/AuditLauncherView.js: Ignore WebSocket resources when displaying progress indicator
        (WebInspector.AuditLauncherView.prototype._resetResourceCount):
        (WebInspector.AuditLauncherView.prototype.resourceStarted):
        (WebInspector.AuditLauncherView.prototype.resourceFinished):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager): Factor out resource start/finish logic to _startResource()/_finishResource()
        (WebInspector.NetworkManager.prototype.identifierForInitialRequest):
        (WebInspector.NetworkManager.prototype.willSendRequest):
        (WebInspector.NetworkManager.prototype.markResourceAsCached):
        (WebInspector.NetworkManager.prototype.didReceiveResponse):
        (WebInspector.NetworkManager.prototype.didReceiveContentLength):
        (WebInspector.NetworkManager.prototype.didFinishLoading):
        (WebInspector.NetworkManager.prototype.didFailLoading):
        (WebInspector.NetworkManager.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.NetworkManager.prototype.didCreateWebSocket):
        (WebInspector.NetworkManager.prototype.willSendWebSocketHandshakeRequest):
        (WebInspector.NetworkManager.prototype.didReceiveWebSocketHandshakeResponse):
        (WebInspector.NetworkManager.prototype.didCloseWebSocket):
        (WebInspector.NetworkManager.prototype._appendRedirect):
        (WebInspector.NetworkManager.prototype._startResource):
        (WebInspector.NetworkManager.prototype._finishResource):

2011-01-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: restore dom and network state upon frontend reuse.
        https://bugs.webkit.org/show_bug.cgi?id=52574

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::pushDataCollectedOffline):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.reset):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.clear):
        (WebInspector.NetworkPanel.prototype.mainResourceChanged):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype.reloadCachedResources):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.clear):
        * inspector/front-end/inspector.js:
        (WebInspector.frontendReused):

2011-01-17  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r75944.

        * WebCore.pro:

2011-01-17  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Extend the Platform Plugin to support full screen video handler
        https://bugs.webkit.org/show_bug.cgi?id=51249

        Make MediaPlayerPrivateQt support a fullscreen player.

        No new tests because LayoutTests/media/media-fullscreen-inline.html already exists.
        However, this test failed for Qt (QtMediaPlayer) due to durationchange event getting fired twice.
        So, still skip it for Qt.

        * WebCore.pro:
        * features.pri:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt):
        (WebCore::MediaPlayerPrivateQt::removeVideoItem):
        (WebCore::MediaPlayerPrivateQt::restoreVideoItem):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::supportsFullscreen):
        (WebCore::MediaPlayerPrivateQt::mediaPlayer):

2011-01-17  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Kent Tamura.

        [HTML5] Revert display:none on datalist
        https://bugs.webkit.org/show_bug.cgi?id=52214

        * css/html.css:

2011-01-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: simplify debugger enabling routine.
        https://bugs.webkit.org/show_bug.cgi?id=52472

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::restoreDebugger):
        (WebCore::InspectorController::showAndEnableDebugger):
        (WebCore::InspectorController::enableDebugger):
        * inspector/InspectorController.h:
        * inspector/front-end/DebuggerModel.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):

2011-01-17  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: refactoring: encapsulate lazy initialization of SourceFrame.
        https://bugs.webkit.org/show_bug.cgi?id=51738

        Extract content loading logic from SourceView and ScriptView to ContentProvider implementations.
        Pass ContentProvider in SourceFrame constructor to allow SourceFrame manage it's lazy initialization.

        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        (WebInspector.SourceFrameContentProviderForScript):
        (WebInspector.SourceFrameContentProviderForScript.prototype.requestContent.didRequestSource):
        (WebInspector.SourceFrameContentProviderForScript.prototype.requestContent):
        (WebInspector.SourceFrameContentProviderForScript.prototype.scripts):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addScript):
        (WebInspector.ScriptsPanel.prototype.sourceFrameForScript):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForResource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.set visible):
        (WebInspector.SourceFrame.prototype._createTextViewer):
        (WebInspector.SourceFrame.prototype._breakpointAdded):
        (WebInspector.SourceFrame.prototype._breakpoints):
        (WebInspector.SourceFrame.prototype._sourceIDForLine):
        (WebInspector.SourceFrame.prototype._sourceIDSet):
        (WebInspector.SourceFrameContentProvider):
        (WebInspector.SourceFrameContentProvider.prototype.requestContent):
        (WebInspector.SourceFrameContentProvider.prototype.scripts):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        (WebInspector.SourceView.prototype.show):
        (WebInspector.SourceView.prototype.resize):
        (WebInspector.SourceView.prototype.performSearch.didFindSearchMatches):
        (WebInspector.SourceView.prototype.performSearch):
        (WebInspector.SourceView.prototype.revealLine):
        (WebInspector.SourceView.prototype.highlightLine):
        (WebInspector.SourceView.prototype._jumpToSearchResult):
        (WebInspector.SourceFrameContentProviderForResource):
        (WebInspector.SourceFrameContentProviderForResource.prototype.requestContent):
        (WebInspector.SourceFrameContentProviderForResource.prototype.scripts):

2011-01-17  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Jeremy Orlow.

        GeolocationController should call stopUpdating on destruction
        https://bugs.webkit.org/show_bug.cgi?id=52216

        Test: fast/dom/Geolocation/window-close-crash.html

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

2011-01-17  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: Qt build fix.

        * inspector/InspectorInstrumentation.h:

2011-01-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make WebCore use InspectorInstrumentation
        for instrumentation calls.
        https://bugs.webkit.org/show_bug.cgi?id=52532

        This change makes WebCore classes issue instrumentation signals
        by means of InspectorInstrumentation interface. It covered migration
        for Document, FrameLoader, Database, DOMStorage, etc. It fixed
        instrumentation handling for Console as well. This all is a part
        of story described in the bug 52510.

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorBrowserDebuggerAgent.h:
        (WebCore::InspectorBrowserDebuggerAgent::create):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::stopTiming):
        (WebCore::InspectorConsoleAgent::count):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::handleMousePress):
        (WebCore::InspectorController::didClearWindowObjectInWorld):
        (WebCore::PostWorkerNotificationToFrontendTask::performTask):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::inspectedPageDestroyedImpl):
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElementImpl):
        (WebCore::InspectorInstrumentation::handleMousePressImpl):
        (WebCore::InspectorInstrumentation::mainResourceFiredLoadEventImpl):
        (WebCore::InspectorInstrumentation::mainResourceFiredDOMContentEventImpl):
        (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleMarkTimelineImpl):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::didUseDOMStorageImpl):
        (WebCore::InspectorInstrumentation::didCreateWorkerImpl):
        (WebCore::InspectorInstrumentation::didDestroyWorkerImpl):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl):
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl):
        (WebCore::InspectorInstrumentation::networkStateChangedImpl):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatusImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::inspectorControllerCreated):
        (WebCore::InspectorInstrumentation::inspectorControllerDeleted):
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorld):
        (WebCore::InspectorInstrumentation::inspectedPageDestroyed):
        (WebCore::InspectorInstrumentation::willInsertDOMNode):
        (WebCore::InspectorInstrumentation::didInsertDOMNode):
        (WebCore::InspectorInstrumentation::willRemoveDOMNode):
        (WebCore::InspectorInstrumentation::willModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didModifyDOMAttr):
        (WebCore::InspectorInstrumentation::mouseDidMoveOverElement):
        (WebCore::InspectorInstrumentation::handleMousePress):
        (WebCore::InspectorInstrumentation::characterDataModified):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequest):
        (WebCore::InspectorInstrumentation::didScheduleResourceRequest):
        (WebCore::InspectorInstrumentation::didInstallTimer):
        (WebCore::InspectorInstrumentation::didRemoveTimer):
        (WebCore::InspectorInstrumentation::willCallFunction):
        (WebCore::InspectorInstrumentation::willChangeXHRReadyState):
        (WebCore::InspectorInstrumentation::willDispatchEvent):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::willEvaluateScript):
        (WebCore::InspectorInstrumentation::willFireTimer):
        (WebCore::InspectorInstrumentation::willLayout):
        (WebCore::InspectorInstrumentation::willLoadXHR):
        (WebCore::InspectorInstrumentation::willPaint):
        (WebCore::InspectorInstrumentation::willRecalculateStyle):
        (WebCore::InspectorInstrumentation::identifierForInitialRequest):
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::markResourceAsCached):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCache):
        (WebCore::InspectorInstrumentation::willReceiveResourceData):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didReceiveContentLength):
        (WebCore::InspectorInstrumentation::didFinishLoading):
        (WebCore::InspectorInstrumentation::didFailLoading):
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorInstrumentation::scriptImported):
        (WebCore::InspectorInstrumentation::mainResourceFiredLoadEvent):
        (WebCore::InspectorInstrumentation::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorInstrumentation::frameDetachedFromParent):
        (WebCore::InspectorInstrumentation::didCommitLoad):
        (WebCore::InspectorInstrumentation::willWriteHTML):
        (WebCore::InspectorInstrumentation::didOpenDatabase):
        (WebCore::InspectorInstrumentation::didUseDOMStorage):
        (WebCore::InspectorInstrumentation::didCreateWorker):
        (WebCore::InspectorInstrumentation::didDestroyWorker):
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        (WebCore::InspectorInstrumentation::networkStateChanged):
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatus):
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::startConsoleTiming):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleMarkTimeline):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole):
        (WebCore::InspectorInstrumentation::inspectorControllerForContext):
        (WebCore::InspectorInstrumentation::inspectorControllerForFrame):
        (WebCore::InspectorInstrumentation::inspectorControllerForPage):
        (WebCore::InspectorInstrumentation::inspectorControllerWithFrontendForContext):
        (WebCore::InspectorInstrumentation::inspectorControllerWithFrontendForDocument):
        (WebCore::InspectorInstrumentation::inspectorControllerWithFrontendForFrame):
        (WebCore::InspectorInstrumentation::inspectorControllerWithFrontendForPage):
        * inspector/InspectorState.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        (WebCore::Console::count):
        (WebCore::Console::markTimeline):
        (WebCore::Console::profile):
        (WebCore::Console::time):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        (WebCore::Console::groupEnd):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):
        (WebCore::DOMWindow::dispatchLoadEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        * page/Page.cpp:
        (WebCore::Page::~Page):
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::onDestroyWorker):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::create):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerMessagingProxy.cpp:

2011-01-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r75923.

        GTK guy rolls out the r75914.

        * platform/efl/ScrollViewEfl.cpp:
        (WebCore::ScrollView::platformInit):

2011-01-17  Helder Correia  <helder@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] fast/canvas/canvas-fillPath-gradient-shadow.html does not pass
        https://bugs.webkit.org/show_bug.cgi?id=52556

        The shadow color opacity needs to be set on the shadow painter.
        Additionally, the gradient brush should be transformed.

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

2011-01-17  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Background image rendering is slow
        https://bugs.webkit.org/show_bug.cgi?id=50527

        When tiling a scaled pixmap in Image::drawPattern, scale the tile
        first and only then draw it to the target. Do so only when drawing
        more than one tile.

        Tests in fast/backgrounds/size cover this.

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):

2011-01-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] [Symbian] Fix building NPAPI support
        https://bugs.webkit.org/show_bug.cgi?id=51981

        Make sure that npapi.h is always included outside of the extern "C"
        linkage declaration block.

        No new tests as there is no new functionality.

        * bridge/npruntime.h:

2011-01-17  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r75914.
        http://trac.webkit.org/changeset/75914
        https://bugs.webkit.org/show_bug.cgi?id=49177

        multiple crashes on GTK

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::removeChild):
        (WebCore::ScrollView::wheelEvent):
        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::attachAdjustment):
        (MainFrameScrollbarGtk::gtkValueChanged):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformInit):
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformRemoveChild):

2011-01-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix.

        Bug 49177's patch enabled platformInit() in super class(ScrollView).
        But, it didn't removed the function in ScrollViewEfl.cpp.

        * platform/efl/ScrollViewEfl.cpp:

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

        Reviewed by Sam Weinig.

        <rdar://problem/8871903> REGRESSION (r75897): Crash with 0-by-0 iframe in scaled WebView

        Avoid use of FloatRect::enclosingBoundingBox(), which can stretch an empty
        quad to a non-empty rect.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidget):
        (WebCore::RenderWidget::updateWidgetPosition):

2011-01-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] fast/events/scroll-after-click-on-tab-index has been failing on the bots
        https://bugs.webkit.org/show_bug.cgi?id=49177

        * platform/ScrollView.cpp: Move the platform guards around a little. GTK+
        now shares the implementation of platformAddChild and platformRemoveChild,
        but has its own implementation of removeChild, which knows how to inform
        main frame scrollbars that they no longer control the WebCore scrollbar.
        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::attachAdjustment): If we are attaching the same adjustment
        that we already have, bail out early. Apply the value changed signal handler
        after configuring the adjustment. We don't want our reset of the adjustment to
        stomp on WebCore values.
        (MainFrameScrollbarGtk::gtkValueChanged): Do not adjust the value if the WebCore
        state already matches ours. This prevents some unnecessary recursion
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::removeChild): Added, special cases main frame scrollbars
        which need their adjustments detached.

2011-01-13  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Antti Koivisto.

        Fix for Bug 52427 - Inconsistent use of m_cache in CachedResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=52427

        In constructor/destructor of CachedResourceLoader, m_cache has been
        used to call MemoryCache::addCachedResourceLoader/removeCachedResourceLoader
        while cache() is used everywhere else.

        Actually addCachedResourceLoader/removeCachedResourceLoader need not be called at all.
        Remove the call sites and make MemoryCache non-friend of CachedResourceLoader.

        No new tests because the behavior remains the same.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.cpp:
        * loader/cache/MemoryCache.h:

2011-01-16  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move WebKit into Source
        https://bugs.webkit.org/show_bug.cgi?id=52530

        * WebCore.gyp/WebCore.gyp:
        * WebCore.pri:
        * WebCore.pro:

2011-01-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        frame-removed-during-resize.html test crashes (shows up as image-map-2.html crash)
        https://bugs.webkit.org/show_bug.cgi?id=52549

        Fix regression from r75900; m_widget->setFrameRect() can run script that
        clears m_widget, so null-check it before calling setBoundsSize().
        
        Tested by fast/replaced/frame-removed-during-resize.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):

2011-01-16  Simon Fraser  <simon.fraser@apple.com>

        Keep Leopard build happy.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setBoundsSize):

2011-01-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] plugins/keyboard-events.html fails after r72717
        https://bugs.webkit.org/show_bug.cgi?id=50050

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::setXKeyEventSpecificFields): map event text to keycode

2011-01-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Issues with iframes and plugins when the WebView is scaled.
        <rdar://problem/6213380>
        
        When _scaleWebView has been called on a WebView, iframes
        in WebKit1 render and hit-test incorrectly, and plug-ins don't scale up.
        This is caused by AppKit NSViews not playing nicely with the scale
        applied through style.
        
        Work around most of these issues by adjusting the bounds size
        of widgets to allow iframe contents to paint with the correct scale,
        and fix various places in the code where we relied on coordinate
        transforms via NSViews (which ignore CSS transforms).

        * WebCore.exp.in:
        * platform/Widget.cpp:
        (WebCore::Widget::setBoundsSize):
        * platform/Widget.h:
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setBoundsSize):
        (WebCore::Widget::paint):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::setWidget):
        (WebCore::RenderWidget::updateWidgetPosition):
        * rendering/RenderWidget.h:

2011-01-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        RenderView needs to take transforms on its layer into account
        https://bugs.webkit.org/show_bug.cgi?id=52536
        
        The RenderView's coordinate mapping methods failed to
        take into account a transform on the RenderView's layer.

        No tests because it's not possible to get a transform
        on the RenderView's layer through content.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer):
        (WebCore::RenderView::mapAbsoluteToLocalPoint):

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

        Unreviewed, rolling out r75708.
        http://trac.webkit.org/changeset/75708
        https://bugs.webkit.org/show_bug.cgi?id=52521

        Breaks Qt build if mobility is not installed. (Requested by
        benjaminp on #webkit).

        * WebCore.pro:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::supportsFullscreen):

2011-01-15  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/52512> REGRESSION(r73818): range.cloneContents() ignores end offset

        Reviewed by Adele Peterson.

        The fix for Bug 50710 in r73799 introduced an off-by-one error
        when copying nodes to a local NodeVector for processing.  A fix
        was attempted for Bug 50854 in r73818, but instead of stopping
        at the end offset, it iterates through all the sibling nodes
        because the loop variable (i) is never incremented.  To clean
        this up, revert back to the code in r73799 and fix the
        off-by-one error.

        Test: fast/dom/Range/range-clone-contents.html

        * dom/Range.cpp:
        (WebCore::Range::processContents): Fix the loop that copies
        nodes to a local NodeVector by restoring the code from r73799
        and fixing the off-by-one error.

2011-01-15  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move WebKit2 into Source
        https://bugs.webkit.org/show_bug.cgi?id=52438

        * WebCore.pro:

2011-01-15  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Linux build with FileSystem API enabled fails
        https://bugs.webkit.org/show_bug.cgi?id=43878

        This patch allows WebKitGtk+ to build with FileSystem API option.

        No new tests because no new functionality.

        * GNUmakefile.am: Included AsyncFileSystem.h,cpp and Excluded duplicated JSFileException.h,cpp.
        * bindings/js/JSDirectoryEntryCustom.cpp: Included ExceptionCode.h.

2011-01-14  Sam Magnuson  <smagnuso@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Compile with QT_NO_GRAPHICSVIEW
        https://bugs.webkit.org/show_bug.cgi?id=49750

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        * platform/graphics/qt/GraphicsLayerQt.h:
        * platform/qt/PlatformMouseEventQt.cpp:

2011-01-14  Tony Chang  <tony@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Strip NUL character when copying text on Windows
        https://bugs.webkit.org/show_bug.cgi?id=52236

        Test: editing/pasteboard/copy-null-characters.html

        * editing/Editor.cpp:
        (WebCore::Editor::selectedText):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): Use editor()->selectedText() which matches the other platforms.

2011-01-14  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Antti Koivisto.

        Rename cache() to memoryCache()
        https://bugs.webkit.org/show_bug.cgi?id=52433

        No new tests because the behavior remains the same.

        * WebCore.exp.in:
        * WebCore.order:
        * history/PageCache.cpp:
        (WebCore::PageCache::releaseAutoreleasedPagesNow):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::cachedResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::tellClientAboutPastMemoryCacheLoads):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::allClientsRemoved):
        (WebCore::CachedImage::data):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::~CachedResource):
        (WebCore::CachedResource::addClientToSet):
        (WebCore::CachedResource::removeClient):
        (WebCore::CachedResource::setDecodedSize):
        (WebCore::CachedResource::setEncodedSize):
        (WebCore::CachedResource::didAccessDecodedData):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::loadResource):
        (WebCore::CachedResourceLoader::clearPreloads):
        (WebCore::CachedResourceLoader::printPreloadStats):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::load):
        (WebCore::CachedResourceRequest::didFail):
        (WebCore::CachedResourceRequest::didReceiveResponse):
        * loader/cache/MemoryCache.cpp:
        (WebCore::memoryCache):
        * loader/cache/MemoryCache.h:

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

        Reviewed by Simon Fraser.

        WebCore part of <rdar://problem/8441312> Crash in -[NSView _invalidateGStatesForTree]

        * WebCore.exp.in: Export RenderWidget::suspendWidgetHierarchyUpdates() and
        RenderWidget::resumeWidgetHierarchyUpdates().
        * manual-tests/plug-in-mutates-NSView-hierarchy-during-resize.html: Added.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry): Removed the assertion that widget hierarchy updates
        are disabled. When this assertion was added, this condition was a subset of the “calling out to
        plug-in code is forbidden” condition, hence the assertion was valid. The WebKit part of this
        change now suspends widget hierarchy updates even at times where plug-in code is expected to be
        called, which invalidates the assertion.

2011-01-14  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Fix Qt build after r75837
        https://bugs.webkit.org/show_bug.cgi?id=52494

        * rendering/style/StyleRareInheritedData.cpp:
        * rendering/style/StyleRareNonInheritedData.cpp:

2011-01-14  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Fix Qt build after r75837
        https://bugs.webkit.org/show_bug.cgi?id=52494

        * rendering/style/RenderStyle.cpp:

2011-01-14  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Fix Qt build after r75837
        https://bugs.webkit.org/show_bug.cgi?id=52494

        * editing/EditorCommand.cpp:

2011-01-14  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Fix Qt build after r75837
        https://bugs.webkit.org/show_bug.cgi?id=52494

        * editing/ApplyStyleCommand.cpp:

2011-01-14  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Fix Qt build after r75837
        https://bugs.webkit.org/show_bug.cgi?id=52494

        * css/CSSStyleSelector.cpp:

2011-01-14  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Fix Qt build after r75837
        https://bugs.webkit.org/show_bug.cgi?id=52494

        * rendering/InlineFlowBox.h:
        * rendering/RenderBoxModelObject.h:

2011-01-14  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by David Levin.

        Do some forward declaration in RenderStyle.h
        https://bugs.webkit.org/show_bug.cgi?id=52453

        No new tests because no new functionality.

        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSStyleSelector.cpp:
        * editing/Editor.cpp:
        * page/EventHandler.cpp:
        * rendering/EllipsisBox.cpp:
        * rendering/InlineBox.cpp:
        * rendering/InlineTextBox.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderFieldset.cpp:
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderHTMLCanvas.cpp:
        * rendering/RenderImageResource.cpp:
        * rendering/RenderInputSpeech.cpp:
        * rendering/RenderLayer.h:
        * rendering/RenderLineBoxList.cpp:
        * rendering/RenderListBox.cpp:
        * rendering/RenderMediaControlsChromium.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderObjectChildList.cpp:
        * rendering/RenderProgress.cpp:
        * rendering/RenderScrollbarPart.cpp:
        * rendering/RenderTable.cpp:
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderTableSection.cpp:
        * rendering/RenderTheme.cpp:
        * rendering/RenderThemeChromiumSkia.cpp:
        * rendering/RenderThemeChromiumWin.cpp:
        * rendering/RootInlineBox.cpp:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:

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

        Reviewed by Eric Seidel.

        Stop instantiating legacy editing positions in AccessibilityRenderObject.cpp, Element.cpp,
        BreakBlockquoteCommand.cpp, CompositeEditCommand.cpp, and DeleteButtonController.cpp
        https://bugs.webkit.org/show_bug.cgi?id=52481

        Removed instantiation of legacy editing positions.
        Calls to Position::Position are replaced by calls to Position's convenience functions.
        
        Also fixed firstPositionInOrBeforeNode and lastPositionInOrAfterNode so that
        they instantiate right positions for text nodes.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedTextRange):
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::inputText):
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt):
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):
        (WebCore::CompositeEditCommand::moveParagraphs):
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        (WebCore::CompositeEditCommand::splitTreeToNode):
        * editing/DeleteButtonController.cpp:
        (WebCore::enclosingDeletableElement):
        * editing/htmlediting.h:
        (WebCore::firstPositionInOrBeforeNode): Instantiates firstPositionInNode instead of
        positionBeforeNode for a text node.
        (WebCore::lastPositionInOrAfterNode): Ditto.

2011-01-14  Helder Correia  <helder@sencha.com>

        Reviewed by Simon Fraser.

        Shadow is not drawn when filling a path with a gradient
        https://bugs.webkit.org/show_bug.cgi?id=51982

        This happens in CG and is related to bug 51869, this time to be fixed
        in GraphicsContext::fillPath(const Path& path). We need to draw the
        gradient clipped to the path on a CGLayer first, and then draw the
        layer on the GraphicsContext.

        Test: fast/canvas/canvas-fillPath-gradient-shadow.html

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

2011-01-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        Layer syncing should go through the compositor
        https://bugs.webkit.org/show_bug.cgi?id=52486

        Rather than have FrameView go directly to GraphicsLayer to
        sync pending changes, route the call through RenderLayerCompositor.
        
        Add a FIXME about an existing issue with flushing and subframes.
        
        No behavior change, so no tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::syncCompositingStateForThisFrame):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::notifySyncRequired):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scheduleLayerFlush):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::notifySyncRequired):

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

        Reviewed by David Hyatt.

        Fix parent block calculation when trying to find top most node
        containing "this" float.
        https://bugs.webkit.org/show_bug.cgi?id=51711

        Replace use of containingBlock and traverse the parents directly
        to check for float existence. containingBlock can skip parents and
        jump to the RenderView directly which will cause floats to not get
        cleared from intermediate parents.

        Test: fast/block/float/floats-not-cleared-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists):

2011-01-14  Adam Klein  <adamk@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Replace BackForwardListClient with BackForwardControllerClient/BackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42237

        Remove Chromium-specific implementation from WebCore.

        No tests added; this refactor should be covered by existing history-exercising tests.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * history/BackForwardListChromium.cpp: Removed.
        * history/BackForwardListImpl.h:

2011-01-12  Satish Sampath  <satish@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a crash when accessing speech input from script.
        https://bugs.webkit.org/show_bug.cgi?id=52325

        Test: fast/speech/speech-input-scripting.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Recreate renderer when speech input is enabled/disabled.
        * rendering/RenderTextControlSingleLine.cpp: Remove unused code.
        * rendering/RenderTextControlSingleLine.h:
        * rendering/TextControlInnerElements.cpp: Take self references before firing events and check for renderer validity after.
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult):
        (WebCore::InputFieldSpeechButtonElement::detach):

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

        Reviewed by David Hyatt.

        Prevent merging of anonymous blocks if one of them is already getting
        destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=52402

        Test: fast/block/merge-anonymous-block-remove-child-crash2.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock): initialize m_beingDestroyed to false.
        (WebCore::RenderBlock::destroy): set m_beingDestroyed to true.
        (WebCore::canMergeContiguousAnonymousBlocks): do not merge if any or prev or next is being destroyed.
        (WebCore::RenderBlock::removeChild): remove the hack previously done for preventing oldChild merging with nextBlock's next sibling.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::beingDestroyed): public function for m_beingDestroyed.

2011-01-14  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Follow up to r75791: fix missing dispatch.
        https://bugs.webkit.org/show_bug.cgi?id=52442

        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerDispatcher.prototype.breakpointResolved):

2011-01-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        Issues with contentsScale in GraphicsLayerCA
        https://bugs.webkit.org/show_bug.cgi?id=52463

        Fix various issues with the recent contentsScale changes:

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA): Initialize m_contentsScale to 1.
        (WebCore::GraphicsLayerCA::updateContentsScale): Only do a setNeedsDisplay()
        if the layer draws content, otherwise we'll create backing store for empty layers.
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer): Be sure to set contentsScale
        on the new (tiled or untiled) layer.
        (WebCore::GraphicsLayerCA::cloneLayer): Clones need contentsScale too.

2011-01-14  Simon Fraser  <simon.fraser@apple.com>

        Let Xcode have it's way with the project file.

        * WebCore.xcodeproj/project.pbxproj:

2011-01-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Refactor some FrameView::syncCompositingState code
        https://bugs.webkit.org/show_bug.cgi?id=52459

        Refactor some code in FrameView related to synchronizing
        compositing layer state.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::syncCompositingStateForThisFrame):
        (WebCore::FrameView::syncCompositingStateRecursive):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:

2011-01-14  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Fix build problem introduced by http://trac.webkit.org/changeset/75713
        https://bugs.webkit.org/show_bug.cgi?id=30179

        * plugins/symbian/PluginViewSymbian.cpp:

2011-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add volume slider to media player
        https://bugs.webkit.org/show_bug.cgi?id=51532

        * css/mediaControlsGtk.css:
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        (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):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustMediaSliderThumbSize):
        (WebCore::RenderThemeGtk::paintMediaVolumeSliderContainer):
        (WebCore::RenderThemeGtk::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeGtk::paintMediaVolumeSliderThumb):
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::paintSliderTrack):
        (WebCore::RenderThemeGtk::paintSliderThumb):
        (WebCore::RenderThemeGtk::adjustSliderThumbSize):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::paintSliderTrack):
        (WebCore::RenderThemeGtk::paintSliderThumb):
        (WebCore::RenderThemeGtk::adjustSliderThumbSize):

2011-01-14  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by David Levin.

        [GTK] Convert use of raw pointers to GOwnPtr in FileSystemGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=52434

        No new tests. This code will be tested when an implementation 
        of beginDragWithFiles is complete. 

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::filenameToString): Use GOwnPtr instead of gchar pointer.
        (WebCore::fileSystemRepresentation): Ditto.
        (WebCore::filenameForDisplay): Ditto.
        (WebCore::pathGetFileName): Ditto.

2011-01-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: breakpoint text snippet in breakpoints sidebar pane disappears after reload.
        https://bugs.webkit.org/show_bug.cgi?id=52215

        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.populateLabelElement):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.get linesCount):
        (WebInspector.Script.prototype.sourceLine):
        (WebInspector.Script.prototype.sourceLine.didRequestSource):
        (WebInspector.Script.prototype.set source):
        (WebInspector.Script.prototype.requestSource.didGetScriptSource):
        (WebInspector.Script.prototype.requestSource):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded.didRequestSource):
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._addBreakpoint):
        * inspector/front-end/utilities.js:
        (String.prototype.findAll):

2011-01-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: provide script column offset to frontend.
        https://bugs.webkit.org/show_bug.cgi?id=52377

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * inspector/Inspector.idl:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.parsedScriptSource):
        * inspector/front-end/Script.js:
        (WebInspector.Script):

2011-01-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed one line fix for console-xhr-logging test.

        The problem was introduced at r75788.

        * inspector/InspectorBrowserDebuggerAgent.cpp:
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):

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

        Reviewed by Pavel Feldman.

        Web Inspector: extract console related functionality into InspectorConsoleAgent
        https://bugs.webkit.org/show_bug.cgi?id=52282

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::~ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/Inspector.idl:
        * inspector/InspectorConsoleAgent.cpp: Added.
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled):
        (WebCore::InspectorConsoleAgent::clearConsoleMessages):
        (WebCore::InspectorConsoleAgent::reset):
        (WebCore::InspectorConsoleAgent::setFrontend):
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::startTiming):
        (WebCore::InspectorConsoleAgent::stopTiming):
        (WebCore::InspectorConsoleAgent::count):
        (WebCore::InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h: Added.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::consoleAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::count):
        (WebCore::InspectorInstrumentation::startTiming):
        (WebCore::InspectorInstrumentation::stopTiming):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype.addConsoleMessage):
        (WebInspector.ConsoleView.prototype.updateConsoleMessageExpiredCount):
        (WebInspector.ConsoleView.prototype.consoleMessagesCleared):
        * inspector/front-end/inspector.js:
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        (WebCore::Console::count):
        (WebCore::Console::profile):
        (WebCore::Console::time):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        (WebCore::Console::groupEnd):
        * page/Console.h:
        * page/Console.idl:

2011-01-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not use this as protocol message
        dispatcher in models / agents.
        https://bugs.webkit.org/show_bug.cgi?id=52442

        Models should never for InspectorBackend.registerDomainDispatcher("foo", this).
        There should be a clear way to tell whether method is being called
        from within front-end or by the backend.

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent):
        (WebInspector.DOMAgent.prototype.nodeForId):
        (WebInspector.DOMAgent.prototype._bindNodes):
        (WebInspector.DOMAgent.prototype._removeBreakpoints):
        (WebInspector.DOMDispatcher):
        (WebInspector.DOMDispatcher.prototype.setDocument):
        (WebInspector.DOMDispatcher.prototype.attributesUpdated):
        (WebInspector.DOMDispatcher.prototype.characterDataModified):
        (WebInspector.DOMDispatcher.prototype.setChildNodes):
        (WebInspector.DOMDispatcher.prototype.setDetachedRoot):
        (WebInspector.DOMDispatcher.prototype.childNodeCountUpdated):
        (WebInspector.DOMDispatcher.prototype.childNodeInserted):
        (WebInspector.DOMDispatcher.prototype.childNodeRemoved):
        (WebInspector.DOMDispatcher.prototype.didCommitLoad):
        (WebInspector.ApplicationCacheDispatcher):
        (WebInspector.ApplicationCacheDispatcher.prototype.getApplicationCachesAsync):
        (WebInspector.ApplicationCacheDispatcher.prototype.updateApplicationCacheStatus):
        (WebInspector.ApplicationCacheDispatcher.prototype.updateNetworkState):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorageDispatcher):
        (WebInspector.DOMStorageDispatcher.prototype.addDOMStorage):
        (WebInspector.DOMStorageDispatcher.prototype.selectDOMStorage):
        (WebInspector.DOMStorageDispatcher.prototype.updateDOMStorage):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.executeSql):
        (WebInspector.DatabaseDispatcher):
        (WebInspector.DatabaseDispatcher.prototype.addDatabase):
        (WebInspector.DatabaseDispatcher.prototype.selectDatabase):
        (WebInspector.DatabaseDispatcher.prototype.sqlTransactionSucceeded):
        (WebInspector.DatabaseDispatcher.prototype.sqlTransactionFailed):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype._pausedScript):
        (WebInspector.DebuggerModel.prototype._resumedScript):
        (WebInspector.DebuggerModel.prototype._parsedScriptSource):
        (WebInspector.DebuggerModel.prototype._failedToParseScriptSource):
        (WebInspector.DebuggerDispatcher):
        (WebInspector.DebuggerDispatcher.prototype.pausedScript):
        (WebInspector.DebuggerDispatcher.prototype.resumedScript):
        (WebInspector.DebuggerDispatcher.prototype.parsedScriptSource):
        (WebInspector.DebuggerDispatcher.prototype.failedToParseScriptSource):
        * inspector/front-end/FileSystemView.js:
        (WebInspector.FileSystemDispatcher):
        (WebInspector.FileSystemDispatcher.prototype.getFileSystemPathsAsync):
        (WebInspector.FileSystemDispatcher.prototype.didGetFileSystemPath):
        (WebInspector.FileSystemDispatcher.prototype.didGetFileSystemError):
        (WebInspector.FileSystemDispatcher.prototype.didGetFileSystemDisabled):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype._addProfileHeader):
        (WebInspector.ProfilesPanel.prototype._removeProfileHeader):
        (WebInspector.ProfilesPanel.prototype._addHeapSnapshotChunk):
        (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype._setRecordingProfile):
        (WebInspector.ProfilerDispatcher):
        (WebInspector.ProfilerDispatcher.prototype.profilerWasEnabled):
        (WebInspector.ProfilerDispatcher.prototype.profilerWasDisabled):
        (WebInspector.ProfilerDispatcher.prototype.resetProfiles):
        (WebInspector.ProfilerDispatcher.prototype.addProfileHeader):
        (WebInspector.ProfilerDispatcher.prototype.addHeapSnapshotChunk):
        (WebInspector.ProfilerDispatcher.prototype.finishHeapSnapshot):
        (WebInspector.ProfilerDispatcher.prototype.setRecordingProfile):
        (WebInspector.ProfileSidebarTreeElement.prototype.ondelete):
        * inspector/front-end/ResourceTreeModel.js:
        (WebInspector.ResourceTreeModel):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._timelineProfilerWasStarted):
        (WebInspector.TimelinePanel.prototype._timelineProfilerWasStopped):
        (WebInspector.TimelinePanel.prototype._addRecordToTimeline):
        (WebInspector.TimelineDispatcher):
        (WebInspector.TimelineDispatcher.prototype.timelineProfilerWasStarted):
        (WebInspector.TimelineDispatcher.prototype.timelineProfilerWasStopped):
        (WebInspector.TimelineDispatcher.prototype.addRecordToTimeline):

2011-01-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][V8] Unreviewed buildfix after r75788.

        * inspector/InspectorBrowserDebuggerAgent.cpp:

2011-01-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Extract BrowserDebuggerAgent from InspectorController, InspectorDOMAgent and InspectorDebugger agent.
        We have some methods of Debugger which are related to DOM.
        Lets extract these methods to BrowserDebugger agent.

        http://bugs.webkit.org/show_bug.cgi?id=52294

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorBrowserDebuggerAgent.cpp: Added.
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::discardBindings):
        (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::didInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::didRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clearForPageNavigation):
        * inspector/InspectorBrowserDebuggerAgent.h: Added.
        (WebCore::InspectorBrowserDebuggerAgent::create):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::restoreStickyBreakpoints):
        (WebCore::InspectorController::restoreStickyBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):

2011-01-14  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: redirected resources not handled properly in Network panel
        https://bugs.webkit.org/show_bug.cgi?id=52292

        * inspector/Inspector.idl: Do not pass isMainResource to identifierForInitialRequest() (it's useless, as we may hit provisional load)
        * inspector/InspectorInstrumentation.cpp: Ditto.
        (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl):
        * inspector/InspectorResourceAgent.cpp: Ditto.
        (WebCore::InspectorResourceAgent::identifierForInitialRequest):
        * inspector/InspectorResourceAgent.h: Ditto.
        * inspector/InspectorInstrumentation.cpp: Ditto.
        (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl): Fix main resource detection.
        * inspector/front-end/AuditsPanel.js: WebInspector.networkResources now returns array, not map.
        * inspector/front-end/ConsoleView.js: User WebInspector.resourceById() to get resource
        (WebInspector.ConsoleMessage.prototype._formatMessage):
        * inspector/front-end/ExtensionServer.js: Ditto.
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        * inspector/front-end/HAREntry.js: WebInspector.networkResources now returns array, not map
        (WebInspector.HARLog.prototype.build):
        (WebInspector.HARLog.prototype._convertResource):
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager): Use appendResource, not refreshResource, when adding a new resource.
        (WebInspector.NetworkManager.prototype.identifierForInitialRequest):
        (WebInspector.NetworkManager.prototype.willSendRequest):
        (WebInspector.NetworkManager.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.NetworkManager.prototype.setInitialContent):
        (WebInspector.NetworkManager.prototype.didCommitLoadForFrame):
        (WebInspector.NetworkManager.prototype.didCreateWebSocket):
        (WebInspector.NetworkManager.prototype._createResource): always register resource URL with ResourceTreeModel
        (WebInspector.NetworkManager.prototype._appendRedirect):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype.get resources):
        (WebInspector.NetworkPanel.prototype.resourceById):
        (WebInspector.NetworkPanel.prototype.appendResource): Add resource as new iff appendResource was added.
        (WebInspector.NetworkPanel.prototype.refreshResource): ditto.
        (WebInspector.NetworkPanel.prototype.mainResourceChanged): Clear console upon arrival of new main resource.
        * inspector/front-end/ResourceTreeModel.js: Expose unbindResourceURL, bind resources automatically upon creation.
        (WebInspector.ResourceTreeModel.prototype._clearResources):
        (WebInspector.ResourceTreeModel.prototype.unbindResourceURL):
        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
        (WebInspector.ResourceTreeModel.prototype.createResource):
        * inspector/front-end/inspector.js:
        (WebInspector.resourceById):

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

        Unreviewed, rolling out r75783.
        http://trac.webkit.org/changeset/75783
        https://bugs.webkit.org/show_bug.cgi?id=52439

        a bit strange but the same patch have broken mac builds at
        linking stage. (Requested by loislo2 on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorBrowserDebuggerAgent.cpp: Removed.
        * inspector/InspectorBrowserDebuggerAgent.h: Removed.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::restoreStickyBreakpoints):
        (WebCore::InspectorController::restoreStickyBreakpoint):
        (WebCore::InspectorController::setEventListenerBreakpoint):
        (WebCore::InspectorController::removeEventListenerBreakpoint):
        (WebCore::InspectorController::hasEventListenerBreakpoint):
        (WebCore::InspectorController::setXHRBreakpoint):
        (WebCore::InspectorController::removeXHRBreakpoint):
        (WebCore::InspectorController::hasXHRBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMAgent::shouldBreakOnNodeInsertion):
        (WebCore::InspectorDOMAgent::shouldBreakOnNodeRemoval):
        (WebCore::InspectorDOMAgent::shouldBreakOnAttributeModification):
        (WebCore::InspectorDOMAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::hasBreakpoint):
        (WebCore::InspectorDOMAgent::updateSubtreeBreakpoints):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):

2011-01-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Extract BrowserDebuggerAgent from InspectorController, InspectorDOMAgent and InspectorDebugger agent.
        We have some methods of Debugger which are related to DOM.
        Lets extract these methods to BrowserDebugger agent.

        http://bugs.webkit.org/show_bug.cgi?id=52294

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorBrowserDebuggerAgent.cpp: Added.
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::discardBindings):
        (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::didInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::didRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clearForPageNavigation):
        * inspector/InspectorBrowserDebuggerAgent.h: Added.
        (WebCore::InspectorBrowserDebuggerAgent::create):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::restoreStickyBreakpoints):
        (WebCore::InspectorController::restoreStickyBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):

2011-01-14  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: build fix.

        * WebCore.vcproj/WebCore.vcproj:

2011-01-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract InspectorSettings from InspectorState,
        simplify it.
        https://bugs.webkit.org/show_bug.cgi?id=52429

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectorStartsAttached):
        (WebCore::InspectorController::setInspectorStartsAttached):
        (WebCore::InspectorController::setInspectorAttachedHeight):
        (WebCore::InspectorController::inspectorAttachedHeight):
        (WebCore::InspectorController::setMonitoringXHREnabled):
        (WebCore::InspectorController::restoreDebugger):
        (WebCore::InspectorController::restoreProfiler):
        (WebCore::InspectorController::ensureSettingsLoaded):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        * inspector/InspectorController.h:
        * inspector/InspectorSettings.cpp: Added.
        (WebCore::InspectorSettings::InspectorSettings):
        (WebCore::InspectorSettings::getBoolean):
        (WebCore::InspectorSettings::setBoolean):
        (WebCore::InspectorSettings::getLong):
        (WebCore::InspectorSettings::setLong):
        (WebCore::InspectorSettings::registerBoolean):
        (WebCore::InspectorSettings::registerLong):
        * inspector/InspectorSettings.h: Added.
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        (WebCore::InspectorState::setValue):
        (WebCore::InspectorState::setObject):
        (WebCore::InspectorState::registerBoolean):
        (WebCore::InspectorState::registerString):
        (WebCore::InspectorState::registerLong):
        (WebCore::InspectorState::registerObject):
        (WebCore::InspectorState::Property::create):
        * inspector/InspectorState.h:
        (WebCore::InspectorState::setBoolean):
        (WebCore::InspectorState::setString):
        (WebCore::InspectorState::setLong):

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

        Unreviewed, rolling out r75774.
        http://trac.webkit.org/changeset/75774
        https://bugs.webkit.org/show_bug.cgi?id=52431

        gtk builds were broken (Requested by loislo2 on #webkit).

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorBrowserDebuggerAgent.cpp: Removed.
        * inspector/InspectorBrowserDebuggerAgent.h: Removed.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::restoreStickyBreakpoints):
        (WebCore::InspectorController::restoreStickyBreakpoint):
        (WebCore::InspectorController::setEventListenerBreakpoint):
        (WebCore::InspectorController::removeEventListenerBreakpoint):
        (WebCore::InspectorController::hasEventListenerBreakpoint):
        (WebCore::InspectorController::setXHRBreakpoint):
        (WebCore::InspectorController::removeXHRBreakpoint):
        (WebCore::InspectorController::hasXHRBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMAgent::shouldBreakOnNodeInsertion):
        (WebCore::InspectorDOMAgent::shouldBreakOnNodeRemoval):
        (WebCore::InspectorDOMAgent::shouldBreakOnAttributeModification):
        (WebCore::InspectorDOMAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::hasBreakpoint):
        (WebCore::InspectorDOMAgent::updateSubtreeBreakpoints):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):

2011-01-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Extract BrowserDebuggerAgent from InspectorController, InspectorDOMAgent and InspectorDebugger agent.
        We have some methods of Debugger which are related to DOM.
        Lets extract these methods to BrowserDebugger agent.

        http://bugs.webkit.org/show_bug.cgi?id=52294

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorBrowserDebuggerAgent.cpp: Added.
        (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent):
        (WebCore::InspectorBrowserDebuggerAgent::discardBindings):
        (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::didInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::didRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent):
        (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints):
        (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest):
        (WebCore::InspectorBrowserDebuggerAgent::clearForPageNavigation):
        * inspector/InspectorBrowserDebuggerAgent.h: Added.
        (WebCore::InspectorBrowserDebuggerAgent::create):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::restoreStickyBreakpoints):
        (WebCore::InspectorController::restoreStickyBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):

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

        Reviewed by Dimitri Glazkov.

        Implement form validation message UI
        https://bugs.webkit.org/show_bug.cgi?id=48980

        * Add four internal pseudo selectors:
          - -webkit-validation-bubble
          - -webkit-validation-bubble-message
          - -webkit-validation-bubble-top-outer-arrow
          - -webkit-validation-bubble-top-inner-arrow

        * Implement ValidationMessage functions
          Show the message for <the number of characters> / 20.0 seconds.

        No new tests because the feature is disabled by default for now and the
        new behavior is strongly timing-dependent.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
          Do not share a style with elements with different shadowPseudoId().
        * css/html.css: Define appearance for the internal selectors.
        (::-webkit-validation-bubble):
        (::-webkit-validation-bubble-message):
        (::-webkit-validation-bubble-top-outer-arrow):
        (::-webkit-validation-bubble-top-inner-arrow):
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded):
          Allow to add shadow renderers even if canHaveChildren() returns false.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::detach):
          Remove m_validationMessage immediately because we can't use
          hideVisibleValidationMessage(), which calls a ValidationMessage function later.
        (WebCore::HTMLFormControlElement::updateVisibleValidationMessage):
          - Don't create ValidationMessage if the message is empty.
          - Remove the check for message equality.
        (WebCore::HTMLFormControlElement::hideVisibleValidationMessage):
          Don't remove m_validationMessage immediately. We shouldn't make the
          element needsLayout() state in this context.
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::~ValidationMessage):
          hideMessage() -> deleteBubbleTree() renaming.
        (WebCore::ValidationMessage::setMessage): Implemented.
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
          Added. This updates the validation message and starts the timer to hide it.
        (WebCore::ElementWithPseudoId):
          Added to help implementations of styled shadow nodes.
        (WebCore::ValidationMessage::buildBubbleTree): Added.
        (WebCore::ValidationMessage::requestToHideMessage): Added.
        (WebCore::ValidationMessage::deleteBubbleTree):
          Renamed from hideMessage(), and implemented.
        * html/ValidationMessage.h: Add declarations.

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

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/8827065> REGRESSION (r71884): Cross-origin XHR fails if willSendRequest changes the URL
        https://bugs.webkit.org/show_bug.cgi?id=52419

        Test: http/tests/loading/cross-origin-XHR-willLoadRequest.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init): Complete r74453 by ensuring that m_request is only set after
        willSendRequest(). Otherwise, willSendRequest() ends up calling into
        ThreadableDocumentRequest::willSendRequest(), which cancels the request.

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

        Reviewed by Mark Rowe.

        Don’t try to compile InjectedScriptSource.js into WebCore.

        * WebCore.xcodeproj/project.pbxproj:

2011-01-13  Mike Thole  <mthole@apple.com>

        Reviewed by Darin Adler and Brady Eidson.

        The pageScaleFactor() should be saved/restored along with the scroll position
        https://bugs.webkit.org/show_bug.cgi?id=52406
        <rdar://problem/8714412>

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem): Initialize m_pageScaleFactor.
        (WebCore::HistoryItem::pageScaleFactor): Added getter.
        (WebCore::HistoryItem::setPageScaleFactor): Added setter.
        (WebCore::HistoryItem::encodeBackForwardTreeNode): Encode m_pageScaleFactor.
        (WebCore::HistoryItem::decodeBackForwardTree): Decode m_pageScaleFactor.
        * history/HistoryItem.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem): Save the page scale factor...
        (WebCore::HistoryController::restoreScrollPositionAndViewState): ...and restore it here.

2011-01-13  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] drop backwards iteration in Linux complex text code
        https://bugs.webkit.org/show_bug.cgi?id=52403

        ComplexTextController previously supported iterating through the text in
        both directions, but this resulted in duplicate code for each path.
        Instead, by being more careful about flipping signs where appropriate,
        we can refactor the code into one code path.

        No tests, just a refactoring; should be covered by existing tests.

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::reset):
        (WebCore::ComplexTextController::nextScriptRun):
        * platform/graphics/chromium/ComplexTextControllerLinux.h:
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::glyphIndexForXPositionInScriptRun):
        (WebCore::Font::selectionRectForComplexText):

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

        Reviewed by Darin Adler.

        Flip input[type=range] to use the new shadow DOM model.
        https://bugs.webkit.org/show_bug.cgi?id=52317

        This is a straight-up flip, minimal change to the logic, which will be
        refactored in a follow-up patch.

        Covered by existing tests.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve): Changed to use either
            host or parent node to find parent.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType): Added logic for destroying/creating
            shadow DOM subtree.
        * html/InputType.cpp:
        (WebCore::InputType::createShadowSubtree): Added empty decl.
        (WebCore::InputType::destroyShadowSubtree): Added a method to destroy
            shadow subtree.
        * html/InputType.h: Added defs.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree): Added a virtual method to create
            slider thumb.
        * html/RangeInputType.h: Adde def.
        * html/shadow/SliderThumbElement.cpp: Added temporary RenderSliderThumb class
            to handle cascading appearance.
        (WebCore::RenderSliderThumb::RenderSliderThumb): Added.
        (WebCore::RenderSliderThumb::layout): Moved here the logic from
            RenderSlider::createThumbStyle.
        (WebCore::SliderThumbElement::createRenderer): Added virtual method to
            create RenderSliderThumb instance.
        (WebCore::SliderThumbElement::defaultEventHandler): Changed to use HTMLDivElement
            as base class.
        (WebCore::SliderThumbElement::detach): Ditto.
        * html/shadow/SliderThumbElement.h:
        (WebCore::SliderThumbElement::SliderThumbElement): Ditto.
        (WebCore::SliderThumbElement::create): Ditto.
        (WebCore::toSliderThumbElement): Added a casting helper.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::attach): Added handling of shadow DOM,
            since the whole method is hand-rolled.
        (WebCore::MediaControlInputElement::updateStyle): Ditto.
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::~RenderSlider): Removed unneeded code.
        (WebCore::RenderSlider::thumbRect): Changed to use sliderThumbElement helper.
        (WebCore::RenderSlider::layout): Ditto.
        (WebCore::RenderSlider::sliderThumbElement): Added a temporary helper to access
            SliderThumbElement.
        (WebCore::RenderSlider::mouseEventIsInThumb): Changed to use sliderThumbElement helper.
        (WebCore::RenderSlider::mouseEventOffsetToThumb): Ditto.
        (WebCore::RenderSlider::setValueForPosition): Ditto.
        (WebCore::RenderSlider::positionForOffset): Ditto.
        (WebCore::RenderSlider::currentPosition): Ditto.
        (WebCore::RenderSlider::trackSize): Ditto.
        (WebCore::RenderSlider::forwardEvent): Ditto.
        (WebCore::RenderSlider::inDragMode): Ditto.
        * rendering/RenderSlider.h: Added def.

2011-01-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename RGBA32Buffer to ImageFrame
        https://bugs.webkit.org/show_bug.cgi?id=52363

        RGBA32Buffer is a terrible misnomer.  ImageFrame is vastly
        more accurate.  More cleanup to come.

        * WebCore.pro:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameIsCompleteAtIndex):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        (WebCore::ImageDecoderQt::internalReadImage):
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageFrame::ImageFrame):
        (WebCore::ImageFrame::operator=):
        (WebCore::ImageFrame::clear):
        (WebCore::ImageFrame::zeroFill):
        (WebCore::ImageFrame::copyReferenceToBitmapData):
        (WebCore::ImageFrame::copyBitmapData):
        (WebCore::ImageFrame::setSize):
        (WebCore::ImageFrame::hasAlpha):
        (WebCore::ImageFrame::setHasAlpha):
        (WebCore::ImageFrame::setColorProfile):
        (WebCore::ImageFrame::setStatus):
        (WebCore::ImageFrame::width):
        (WebCore::ImageFrame::height):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageFrame::ImageFrame):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        (WebCore::BMPImageDecoder::decode):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::decodeBMP):
        * platform/image-decoders/bmp/BMPImageReader.h:
        (WebCore::BMPImageReader::setBuffer):
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        * platform/image-decoders/cg/ImageDecoderCG.cpp:
        (WebCore::getPtrAsPixelData):
        (WebCore::ImageFrame::copyReferenceToBitmapData):
        (WebCore::ImageFrame::copyBitmapData):
        (WebCore::ImageFrame::setSize):
        (WebCore::ImageFrame::asNewNativeImage):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFFrameReader::GIFFrameReader):
        * platform/image-decoders/haiku/ImageDecoderHaiku.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::frameBufferAtIndex):
        (WebCore::ICOImageDecoder::decode):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        (WebCore::JPEGImageDecoder::outputScanlines):
        (WebCore::JPEGImageDecoder::jpegComplete):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/openvg/ImageDecoderOpenVG.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::pngComplete):
        * platform/image-decoders/png/PNGImageDecoder.h:
        (WebCore::PNGImageDecoder::isComplete):
        * platform/image-decoders/qt/ImageFrameQt.cpp: Copied from Source/WebCore/platform/image-decoders/qt/RGBA32BufferQt.cpp.
        (WebCore::ImageFrame::ImageFrame):
        (WebCore::ImageFrame::operator=):
        (WebCore::ImageFrame::clear):
        (WebCore::ImageFrame::zeroFill):
        (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):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp: Removed.
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::ImageFrame::ImageFrame):
        (WebCore::ImageFrame::operator=):
        (WebCore::ImageFrame::clear):
        (WebCore::ImageFrame::zeroFill):
        (WebCore::ImageFrame::copyBitmapData):
        (WebCore::ImageFrame::setSize):
        (WebCore::ImageFrame::asNewNativeImage):
        (WebCore::ImageFrame::hasAlpha):
        (WebCore::ImageFrame::setHasAlpha):
        (WebCore::ImageFrame::setColorProfile):
        (WebCore::ImageFrame::setStatus):
        (WebCore::ImageFrame::width):
        (WebCore::ImageFrame::height):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::frameBufferAtIndex):
        (WebCore::WEBPImageDecoder::decode):
        * platform/image-decoders/webp/WEBPImageDecoder.h:
        * platform/image-decoders/wx/ImageDecoderWx.cpp:
        (WebCore::ImageFrame::asNewNativeImage):

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

        Reviewed by Darin Adler.

        Transferring nodes between documents should be aware of the shadow DOM.
        https://bugs.webkit.org/show_bug.cgi?id=52399

        No visible change in behavior at the moment.

        Once https://bugs.webkit.org/show_bug.cgi?id=52317 lands, the following
        tests should no longer crash:
        * fast/css/pseudo-in-range-invalid-value.html
        * fast/css/pseudo-in-range.html
        * fast/forms/form-collection-elements.html
        * fast/forms/range-keyoperation.html

        * dom/Document.cpp:
        (WebCore::Document::adoptNode): Changed to use Node::setDocumentRecursively.
        * dom/Node.cpp:
        (WebCore::Node::setDocumentRecursively): Added new method, taking existing
            logic and adding shadow DOM traversal.
        (WebCore::Node::traverseNextNode): Style fix.
        (WebCore::Node::traverseNextSibling): Ditto.
        (WebCore::Node::traversePreviousNode): Ditto.
        (WebCore::Node::traversePreviousNodePostOrder): Ditto.
        (WebCore::Node::checkReplaceChild): Changed to use setDocumentRecursively.
        (WebCore::Node::checkAddChild): Ditto.
        * dom/Node.h: Added def.

2011-01-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Add support for drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=52343
        <rdar://problem/7660558>
               
        This patch contains the changes required to support dropping content
        in WebKit on the Mac. The DragData class has been extended to provide
        additional context from the application (keyboard state, modal windows, etc.)
        as well as information of the drag pasteboard being used.
        The support for WebKit as drag source will be added with a separate patch.

        * WebCore.exp.in:
        * page/DragController.cpp:
        (WebCore::DragController::dragIsMove): Added DragData parameter.
        (WebCore::DragController::tryDocumentDrag): Modified call to dragIsMove.
        (WebCore::DragController::concludeEditDrag): Same as above.
        * page/DragController.h: Added parameter to isCopyKeyDown.
        * page/mac/DragControllerMac.mm:
        The following methods have been modified to use the information stored
        in the DragData class.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
        * platform/DragData.h:
        (WebCore::DragData::flags):
        * platform/DragData.cpp: Added default flags parameter to the constructor.
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::DragData): Added constructor that receives the name of the pasteboard to use.
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        All the following files have been modified to add the DragData
        parameter to isCopyKeyDown. I plan to improve this in the future
        and make isCopyKeyDown not platform specific.
        * page/android/DragControllerAndroid.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/brew/DragControllerBrew.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/chromium/DragControllerChromium.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/efl/DragControllerEfl.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/haiku/DragControllerHaiku.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
        * page/qt/DragControllerQt.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/wx/DragControllerWx.cpp:
        (WebCore::DragController::isCopyKeyDown):

2011-01-13  David Kilzer  <ddkilzer@apple.com>

        Add missing MathMLElementFactory.h and MathMLNames.h to Xcode project

        Not reviewed.

        * WebCore.xcodeproj/project.pbxproj: Add missing headers.  Note
        that the corresponding source files were originally added to the
        project in r48559.

2011-01-12  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Use GC3D types in WebGLRenderingContext and related WebGL classes
        https://bugs.webkit.org/show_bug.cgi?id=51908

        * html/canvas/WebGLActiveInfo.h:
        (WebCore::WebGLActiveInfo::create):
        (WebCore::WebGLActiveInfo::type):
        (WebCore::WebGLActiveInfo::size):
        (WebCore::WebGLActiveInfo::WebGLActiveInfo):
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferDataImpl):
        (WebCore::WebGLBuffer::associateBufferData):
        (WebCore::WebGLBuffer::associateBufferSubDataImpl):
        (WebCore::WebGLBuffer::associateBufferSubData):
        (WebCore::WebGLBuffer::byteLength):
        (WebCore::WebGLBuffer::getCachedMaxIndex):
        (WebCore::WebGLBuffer::setCachedMaxIndex):
        (WebCore::WebGLBuffer::setTarget):
        * html/canvas/WebGLBuffer.h:
        (WebCore::WebGLBuffer::getTarget):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::setAttachment):
        (WebCore::WebGLFramebuffer::getAttachment):
        (WebCore::WebGLFramebuffer::getWidth):
        (WebCore::WebGLFramebuffer::getHeight):
        (WebCore::WebGLFramebuffer::getColorBufferFormat):
        (WebCore::WebGLFramebuffer::initializeRenderbuffers):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::cacheActiveAttribLocations):
        (WebCore::WebGLProgram::numActiveAttribLocations):
        (WebCore::WebGLProgram::getActiveAttribLocation):
        (WebCore::WebGLProgram::isUsingVertexAttrib0):
        * html/canvas/WebGLProgram.h:
        (WebCore::WebGLProgram::getLinkCount):
        * html/canvas/WebGLRenderbuffer.h:
        (WebCore::WebGLRenderbuffer::setInternalFormat):
        (WebCore::WebGLRenderbuffer::getInternalFormat):
        (WebCore::WebGLRenderbuffer::setSize):
        (WebCore::WebGLRenderbuffer::getWidth):
        (WebCore::WebGLRenderbuffer::getHeight):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::sizeInBytes):
        (WebCore::WebGLRenderingContext::activeTexture):
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::bindRenderbuffer):
        (WebCore::WebGLRenderingContext::bindTexture):
        (WebCore::WebGLRenderingContext::blendColor):
        (WebCore::WebGLRenderingContext::blendEquation):
        (WebCore::WebGLRenderingContext::blendEquationSeparate):
        (WebCore::WebGLRenderingContext::blendFunc):
        (WebCore::WebGLRenderingContext::blendFuncSeparate):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::checkFramebufferStatus):
        (WebCore::WebGLRenderingContext::clear):
        (WebCore::WebGLRenderingContext::clearColor):
        (WebCore::WebGLRenderingContext::clearDepth):
        (WebCore::WebGLRenderingContext::clearStencil):
        (WebCore::WebGLRenderingContext::colorMask):
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::createShader):
        (WebCore::WebGLRenderingContext::cullFace):
        (WebCore::WebGLRenderingContext::deleteBuffer):
        (WebCore::WebGLRenderingContext::depthFunc):
        (WebCore::WebGLRenderingContext::depthMask):
        (WebCore::WebGLRenderingContext::depthRange):
        (WebCore::WebGLRenderingContext::disable):
        (WebCore::WebGLRenderingContext::disableVertexAttribArray):
        (WebCore::WebGLRenderingContext::validateElementArraySize):
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        (WebCore::WebGLRenderingContext::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContext::validateRenderingState):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enable):
        (WebCore::WebGLRenderingContext::enableVertexAttribArray):
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::framebufferTexture2D):
        (WebCore::WebGLRenderingContext::frontFace):
        (WebCore::WebGLRenderingContext::generateMipmap):
        (WebCore::WebGLRenderingContext::getActiveAttrib):
        (WebCore::WebGLRenderingContext::getActiveUniform):
        (WebCore::WebGLRenderingContext::getAttachedShaders):
        (WebCore::WebGLRenderingContext::getAttribLocation):
        (WebCore::WebGLRenderingContext::getBufferParameter):
        (WebCore::WebGLRenderingContext::getError):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getRenderbufferParameter):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getTexParameter):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::getVertexAttribOffset):
        (WebCore::WebGLRenderingContext::hint):
        (WebCore::WebGLRenderingContext::isBuffer):
        (WebCore::WebGLRenderingContext::isEnabled):
        (WebCore::WebGLRenderingContext::isFramebuffer):
        (WebCore::WebGLRenderingContext::isProgram):
        (WebCore::WebGLRenderingContext::isRenderbuffer):
        (WebCore::WebGLRenderingContext::isShader):
        (WebCore::WebGLRenderingContext::isTexture):
        (WebCore::WebGLRenderingContext::lineWidth):
        (WebCore::WebGLRenderingContext::linkProgram):
        (WebCore::WebGLRenderingContext::pixelStorei):
        (WebCore::WebGLRenderingContext::polygonOffset):
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::renderbufferStorage):
        (WebCore::WebGLRenderingContext::sampleCoverage):
        (WebCore::WebGLRenderingContext::scissor):
        (WebCore::WebGLRenderingContext::stencilFunc):
        (WebCore::WebGLRenderingContext::stencilFuncSeparate):
        (WebCore::WebGLRenderingContext::stencilMask):
        (WebCore::WebGLRenderingContext::stencilMaskSeparate):
        (WebCore::WebGLRenderingContext::stencilOp):
        (WebCore::WebGLRenderingContext::stencilOpSeparate):
        (WebCore::WebGLRenderingContext::texImage2DBase):
        (WebCore::WebGLRenderingContext::texImage2DImpl):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texParameter):
        (WebCore::WebGLRenderingContext::texParameterf):
        (WebCore::WebGLRenderingContext::texParameteri):
        (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::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::getBooleanParameter):
        (WebCore::WebGLRenderingContext::getBooleanArrayParameter):
        (WebCore::WebGLRenderingContext::getFloatParameter):
        (WebCore::WebGLRenderingContext::getIntParameter):
        (WebCore::WebGLRenderingContext::getLongParameter):
        (WebCore::WebGLRenderingContext::getUnsignedLongParameter):
        (WebCore::WebGLRenderingContext::getWebGLFloatArrayParameter):
        (WebCore::WebGLRenderingContext::getWebGLIntArrayParameter):
        (WebCore::WebGLRenderingContext::isTexInternalFormatColorBufferCombinationValid):
        (WebCore::WebGLRenderingContext::getBoundFramebufferColorFormat):
        (WebCore::WebGLRenderingContext::validateTextureBinding):
        (WebCore::WebGLRenderingContext::validateSize):
        (WebCore::WebGLRenderingContext::validateTexFuncFormatAndType):
        (WebCore::WebGLRenderingContext::validateTexFuncLevel):
        (WebCore::WebGLRenderingContext::validateTexFuncParameters):
        (WebCore::WebGLRenderingContext::validateTexFuncData):
        (WebCore::WebGLRenderingContext::validateDrawMode):
        (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::vertexAttribfImpl):
        (WebCore::WebGLRenderingContext::vertexAttribfvImpl):
        (WebCore::WebGLRenderingContext::simulateVertexAttrib0):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::VertexAttribState::VertexAttribState):
        * html/canvas/WebGLShader.cpp:
        (WebCore::WebGLShader::create):
        (WebCore::WebGLShader::WebGLShader):
        * html/canvas/WebGLShader.h:
        (WebCore::WebGLShader::getType):
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::setTarget):
        (WebCore::WebGLTexture::setParameteri):
        (WebCore::WebGLTexture::setParameterf):
        (WebCore::WebGLTexture::setLevelInfo):
        (WebCore::WebGLTexture::generateMipmapLevelInfo):
        (WebCore::WebGLTexture::getInternalFormat):
        (WebCore::WebGLTexture::getType):
        (WebCore::WebGLTexture::getWidth):
        (WebCore::WebGLTexture::getHeight):
        (WebCore::WebGLTexture::isNPOT):
        (WebCore::WebGLTexture::mapTargetToIndex):
        (WebCore::WebGLTexture::computeLevelCount):
        (WebCore::WebGLTexture::update):
        (WebCore::WebGLTexture::getLevelInfo):
        * html/canvas/WebGLTexture.h:
        (WebCore::WebGLTexture::LevelInfo::setInfo):
        * html/canvas/WebGLUniformLocation.cpp:
        (WebCore::WebGLUniformLocation::create):
        (WebCore::WebGLUniformLocation::WebGLUniformLocation):
        (WebCore::WebGLUniformLocation::location):
        * html/canvas/WebGLUniformLocation.h:
        * platform/graphics/GraphicsContext3D.h: Map GC3Dboolean to bool instead of unsigned char.

2011-01-13  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Change createObjectURL and revokeObjectURL to put under webkitURL.
        https://bugs.webkit.org/show_bug.cgi?id=52257

        Note that we add "webkit" vendor prefix to URL that is introduced in
        the latest File API spec.

        For the time being, we implement webkitURL as a readonly attribute
        instead of a constructor so that we will not expose prototype property,
        as required by the spec.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/DOMURL.cpp: Added.
        * html/DOMURL.h: Added.
        * html/DOMURL.idl: Added.
        * inspector/front-end/NetworkPanel.js:
        * inspector/front-end/utilities.js:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitURL):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::webkitURL):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

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

        Reviewed by Dimitri Glazkov.

        Setting outerText should convert CR/LF to <br>
        https://bugs.webkit.org/show_bug.cgi?id=52268

        Make set outerText support line breaks (sharing the text to fragment code
        with setInnerText) and handle empty text nodes the same way IE does.

        Test: fast/dom/set-outer-text.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::textToFragment): Shared between setInnerText and setOuterText
        (WebCore::HTMLElement::setInnerText): Split out text parsing code.
        (WebCore::mergeWithNextTextNode): Split out text node merging code.
        (WebCore::HTMLElement::setOuterText): Added support for line breaks.
        * html/HTMLElement.h:

2011-01-13  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Relax the ESSL valid charset a little bit to include " ' `
        https://bugs.webkit.org/show_bug.cgi?id=52396

        * html/canvas/WebGLRenderingContext.cpp:

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

        Reviewed by Kenneth Russell.

        [chromium] Attempt to fix crash in tiled compositor memcpy
        https://bugs.webkit.org/show_bug.cgi?id=52379

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::update):

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

        Unreviewed, rolling out r75725.
        http://trac.webkit.org/changeset/75725
        https://bugs.webkit.org/show_bug.cgi?id=52317

        Caused crashes in layout tests.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * html/InputType.cpp:
        * html/InputType.h:
        * html/RangeInputType.cpp:
        * html/RangeInputType.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::defaultEventHandler):
        (WebCore::SliderThumbElement::detach):
        * html/shadow/SliderThumbElement.h:
        (WebCore::SliderThumbElement::SliderThumbElement):
        (WebCore::SliderThumbElement::create):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::attach):
        (WebCore::MediaControlInputElement::updateStyle):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::~RenderSlider):
        (WebCore::RenderSlider::styleDidChange):
        (WebCore::RenderSlider::createThumbStyle):
        (WebCore::RenderSlider::thumbRect):
        (WebCore::RenderSlider::layout):
        (WebCore::RenderSlider::updateFromElement):
        (WebCore::RenderSlider::mouseEventIsInThumb):
        (WebCore::RenderSlider::mouseEventOffsetToThumb):
        (WebCore::RenderSlider::setValueForPosition):
        (WebCore::RenderSlider::positionForOffset):
        (WebCore::RenderSlider::currentPosition):
        (WebCore::RenderSlider::trackSize):
        (WebCore::RenderSlider::forwardEvent):
        (WebCore::RenderSlider::inDragMode):
        * rendering/RenderSlider.h:

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

        Reviewed by Darin Adler.

        Flip input[type=range] to use the new shadow DOM model.
        https://bugs.webkit.org/show_bug.cgi?id=52317

        This is a straight-up flip, minimal change to the logic, which will be
        refactored in a follow-up patch.

        Covered by existing tests.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve): Changed to use either
            host or parent node to find parent.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType): Added logic for destroying/creating
            shadow DOM subtree.
        * html/InputType.cpp:
        (WebCore::InputType::createShadowSubtree): Added empty decl.
        (WebCore::InputType::destroyShadowSubtree): Added a method to destroy
            shadow subtree.
        * html/InputType.h: Added defs.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree): Added a virtual method to create
            slider thumb.
        * html/RangeInputType.h: Adde def.
        * html/shadow/SliderThumbElement.cpp: Added temporary RenderSliderThumb class
            to handle cascading appearance.
        (WebCore::RenderSliderThumb::RenderSliderThumb): Added.
        (WebCore::RenderSliderThumb::layout): Moved here the logic from
            RenderSlider::createThumbStyle.
        (WebCore::SliderThumbElement::createRenderer): Added virtual method to
            create RenderSliderThumb instance.
        (WebCore::SliderThumbElement::defaultEventHandler): Changed to use HTMLDivElement
            as base class.
        (WebCore::SliderThumbElement::detach): Ditto.
        * html/shadow/SliderThumbElement.h:
        (WebCore::SliderThumbElement::SliderThumbElement): Ditto.
        (WebCore::SliderThumbElement::create): Ditto.
        (WebCore::toSliderThumbElement): Added a casting helper.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::attach): Added handling of shadow DOM,
            since the whole method is hand-rolled.
        (WebCore::MediaControlInputElement::updateStyle): Ditto.
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::~RenderSlider): Removed unneeded code.
        (WebCore::RenderSlider::thumbRect): Changed to use sliderThumbElement helper.
        (WebCore::RenderSlider::layout): Ditto.
        (WebCore::RenderSlider::sliderThumbElement): Added a temporary helper to access
            SliderThumbElement.
        (WebCore::RenderSlider::mouseEventIsInThumb): Changed to use sliderThumbElement helper.
        (WebCore::RenderSlider::mouseEventOffsetToThumb): Ditto.
        (WebCore::RenderSlider::setValueForPosition): Ditto.
        (WebCore::RenderSlider::positionForOffset): Ditto.
        (WebCore::RenderSlider::currentPosition): Ditto.
        (WebCore::RenderSlider::trackSize): Ditto.
        (WebCore::RenderSlider::forwardEvent): Ditto.
        (WebCore::RenderSlider::inDragMode): Ditto.
        * rendering/RenderSlider.h: Added def.

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

        Reviewed by Simon Fraser.

        <rdar://problem/8098442> Crash in Widget::setFrameRect()
        https://bugs.webkit.org/show_bug.cgi?id=52375

        Test: plugins/destroy-on-setwindow.html

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFrameRect): Protect the Widget from being deleted as a result of calling
        out to the view.
        (WebCore::Widget::getOuterView): Coding style fix.
        (WebCore::Widget::paint): Protect the Widget from being deleted as a result of calling out to
        the views. This is precautionary, since this function does not applear to access member variables
        after such calls.
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setFrameRect): Protect the Widget from being deleted as a result of calling
        out to the platform widget.

2011-01-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r75715.

        * WebCore.pri:
        * WebCore.pro:

2011-01-13  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: Qt build fix.

        * WebCore.pri:

2011-01-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: embed injected script into the backend.
        https://bugs.webkit.org/show_bug.cgi?id=52312

        InjectedScript belongs to the backend of the system and
        should be exposed by means of protocol, not InjectedScriptAccess.
        This patch makes injected script a part of the backend.
        It introduces single manual generation step (xxd -i) that should be
        automated by the build scripts for all the platforms.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::injectedScriptSource):
        * inspector/InjectedScriptHost.h:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:
        * inspector/front-end/InjectedScript.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone.propertyNamesCallback):
        (WebInspector.doLoadedDone):
        * inspector/xxd.pl: Added.

2011-01-13  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Cleanup after r75613 -- make all UI-facing strings
        to be passed directly to WebInspector.UIString

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView.prototype._updateCallback):
        (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.GzipRule.prototype.doRun):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies):
        (WebInspector.AuditRules.StaticCookielessRule.prototype.processCookies):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._updateWithCookies):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype._createContentIfNeeded.onImageLoad):
        (WebInspector.ImageView.prototype._createContentIfNeeded):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkTimeCalculator.prototype.formatValue):
        (WebInspector.NetworkTransferTimeCalculator.prototype.formatValue):
        (WebInspector.NetworkTransferDurationCalculator.prototype.formatValue):
        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.get data.formatMilliseconds):
        (WebInspector.ProfileDataGridNode.prototype.get data):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.Type.toUIString):
        (WebInspector.Resource.Type.toString):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewCalculator.prototype.formatValue):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelineCalculator.prototype.formatValue):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generateAggregatedInfo):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        * inspector/front-end/utilities.js:
        ():

2011-01-13  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Need a way to inform the application when a Netscape plugin is created.
        https://bugs.webkit.org/show_bug.cgi?id=30179

        Added "c" style static method for the application to hook up for
        receiving notifications when a plugin is created.

        * plugins/symbian/PluginViewSymbian.cpp:
        (qtwebkit_setPluginCreatedCallback):
        (WebCore::PluginView::platformStart):

2011-01-13  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Use a black background color for the video element on Qt Mobile
        https://bugs.webkit.org/show_bug.cgi?id=52252

        Use black as the background color for the video element on Qt Mobile.

        * css/themeQtMobile.css:
        (video):

2011-01-13  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Use a big central media play control button for video element 
        https://bugs.webkit.org/show_bug.cgi?id=52315

        When ChromeClient::requiresFullscreenForVideoPlayback() returns true,
        all other control buttons for the video element are hidden, except 
        a big centralized play button.

        No new tests because no client implements requiresFullscreenForVideoPlayback yet.

        * WebCore.pri:
        * css/mediaControlsQtFullscreen.css: Added.
        (audio):
        (audio::-webkit-media-controls-panel):
        (video::-webkit-media-controls-panel):
        (video:-webkit-full-page-media::-webkit-media-controls-panel):
        (audio::-webkit-media-controls-mute-button):
        (video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-play-button):
        (video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline-container):
        (video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-current-time-display):
        (video::-webkit-media-controls-current-time-display):
        (audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-timeline):
        (video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider-container):
        (video::-webkit-media-controls-volume-slider-container):
        (audio::-webkit-media-controls-volume-slider):
        (video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button):
        (video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button):
        (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::extraMediaControlsStyleSheet):

2011-01-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Paint toggle buttons inconsistent when the object state is indeterminate
        https://bugs.webkit.org/show_bug.cgi?id=52361

        Check whether the object state is indeterminate to set the flag
        GTK_STATE_FLAG_INCONSISTENT before rendering check and radio
        buttons.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::paintToggle):

2011-01-13  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Extend the Platform Plugin to support full screen video handler
        https://bugs.webkit.org/show_bug.cgi?id=51249

        Make MediaPlayerPrivateQt support a fullscreen player.

        No new tests because LayoutTests/media/media-fullscreen-inline.html already exists.
        However, this test failed for Qt (QtMediaPlayer) due to durationchange event getting fired twice.
        So, still skip it for Qt.

        * WebCore.pro:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt):
        (WebCore::MediaPlayerPrivateQt::removeVideoItem):
        (WebCore::MediaPlayerPrivateQt::restoreVideoItem):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::supportsFullscreen):
        (WebCore::MediaPlayerPrivateQt::mediaPlayer):

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

        Reviewed by Dave Hyatt.

        <rdar://problem/8858548> Disable inheritance of text emphasis marks to ruby text
        https://bugs.webkit.org/show_bug.cgi?id=52359

        Test: fast/ruby/text-emphasis.html

        * css/html.css:
        (rt):

2011-01-13  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by David Levin.

        Trivial fix after r75682.

        * loader/FrameLoader.cpp: Remove accidentally committed debug code.
        (WebCore::FrameLoader::shouldClose):

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

        Reviewed by Eric Seidel.

        REGRESSION(r69831): focus() in onkeypress discards input (affects chaseonline.chase.com)
        https://bugs.webkit.org/show_bug.cgi?id=52241

        The bug was caused by RenderTextControl::selection's creating a Range with m_insertText
        which is a shadow DOM div as both start and end containers. Fixed the bug by traversing
        through the descendents of m_innerText and using the right start and end containers to
        create a Range.

        Test: fast/forms/focus-change-on-keypress.html

        * rendering/RenderTextControl.cpp:
        (WebCore::setContainerAndOffsetForRange): Added; a helper function.
        (WebCore::RenderTextControl::selection): See above.

2011-01-12  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        M_formElementsWithFormAttribute not cleared when FormAssociatedElement is inserted with a null m_form and then removed.
        https://bugs.webkit.org/show_bug.cgi?id=51905

        Calls unregisterFormElementWithFormAttribute() when 'form' attribute
        is removed.

        Tests: fast/forms/form-associated-element-crash.html
               fast/forms/form-associated-element-crash2.html

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::formAttributeChanged):

2011-01-12  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        M_formElementsWithFormAttribute not cleared when Node is moved to another document.
        https://bugs.webkit.org/show_bug.cgi?id=51418

        Calls unregisterFormElementWithFormAttribute() when form associated elements
        are moved to another document.

        Test: fast/forms/change-form-element-document-crash.html

        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::willMoveToNewOwnerDocument): Added.
        * html/FormAssociatedElement.h: Added willMoveToNewOwnerDocument().
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::willMoveToNewOwnerDocument): Added.
        * html/HTMLFormControlElement.h: Added willMoveToNewOwnerDocument().
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::willMoveToNewOwnerDocument): Added.
        * html/HTMLObjectElement.h: Added willMoveToNewOwnerDocument().
        * html/HTMLPlugInImageElement.h: Moves willMoveToNewOwnerDocument() to protected.

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

        Reviewed by Eric Seidel.

        Stop instantiating legacy editing positions in ApplyBlockElementCommand and ApplyStyleCommand
        https://bugs.webkit.org/show_bug.cgi?id=52250

        Removed instantiation of legacy editing positions.
        Calls to Position::Position are replaced by calls to Position's convenience functions.

        Also added firstPositionInOrBeforeNode and lastPositionInOrAfterNode,
        which are functions that return firstPositionInNode and lastPositionInNode respectively
        when the specified node can have children for editing purpose and return positionBeforeNode
        and positionAfterNode respectively otherwise. They can be used to guarantee that we never
        create a bogus position like [img, 0] or [br, 0].

        No tests are added since this is a cleanup.

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::formatSelection):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle):
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::nodeFullySelected):
        (WebCore::ApplyStyleCommand::nodeFullyUnselected):
        (WebCore::ApplyStyleCommand::splitTextAtStart):
        (WebCore::ApplyStyleCommand::splitTextAtEnd):
        (WebCore::ApplyStyleCommand::splitTextElementAtStart):
        (WebCore::ApplyStyleCommand::splitTextElementAtEnd):
        (WebCore::ApplyStyleCommand::isValidCaretPositionInTextNode):
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical):
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical):
        (WebCore::ApplyStyleCommand::computedFontSize):
        (WebCore::ApplyStyleCommand::joinChildTextNodes):
        * editing/ApplyStyleCommand.h:
        * editing/htmlediting.h:
        (WebCore::firstPositionInOrBeforeNode): Added.
        (WebCore::lastPositionInOrAfterNode): Added.

2011-01-12  Sam Weinig  <sam@webkit.org>

        Another build fix.

        * platform/mac/WheelEventMac.mm:
        (WebCore::phaseForEvent):

2011-01-12  Sam Weinig  <sam@webkit.org>

        Fix build.

        * platform/mac/WheelEventMac.mm:
        (WebCore::phaseForEvent):

2011-01-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove premature optimization from SchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=52283

        As far as I can tell, this optimization isn't necessary.  I'm slightly
        unsure which benchmarks to run to demonstrate this numerically, but
        none of the benchmarks Chromium tracks were affected by adding a
        similar check for "display-isolated" schemes.

        * platform/SchemeRegistry.cpp:
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal):

2011-01-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        Add-on for https://bugs.webkit.org/show_bug.cgi?id=52309 
        Expose fixed layout through WebKit SPI
        -and corresponding-
        <rdar://problem/8844464>

        And now with getters!
        * WebCore.exp.in:

2011-01-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=52337
        PlatformWheelEvent should know about the scroll phase on the Mac

        Add a phase parameter on Mac PlatformWheelEvents.

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        (WebCore::PlatformWheelEvent::phase):
        * platform/mac/WheelEventMac.mm:
        (WebCore::phaseForEvent):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2011-01-12  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        A couple of lines of the patch for https://bugs.webkit.org/show_bug.cgi?id=52321
        were omitted. 

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):

2011-01-12  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Getting rid of an assert that was causing build failures that turns out not to be needed.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintsWithTransform):

2011-01-12  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Another fix for Gtk

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintsWithTransform):

2011-01-12  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Fix for Gtk and Windows builds

        * page/Frame.cpp:
        (WebCore::Frame::scalePage):
        * page/Frame.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::contentsScale):
        (PlatformCALayer::setContentsScale):

2011-01-12  Chris Marrin  <cmarrin@apple.com>

        UNreviewed.

        Fix for the Windows build

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (contentsScale):
        (setContentsScale):

2011-01-12  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Another build fix

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::clampedContentsScaleForScale):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setContentsScale):

2011-01-11  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Max area bound needed in creation of IOSurface in ImageBufferCG.cpp
        https://bugs.webkit.org/show_bug.cgi?id=52172

        Tests: fast/canvas/canvas-large-dimensions.html

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2011-01-12  Daniel Bates  <dbates@rim.com>
            And Benjamin C Meyer  <bmeyer@rim.com>

        Build fix when building with Inspector disabled
        https://bugs.webkit.org/show_bug.cgi?id=52313

        After changeset 75604 <http://trac.webkit.org/changeset/75604> it's not
        possible to build when the Inspector is disabled.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::updateApplicationCacheStatus): Fix build breakage when building
        with Inspector disabled and Offline Web Applications enabled by moving macro guard condition
        ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) into function body. This makes us also
        consistent with the form we use for InspectorInstrumentation::networkStateChanged() and other
        InspectorInstrumentation functions.
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveData): Fix build breakage when building with Inspector
        disabled by adding ENABLE(INSPECTOR) guard around code that references the instance variable
        ApplicationCacheGroup::m_currentResourceIdentifier as this variable only exists when building
        with the Inspector.
        (WebCore::ApplicationCacheGroup::didFinishLoading): Ditto.
        (WebCore::ApplicationCacheGroup::didFail): Ditto.

2011-01-12  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Fix a build issue from http://trac.webkit.org/changeset/75639.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::contentsScale):
        (WebCore::GraphicsLayer::setContentsScale):

2011-01-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Kevin Decker.

        Pages with accelerated layers lose subpixel-AA and become blurry when a scale factor is applied
        rdar://problem/8824974

        This prevents the rootLayer (with the WebKit rendered content) from going becoming
        a tiled layer when zoomed, and when there is other layered content on the page.
        This speeds up zooming a lot and avoids some buggy behavior in CA with a very large
        number of layers.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintsWithTransform):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintingGoesToWindow):

2011-01-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.
        
        Pages with accelerated layers lose subpixel-AA and become blurry when a scale factor is applied
        rdar://problem/8824974

        When scaled, WebKit renders the page content at the scaled up size, so there are no
        scaling artifacts. But content drawn into a layer's backing store does not scale up.
        This is made worse by the fact that the root page contents become layered when there
        are other accelerated compositing layers present (video, plugins, etc.).
        
        Plumb scaling factor from Frame::scalePage() down into all layers with content. It
        eventually calls CALayer::setContentsScale which renders to a backing store whose dimensions
        are scaled, causing them to render larger and appear pixel perfect at the scaled
        page size.
 
         * page/Frame.cpp:
         (WebCore::Frame::updateContentsScale):
         (WebCore::Frame::scalePage):
         * page/Frame.h:
         * platform/graphics/GraphicsLayer.h:
         * platform/graphics/ca/GraphicsLayerCA.cpp:
         (WebCore::GraphicsLayerCA::setContentsScale):
         (WebCore::GraphicsLayerCA::clampedContentsScaleForScale):
         * platform/graphics/ca/GraphicsLayerCA.h:
         (WebCore::GraphicsLayerCA::contentsScale):
         * platform/graphics/ca/PlatformCALayer.h:
         * platform/graphics/ca/mac/PlatformCALayerMac.mm:
         (PlatformCALayer::contentsScale):
         (PlatformCALayer::setContentsScale):
         * rendering/RenderLayer.cpp:
         (WebCore::RenderLayer::updateContentsScale):
         * rendering/RenderLayer.h:
         * rendering/RenderLayerBacking.cpp:
         (WebCore::RenderLayerBacking::createGraphicsLayer):
         (WebCore::RenderLayerBacking::updateForegroundLayer):
         (WebCore::RenderLayerBacking::updateMaskLayer):
         (WebCore::RenderLayerBacking::updateContentsScale):
         * rendering/RenderLayerBacking.h:
         * rendering/RenderLayerCompositor.cpp:
         (WebCore::RenderLayerCompositor::updateContentsScale):
         * rendering/RenderLayerCompositor.h:
 
2011-01-12  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.

        Fix DrawingBuffer issues for depth/stencil, extensions, etc.
        https://bugs.webkit.org/show_bug.cgi?id=52310

        1)  GL_TEXTURE is not a valid argument to glFramebufferTexture2D()
        (should be GL_TEXTURE_2D).
        2)  Support for the multisampling extension was being checked after
        the DrawingBuffer constructor was called, which calls multisample()
        to check for the extension.
        3)  If depth or stencil is set, the corresponding framebuffers must
        be created in the DrawingBuffer constructor.
        4)  GL_DEPTH_STENCIL is not a valid framebuffer internal type in
        GLES2.  Must use GL_OES_DEPTH24_STENCIL8, and check for the
        OES_packed_depth_stencil extension.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        Record the extension support in the constructor.  Create all the
        secondary drawing buffers (for multisampling, depth/stencil).
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::create):
        Check for the extensions before calling the DrawingBuffer constructor.
        (WebCore::DrawingBuffer::createSecondaryBuffers):
        Refactor creation of the secondary buffers from DrawingBufferMac.mm to
        here.
        (WebCore::DrawingBuffer::reset):
        Use DEPTH24_STENCIL8 format, not DEPTH_STENCIL.  Use
        DEPTH_COMPONENT16, not DEPTH_COMPONENT.
        Use GL_TEXTURE_2D, not GL_TEXTURE (for glFramebufferTexture2D).
        * platform/graphics/gpu/DrawingBuffer.h:
        Refactor createSecondaryBuffers().  Add extension support arguments to
        constructor.  Add support for packed_depth_stencil extension.
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        Record extension support in constructor.  Refactor out creation of
        secondary buffers.

2011-01-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=52309 Expose
        fixed layout through WebKit SPI
        -and corresponding-
        <rdar://problem/8844464>

        Export symbols for ScrollView::setUseFixedLayout() and 
        ScrollView::setFixedLayoutSize()
        * WebCore.exp.in:

2011-01-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Search input field doesn't have cancel button

        Add a cancel button to the search field and make it customizable
        by the client. For now, use the close dialog button associated
        with the application's style as the default.

        Unskip a bunch of search field related tests that pass now:

        fast/forms/search-cancel-button-mouseup.html
        fast/forms/search-rtl.html
        fast/forms/search-abs-pos-cancel-button.html
        fast/forms/search-styled.html
        fast/forms/search-transformed.html
        fast/forms/search-zoomed.html
        fast/forms/search-cancel-button-style-sharing.html
        fast/forms/search-display-none-cancel-button.html
        fast/forms/search-placeholder-value-changed.html
        fast/repaint/search-field-cancel.html
        fast/forms/search-cancel-button-events.html

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

        * platform/graphics/qt/ImageQt.cpp:
        (loadResourcePixmap):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::paintSearchField):
        (WebCore::RenderThemeQt::adjustSearchFieldStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeQt::convertToPaintingRect):
        (WebCore::RenderThemeQt::paintSearchFieldCancelButton):
        * platform/qt/RenderThemeQt.h:

2011-01-12  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: cookie table is multiplied after repeated switching to cookies tab in network item view
        Only create cookiesTable is it hasn't been done yet.
        https://bugs.webkit.org/show_bug.cgi?id=52303

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

2011-01-12  Koan-Sin Tan  <koansin.tan@gmail.com>

        Reviewed by Martin Robinson.

        [Gtk] WebKitGtk+ doesn't build on Mac OS X 10.6
        https://bugs.webkit.org/show_bug.cgi?id=50867

        * config.h: Don't disallow ctype for (OS(DARWIN) && PLATFORM(GTK))
        Many GTK+ related files include <libintl.h> or <glib/gi18n-lib.h>.
        On Mac, <libintl.h> includes <xlocale.h>. <xclocale.h> includes 
        <xlocale/_ctype.h>, which uses isacii().
        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString): For OS(DARWIN) && !PLATFORM(CF)
        use the Chromium Linux UUID generation.

2011-01-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        [CSS Gradients] One color stop should not paint anything for linear-gradient
        https://bugs.webkit.org/show_bug.cgi?id=52259
        
        Share color stop parsing code between linear and radial gradients.
        Consider the gradient invalid if it has less than two color stops.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseLinearGradient):
        (WebCore::CSSParser::parseRadialGradient):
        (WebCore::CSSParser::parseGradientColorStops):
        * css/CSSParser.h:

2011-01-12  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Fix inconsistencies in Inspector strings found by the new check-inspector-strings script.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.Type.toString):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceRevisionTreeElement):
        * inspector/front-end/utilities.js:
        ():

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

        Unreviewed. Fix WML compilation on Mac.

        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::setValueForUser):
        (WebCore::WMLInputElement::initialize):
        (WebCore::WMLInputElement::validateInputMask):
        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::listBoxSelectItem):

2011-01-12  Justin Schuh  <jschuh@chromium.org>

        Unreviewed build fix for debug strict compiles.

        Use fprintf for debug statements instead of fwrite, which caused compile failures
        in debug strict mode because of failure to check the fwrite return value.

        No behavior changed.

        * rendering/CounterNode.cpp:
        (WebCore::showTreeAndMark):

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

        Reviewed by Pavel Feldman.

        inspector/timeline-network-resource.html fails when run twice
        https://bugs.webkit.org/show_bug.cgi?id=37394

        Send didReceiveResponse notification to the timeline agent from ResourceLoadNotifier
        instead of ResourceLoader::didReceiveResponse to cover the cases when resources
        are loaded from memory cache.

        Network notifications are now sent to InspectorInstrumentation which dispatches
        them to interested agents and InspectorController.

        * inspector/Inspector.idl:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::didReceiveManifestResponse):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl):
        (WebCore::InspectorInstrumentation::willSendRequestImpl):
        (WebCore::InspectorInstrumentation::markResourceAsCachedImpl):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didReceiveContentLengthImpl):
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::scriptImportedImpl):
        (WebCore::InspectorInstrumentation::retrieveResourceAgent):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::identifierForInitialRequest):
        (WebCore::InspectorInstrumentation::willSendRequest):
        (WebCore::InspectorInstrumentation::markResourceAsCached):
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCache):
        (WebCore::InspectorInstrumentation::willReceiveResourceResponse):
        (WebCore::InspectorInstrumentation::didReceiveContentLength):
        (WebCore::InspectorInstrumentation::didFinishLoading):
        (WebCore::InspectorInstrumentation::didFailLoading):
        (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorInstrumentation::scriptImported):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::identifierForInitialRequest):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createResourceSendRequestData):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.identifierForInitialRequest):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didReceiveData):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        * loader/appcache/ApplicationCacheGroup.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):

2011-01-12  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: do not replace all tabs with spaces when editing script source
        https://bugs.webkit.org/show_bug.cgi?id=52291

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.setContent):
        (WebInspector.SourceFrame.prototype._editLine):

2011-01-11  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Enforce READ_ONLY transactions in IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=52229

        Add READ_ONLY_ERR and return it whenever delete or put
        are called.  Note that IDBCursor's delete and update
        are simply aliases for delete/put, which is why no
        extra code is required to handle those cases.

        Test: storage/indexeddb/transaction-read-only.html

        * dom/ExceptionCode.cpp:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseException.h:
        * storage/IDBDatabaseException.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):

2011-01-11  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] minimal build breaks in RenderThemeGtk3
        https://bugs.webkit.org/show_bug.cgi?id=52202

        * platform/gtk/RenderThemeGtk3.cpp: Added VIDEO guards around
        initMediaColors().

2011-01-11  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] PlatformVideoWindowMac implementation
        https://bugs.webkit.org/show_bug.cgi?id=50770

        This new implementation will be used on Mac OS to display the
        fullscreen video window with the GStreamer-based media player.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::gstGWorldSyncMessageCallback):
        * platform/graphics/gstreamer/PlatformVideoWindow.h:
        (WebCore::PlatformVideoWindow::window):
        * platform/graphics/gstreamer/PlatformVideoWindowMac.mm:
        (PlatformVideoWindow::PlatformVideoWindow):
        (PlatformVideoWindow::~PlatformVideoWindow):
        (PlatformVideoWindow::prepareForOverlay):

2011-01-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Webkit crashes when a gradient is applied using the first-line pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=52225
        
        When a pseudostyle references images, we fail to register/unregister
        the relevant RenderObjects as clients of the image in the style.
        For gradients, this caused a crash.
        
        This patch fixes the crash by returning a null gradient image in this
        situation.

        Test: fast/gradients/gradient-on-pseudoelement-crash.html

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):

2011-01-11  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r71562): servePendingRequests() no longer called when
        resources are done loading.
        https://bugs.webkit.org/show_bug.cgi?id=52264
        <rdar://problem/8767429>
        
        In r71562, servePendingRequests() is no longer called in Loader's
        didFinishLoading(), didFail() and didReceiveResponse() methods. Since
        r71562 was intended only as a refactoring, these calls should be
        restored. At least one WebKit-based Mac OS X application relies on this
        for correct behavior.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone): Call
        resourceLoadScheduler()->servePendingRequests().

2011-01-11  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Add Document::setContent()
        https://bugs.webkit.org/show_bug.cgi?id=52085

        Add a method to Document to set the whole content at once.
        This removes the hack of the insert method in the xml parser
        and is a predecessor to feed the xml parser with raw data.

        * dom/Document.cpp:
        (WebCore::Document::setContent):
        * dom/Document.h:
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::insert): Added ASSERT_NOT_REACHED().
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureSVGFontData): Use setContent.
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString): Ditto.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML): Ditto.
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Ditto.

2011-01-11  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addArc): Switch to MathExtra's piFloat define,
        rather than M_PI which is not always available.

2011-01-11  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Adam Barth.

        Use plug-in DB for extensions to MIME type convertion

        Plugins extension to MIME type conversion was not used in the
        frameLoader. This was causing some fallback to be use which as the side
        effect of loosing all the <OBJECT> parameters or <EMBED> attributes.
        This patch ensure that we try to convert the extension to MIME type
        using the plugin database beofre using this fallback.

        Attribute lost with Flash plugin without mime type set
        https://bugs.webkit.org/show_bug.cgi?id=50657

        Test: plugins/no-mime-with-valid-extension.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType): Use PluginDatabase for MIME

2011-01-11  James Simonsen  <simonjam@chromium.org>

        Reviewed by Eric Seidel.

        [Web Timing] Rename sslHandshakeStart to secureConnectionStart
        https://bugs.webkit.org/show_bug.cgi?id=52239

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::secureConnectionStart):
        * page/PerformanceTiming.h:
        * page/PerformanceTiming.idl:

2011-01-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Introduce the notion of a "display-isolated" URL scheme for use by
        Chrome-internal URLs
        https://bugs.webkit.org/show_bug.cgi?id=50182

        This patch actually makes the display-isolated schemes display
        isolated.  The behavior should be the same as the previous iteration of
        this patch, but re-organized a bit because reading the access white
        list is expensive.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::isAccessToURLWhiteListed):
        (WebCore::SecurityOrigin::canDisplay):
        * page/SecurityOrigin.h:
        * platform/SchemeRegistry.cpp:
        * platform/SchemeRegistry.h:

2011-01-11  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        Scroll event should be fired asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=45631

        Tests: fast/events/fire-scroll-event.html
               fast/events/fire-scroll-event-element.html
               fast/events/scroll-event-phase.html

        Makes scroll events fire asynchronously to be in compliance with the
        CSSOM View Module and consistent with Gecko, Opera and (to some degree)
        IE.
        
        Implemented via the EventQueue class added by r74062 (EventQueue now
        has a convenience enqueueScrollEvent method).

        * dom/EventQueue.cpp:
        (WebCore::EventQueue::enqueueScrollEvent):
        (WebCore::EventQueue::pendingEventTimerFired):
        * dom/EventQueue.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendScrollEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::valueChanged):

2011-01-11  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r75523.

        * platform/wince/DragDataWinCE.cpp: Added missing include.

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

        Reviewed by Dimitri Glazkov.

        RefPtr the FrameView to prevent scrollbar from getting deleted inside
        its scroll event.
        https://bugs.webkit.org/show_bug.cgi?id=52238

        Test: scrollbars/scrollable-iframe-remove-crash.html

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

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

        Reviewed by David Hyatt.

        Make pseudo-style resolution less hard-coded when used to select a shadow node
        https://bugs.webkit.org/show_bug.cgi?id=46595

        Essentially implements the plumbing for the XBL2 pseudo attribute:
        http://dev.w3.org/2006/xbl2/#the-pseudo-attribute

        Test: fast/css/unknown-pseudo-element-matching.html

        * css/CSSGrammar.y: Changed to handle specifier_list structure with the
            CSSParser::updateSpecifierWithElementName helper, added logic to
            keep unknown pseudo-element selectors at the top of the selector chain,
            so that we can easily check for them and grab them, and also because
            they would either not match anything or act as a descendant selector
            (descendant into a shadow DOM subtree that is), not a specifier.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::updateSpecifiersWithElementName): Generalized/combined
            the logic adding element name to selectors and added the special case
            to handle unknown pseudo-element selectors.
        * css/CSSParser.h: Added def.
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId): Removed any mention of PseudoSliderThumb/SLIDER_THUMB.
        (WebCore::nameToPseudoTypeMap): Ditto.
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h: Added a new ShadowDescendant relation type,
            removed PseudoSliderThumb def.
        (WebCore::CSSSelector::isUnknownPseudoElement): Added a helper method.
        * css/CSSSelectorList.cpp:
        (WebCore::SelectorHasUnknownPseudoElementFunctor::operator()): Added a functor
            to check for an unknown pseudo-element in the list.
        (WebCore::CSSSelectorList::hasUnknownPseudoElements): Added.
        * css/CSSSelectorList.h: Added a def.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::getPseudoRules): Added accessor to pseudo-element hash.
        (WebCore::CSSStyleSelector::matchRules): Added matching pseudo elements.
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector): Added handling
            of ShadowDescendant relation.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Enabled handling
            of unknown pseudo-element selectors.
        (WebCore::CSSRuleSet::addRule): Added populating unknown pseudo-element hash.
        * css/html.css:
        (input[type="range"]::-webkit-slider-thumb): Added previously-hard-coded
            display:block.
        * dom/Element.h:
        (WebCore::Element::shadowPseudoId): Added new virtual method to allow
            elements to provide the value of pseudo-element selector they would match.
        * dom/Node.cpp:
        (WebCore::Node::querySelector): Added checking for unknown pseudo-element selectors,
            so that we can throw a SYNTAX_ERR if found.
        (WebCore::Node::querySelectorAll): Ditto.
        * html/shadow/SliderThumbElement.h:
        (WebCore::SliderThumbElement::shadowPseudoId): Added to return "-webkit-slider-thumb";
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::createThumbStyle): Changed to use the new styleForElement logic.
        * rendering/style/RenderStyleConstants.h: Removed SLIDER_THUMB.

2011-01-11  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

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

        WebKitCSSMatrix constructor should accept 'none'
        as a valid string parameter.

        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):

2011-01-11  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        Set all RenderBlocks as replaced when an inline display type is specified
        https://bugs.webkit.org/show_bug.cgi?id=50858

        When a RenderBlock is created for an element with a specified display:inline style,
        it should always be treated as inline-block.  This situations often comes up for form
        controls.  Previously, RenderBlock::styleWillChange set the replaced flag for display
        values of inline-block, inline-table, and inline-table and a number of subclasses of
        RenderBlock set the replaced flag in styleDidChange for a display:inline.  However
        sometimes new subclasses would miss this step leading to bugs (such as with RenderDetails).
        This patch sets the replaced flag for all inline display types in RenderBlock::styleWillChange.

        Code cleanup only, no change in behavior so no new tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleWillChange):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::styleDidChange):
        * rendering/RenderFieldset.cpp:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::styleDidChange):
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::styleDidChange):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::styleDidChange):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):

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

        Reviewed by Eric Seidel.

        REGRESSION(r71934) Can't type in search edit field on skin-one.com
        https://bugs.webkit.org/show_bug.cgi?id=52195

        Restored the original behavior, where the selectstart event is not
        dispatched when selection changes inside of the shadow DOM.

        * dom/Node.cpp:
        (WebCore::determineDispatchBehavior): Moved EventDispatchBehavior-determining
            logic into a helper function, also added a check to keep selectstart
                events inside of the shadow DOM.
        (WebCore::Node::dispatchGenericEvent): Changed to use the helper function.

2011-01-11  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Provide plugin coordinates to windowless plugins on Symbian.
        https://bugs.webkit.org/show_bug.cgi?id=52213

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):

2011-01-10  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Need to consider UNPACK_ALIGNMENT in GraphicsContext3D::texImage2DResourceSafe
        https://bugs.webkit.org/show_bug.cgi?id=52068

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D): Use computeImageSizeInBytes.
        (WebCore::WebGLRenderingContext::copyTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::readPixels): Ditto, and fix a bug on generating the wrong error.
        (WebCore::WebGLRenderingContext::texImage2DBase): Ditto.
        (WebCore::WebGLRenderingContext::validateTexFuncData): Use computeImageSizeInBytes.
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::texImage2DResourceSafe): Add a new parameter alignment.
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters): Add more supported format/type.
        (WebCore::GraphicsContext3D::computeImageSizeInBytes): Added.
        * platform/graphics/GraphicsContext3D.h:

2011-01-10  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Paste and drag and drop use different code paths to interact with the pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=52093
        The change consists in a refactoring of the code to have only one class that
        deals with the pasteboard on Mac.

        No new tests. A test is already available for this
        (editing/pasteboard/drag-image-to-contenteditable-in-iframe.html) but had incorrect results.

        * WebCore.exp.in:
        * loader/EmptyClients.h: Added two Mac only methods to call into WebKit to use functionality
        that is in NSURLExtras.
        (WebCore::EmptyEditorClient::canonicalizeURL):
        (WebCore::EmptyEditorClient::canonicalizeURLString):
        * page/DragController.cpp:
        The following methods have been changed to pass a pointer to the Frame object
        to the DragData class.
        (WebCore::documentFragmentFromDragData):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::dispatchTextInputEventFor):
        (WebCore::DragController::concludeEditDrag):
        * page/EditorClient.h: Added two Mac only methods to call into WebKit to use functionality
        that is in NSURLExtras.
        The following files have been modified to pass the Frame object to the DragData method calls.
        * page/chromium/DragControllerChromium.cpp:
        (WebCore::DragController::dragOperation):
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::dragOperation):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):
        * page/qt/DragControllerQt.cpp:
        (WebCore::DragController::dragOperation):
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::dragOperation):
        * platform/DragData.h: Removed Mac specific constructor and reference to PasteboardHelper class.
        * platform/Pasteboard.h: Added public constructor to create a Pasteboard object from an NSPasteboard.
        The following files were all modified to match the new parameters of the methods listed.
        * platform/android/DragDataAndroid.cpp:
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::asFragment):
        * platform/gtk/DragDataGtk.cpp:
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/haiku/DragDataHaiku.cpp:
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::DragData):
        (WebCore::DragData::asPlainText):
        (WebCore::insertablePasteboardTypes):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::getBestURL):
        (WebCore::Pasteboard::asURL):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::asFragment):
        * platform/wince/DragDataWinCE.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asFragment):
        * platform/wx/DragDataWx.cpp:
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):

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

        Reviewed by Dimitri Glazkov.

        RefPtr text node in setOuterText since calling appendData
        on a text node can fire away dom event listener which might
        remove the text node from underneath.
        https://bugs.webkit.org/show_bug.cgi?id=52163

        Test: fast/dom/text-node-append-data-remove-crash.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setOuterText):

2011-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add support for <meter> element
        https://bugs.webkit.org/show_bug.cgi?id=48713

        * GNUmakefile.am: Enable meter element.

2011-01-11  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix.

        [Qt][V8] Add missing include for debug build.

        * loader/cache/CachedResourceLoader.cpp:

2011-01-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: redirects are lost from the network panel upon navigation.
        https://bugs.webkit.org/show_bug.cgi?id=52210

        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.didCommitLoadForFrame):

2011-01-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove uses of QFuture since it isn't supported on all platforms.
        https://bugs.webkit.org/show_bug.cgi?id=51204

        * platform/network/qt/QtNAMThreadSafeProxy.cpp:
        (WebCore::QtNAMThreadSafeProxy::QtNAMThreadSafeProxy):
        (WebCore::QtNAMThreadSafeProxy::localCookiesForUrl):
        (WebCore::QtNAMThreadSafeProxy::localWillLoadFromCache):
        * platform/network/qt/QtNAMThreadSafeProxy.h:
        (WebCore::QtNAMThreadSafeProxy::cookiesForUrl):
        (WebCore::QtNAMThreadSafeProxy::willLoadFromCache):

2011-01-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: recreate script view after live edit.
        https://bugs.webkit.org/show_bug.cgi?id=51751

        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.set source):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.editScriptSource.mycallback):
        (WebInspector.ScriptsPanel.prototype.editScriptSource):
        (WebInspector.ScriptsPanel.prototype.viewRecreated):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._doEditLine):

2011-01-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: frameDetachedFromParent notification handler is missing in NetworkManager.
        https://bugs.webkit.org/show_bug.cgi?id=52205

        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype.frameDetachedFromParent):

2011-01-11  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: "Audit present state" always disabled
        https://bugs.webkit.org/show_bug.cgi?id=52199

        Removed all traces of resource tracking checks, as we have it no more.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        * inspector/front-end/AuditsPanel.js:

2011-01-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move delayed search implementation to SourceFrame.
        https://bugs.webkit.org/show_bug.cgi?id=51753

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        (WebInspector.SourceFrame.prototype.findSearchMatches):
        (WebInspector.SourceFrame.prototype.cancelFindSearchMatches):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.hide):
        (WebInspector.SourceView.prototype.searchCanceled):
        (WebInspector.SourceView.prototype.performSearch.didFindSearchMatches):
        (WebInspector.SourceView.prototype.performSearch):

2011-01-11  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: innerFirstChild has a side effect which should be called explicitly.

        If a node is a frame's owner then innerFirstChild method
        subscribes DOMAgent instance to the frame's doc's events.
        I think this should be done explicitly when we meet with
        the node for the first time. As I understand it happens
        in buildArrayForContainerChildren method.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::startListeningFrameDoc):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::innerFirstChild):
        * inspector/InspectorDOMAgent.h:

2011-01-11  Adam Roben  <aroben@apple.com>

        Delete WKCACFLayer.{cpp,h}

        These have been unused since r75262

        * platform/graphics/win/WKCACFLayer.cpp: Removed.
        * platform/graphics/win/WKCACFLayer.h: Removed.

2011-01-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [regression] Cookies view does not allow columns resize.
        https://bugs.webkit.org/show_bug.cgi?id=51877

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._updateWithCookies):

2011-01-11  Noel Gordon  <noel.gordon@gmail.com>

         Reviewed by James Robinson.

         [chromium] canvas.toDataURL("image/jpeg") should composite onto black.
         https://bugs.webkit.org/show_bug.cgi?id=51237

         The Canvas specification requires that the canvas image is composited using
         the Porter-Duff operator source-over onto a black background; the resultant
         image should be JPEG encoded and returned as a dataURL.  To composite image
         A and background B, for any Porter-Duff operator, produce pixels I with

            I = c(A)F(A) + c(B)F(B)

         where, F(X) is the fraction [0.0-1.0] contributed to the composite by image
         X, and c(X) are the premultiplied RGB color components of image X.  Note by
         definition, c(B) = 0 since the background is black, so I = c(A)F(A).  Since
         F(A) = 1 in Porter-Duff operator source-over, the composited pixels satisfy
         I = c(A).  Hence, to conform to the Canvas spec, pass the premultiplied RGB
         color components of the canvas image to the JPEG encoder.

         Covered by canvas/philip/tests/toDataURL.jpeg.alpha.html

         * platform/image-encoders/skia/JPEGImageEncoder.cpp:
         (WebCore::preMultipliedBGRAtoRGB): Use Porter-Duff source-over black.

2011-01-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: get rid of APU-related code in WebKit/chromium.
        https://bugs.webkit.org/show_bug.cgi?id=52152

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        (WebCore::InspectorController::setInjectedScriptSource):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:
        * inspector/front-end/inspector.js:

2011-01-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [REGRESSION] Load timing is requested
        for all resources (not only for the main one).
        https://bugs.webkit.org/show_bug.cgi?id=51749

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):

2011-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] GRefPtr should not be used with Gtk widgets
        https://bugs.webkit.org/show_bug.cgi?id=51241

        GRefPtr breaks the widget life-cycle, the main problem is
        that GRefPtr calls g_object_unref() when it's destroyed,
        which is undesirable for widgets. In gtk+ widgets are created with
        a floating reference and when added to a container, the container
        takes the ownership of the widget consuming the floating
        reference. So you don't usually need to call g_object_ref/unref on
        widgets (only for some operations like reparent a widget) and
        toplevel widgets are destroyed with gtk_widget_destroy().

        * platform/ContextMenuItem.h:
        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::setPlatformDescription):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):

2010-10-10  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=51119, transformed 
        elements not responding properly to :hover after r73385.  
        Just use the entire document area as the hit test area, 
        since there appears to be a rounding bug/issues with relying 
        on float math when mapping the hit test area into
        transformed coordinates.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):

2011-01-10  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.

        Fix canvas->canvas draws on the GPU path.
        https://bugs.webkit.org/show_bug.cgi?id=52141
        
        Two problems:  according to the canvas spec, both source and
        destination rects can have negative width or height, but this shouldn't
        cause the image to be flipped.  So we need to normalize the rects (in
        the software path, this is done by BitmapImage*::draw).  Secondly, in
        the FBO->FBO path, the image needs to be flipped vertically, since it
        is drawn upside down.  We were doing this by flipping the destination
        rect, but this doesn't work if the source rect is not the entire image,
        since we extract the wrong part of the image.  Fixed by flipping the
        source rect instead (and flipping it within the image buffer's height,
        not the source rect's height).

        Covered by fast/canvas/drawImage-with-negative-source-destination.html.


        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        Put normalizeRect() in global scope.
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):
        Fix as above:  normalize both source and dest rects, and flip the
        source rect instead of the dest rect.
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::normalizeRect):
        Put normalizeRect() in global scope.

2011-01-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] Baseline qt_minimal configuration
        https://bugs.webkit.org/show_bug.cgi?id=51313

        No new tests as there is no new functionality.

        * platform/graphics/qt/GraphicsLayerQt.cpp: Fix the location of the
        QT_NO_ANIMATION guard.

        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::applyDelta): Fix the location of the
        QT_NO_WHEELEVENT guard.

2011-01-10  Joe Mason  <jmason@rim.com>

        Reviewed by Alexey Proskuryakov.

        WebSockets: unbounded buffer growth when server sends bad data
        https://bugs.webkit.org/show_bug.cgi?id=51253

        Fail a websocket handshake after 1024 bytes without a newline, or if it
        contains a null byte before the first newline.

        Tests: http/tests/websocket/tests/handshake-fail-by-maxlength.html
               http/tests/websocket/tests/handshake-fail-by-prepended-null.html

        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readStatusLine):

2011-01-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Introduce the notion of a "display-isolated" URL scheme for use by
        Chrome-internal URLs
        https://bugs.webkit.org/show_bug.cgi?id=50182

        This patch adds the basic plumbing for display-isolated URL schemes.
        Originally, this patch also had the functional change, but I've split
        that off into a separate patch because the original patch caused a
        performance regression.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay):
        * platform/SchemeRegistry.cpp:
        (WebCore::displayIsolatedURLSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeAsLocal):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::SchemeRegistry::localSchemes):
        (WebCore::SchemeRegistry::deprecatedShouldTreatURLAsLocal):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal):
        (WebCore::SchemeRegistry::registerURLSchemeAsDisplayIsolated):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated):
        * platform/SchemeRegistry.h:

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

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=52095
        REGRESSION (r75277): 2 test cases (<1%) had incorrect layout
        
        Fixes tests:
            fullscreen/full-screen-remove-ancestor.html
            fullscreen/full-screen-remove.html
            
        Previously, the above tests were failing because DRT dumped the contents of their
        <script> tags, though all the explicit tests were passing.  This was caused by
        the document's render tree being left in an inconsistent state when a full screen
        element's ancestor was removed from the DOM.
        
        In nodeWillBeRemoved(), match the code in webkitDidExitFullScreen().
        Don't detach the documentElement, but rather simply call recalcStyle(Force).

        * dom/Document.cpp:
        (WebCore::Document::nodeWillBeRemoved):
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::setAnimating): #if ENABLED -> # if USE
        * rendering/RenderFullScreen.h:
        (WebCore::RenderFullScreen::RenderFullScreen): RenderFullScreen should be an anonymous renderer.

2011-01-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Remove use of deprecated GTK+ methods before the 1.3.10 release
        https://bugs.webkit.org/show_bug.cgi?id=52173

        No new tests. This is only a build fix.

        * platform/gtk/GRefPtrGtk.cpp: Guard the GdkCursor specialization against GTK+ 3.x.
        In GTK+ 3.x, GdkCursor is just a GObject.
        * platform/gtk/GRefPtrGtk.h: Ditto.

2011-01-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Moved Collector.* => Heap.*, since the file contains a class named "Heap".

        * ForwardingHeaders/runtime/Collector.h: Removed.
        * ForwardingHeaders/runtime/Heap.h: Copied from WebCore/ForwardingHeaders/runtime/Collector.h.
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/GCController.cpp:
        * bindings/js/ScriptGCEvent.cpp:

2011-01-10  Leonid Ebril  <leonid.ebril@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

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

        Set the PluginQuirkDontSetNullWindowHandleOnDestroy for Adobe Lite  
        plugin if Flash 10 or newer (for Symbian platform), setting a nulled 
        window handler on destroy crashes WebKit.

        * plugins/symbian/PluginPackageSymbian.cpp:
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::determineQuirks):

2011-01-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Remove unecessary RenderThemeGtk and WidgetRenderingContext code
        https://bugs.webkit.org/show_bug.cgi?id=52170

        Remove unnecessary code from RenderThemeGtk3 and RenderThemeGtk now that the
        GtkStyleContext port is complete. Also remove WidgetRenderingContextGtk3 and
        move WidgetRenderingRenderingContextGtk2 to WidgetRenderingContext and make it
        GTK+ 2.x only. Some methods have been moved to RenderThemeGtk2 since they are
        GTK+ 2.x only now.

        No new tests. This should not change functionality.

        * GNUmakefile.am: Remove WidgetRenderingContextGtk3 and gtk3drawing.c
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::gtkIconState): Made this method static. It isn't used outside RenderThemeGtk.
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration): Updated to refelct gtkIconState change.
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton): Ditto.
        (WebCore::RenderThemeGtk::paintMediaButton): Ditto
        * platform/gtk/RenderThemeGtk.h: Move a few methods which are now GTK+ 2.x only.
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::platformInit): Added this platform initialization method
        that is only used for GTK+ 2.x at the moment.
        (WebCore::RenderThemeGtk::~RenderThemeGtk): Added.
        (WebCore::getGtkStateType): Made this method static.
        (WebCore::RenderThemeGtk::getIndicatorMetrics): Moved this here from RenderThemeGtk.
        (WebCore::setToggleSize): Updated to reflect changes to getGtkStateType.
        (WebCore::RenderThemeGtk::paintButton): Ditto.
        (WebCore::RenderThemeGtk::paintSliderTrack): Ditto.
        (WebCore::RenderThemeGtk::paintSliderThumb): Ditto.
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::gtkScrollbarStyle): Moved to the top of the file.
        (WebCore::RenderThemeGtk::platformInit): Added.
        (WebCore::RenderThemeGtk::~RenderThemeGtk): Added.
        (WebCore::RenderThemeGtk::initMediaColors): Changed to use the GtkStyleContext API to
        fetch these colors. This was the last dependency on the old API.
        * platform/gtk/WidgetRenderingContext.cpp: Renamed from Source/WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp.
        * platform/gtk/WidgetRenderingContext.h: Made GTK+ 2.x only.
        * platform/gtk/WidgetRenderingContextGtk3.cpp: Removed.
        * platform/gtk/gtk3drawing.c: Removed.
        * platform/gtk/gtkdrawing.h: Made GTK+ 2.x only.

2011-01-10  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Navigator.cookiesEnabled return true for Qt even if there is no cookie jar
        https://bugs.webkit.org/show_bug.cgi?id=52081

        Test for the availability of cookie jar to return if cookies are enabled or not.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookiesEnabled):

2011-01-10  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Enable reuse of RenderSurface for drawing.
        https://bugs.webkit.org/show_bug.cgi?id=51928

        Modifies RenderSurfaceChromium::prepareContentsTexture to avoid trying to 'reserve' a texture
        that is already reserved, should an attempt be made to re-select a previously drawn render surface
        in order to continue drawing to it. This use case appears when compositing into an offscreen texture.

        Covered by existing test (compositing/geometry/fixed-position.html) when offscreen compositing enabled.

        * platform/graphics/chromium/LayerTexture.h:
        (WebCore::LayerTexture::isReserved):
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::prepareContentsTexture):
        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::isProtected):
        * platform/graphics/chromium/TextureManager.h:

2011-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Port combo box painting to GtkStyleContext
        https://bugs.webkit.org/show_bug.cgi?id=51828

        Use GtkStyleContext API to paint combo boxes when building with
        GTK+ 3.x. Method paintButton() has been factored out and the new
        static method renderButton() is used by both paintButton() and
        paintMenuList().

        No new tests. This should not change functionality.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::adjustRepaintRect):
        (WebCore::renderButton):
        (WebCore::RenderThemeGtk::paintButton):
        (WebCore::getComboBoxMetrics):
        (WebCore::RenderThemeGtk::popupInternalPaddingLeft):
        (WebCore::RenderThemeGtk::popupInternalPaddingRight):
        (WebCore::RenderThemeGtk::popupInternalPaddingTop):
        (WebCore::RenderThemeGtk::popupInternalPaddingBottom):
        (WebCore::RenderThemeGtk::paintMenuList):

2011-01-10  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] simplify complex glyph positioning code
        https://bugs.webkit.org/show_bug.cgi?id=52159

        Before, we had roughly same code duplicated for RTL and LTR.
        Now, use the same code for both directions by being careful about
        flipping signs where appropriate.

        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
        (WebCore::ComplexTextController::shapeGlyphs):
        (WebCore::ComplexTextController::setGlyphXPositions):

2011-01-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix gtk2 compilation for master
        https://bugs.webkit.org/show_bug.cgi?id=51885

        * platform/gtk/GtkVersioning.h: Replaced the 2.24.0 check with
        2.23.0 to avoid using the old symbols in the 2.23 releases. Added
        support for gdk_pixmap_get_size before the 2.23.4.
        * platform/gtk/WidgetRenderingContextGtk2.cpp:
        (WebCore::WidgetRenderingContext::WidgetRenderingContext):
        Replaced the old gdk_drawable_get_size with gdk_pixmap_get_size.

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

        Unreviewed; build fix for r75385.

        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):

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

        Unreviewed, rolling out r75341.
        http://trac.webkit.org/changeset/75341
        https://bugs.webkit.org/show_bug.cgi?id=52157

        Regressions on several pixel tests (Requested by jorlow on
        #webkit).

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

2011-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Port check and radio button painting to GtkStyleContext
        https://bugs.webkit.org/show_bug.cgi?id=51815

        Use GtkStyleContext API to paint check and radio buttons when
        building with GTK+ 3.x.

        No new tests. This should not change functionality.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::adjustRepaintRect):
        (WebCore::setToggleSize):
        (WebCore::paintToggle):
        (WebCore::RenderThemeGtk::setCheckboxSize):
        (WebCore::RenderThemeGtk::paintCheckbox):
        (WebCore::RenderThemeGtk::setRadioSize):
        (WebCore::RenderThemeGtk::paintRadio):

2011-01-10  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        MathML: vertical alignment & bar thickness adjustments of fractions.
        https://bugs.webkit.org/show_bug.cgi?id=50018

        The fraction bar thickness default value should follow the w3c MathML 3 recommendation:
        http://www.w3.org/TR/MathML3/chapter3.html#presm.mfrac
        The vertical alignment of the fraction bar should be more accurate, specially with operators (+,=,...).

        Test: mathml/presentation/fractions.xhtml

        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::RenderMathMLFraction):
        (WebCore::RenderMathMLFraction::updateFromElement):
        (WebCore::RenderMathMLFraction::layout):
        (WebCore::RenderMathMLFraction::paint):
        (WebCore::RenderMathMLFraction::baselinePosition):
        * rendering/mathml/RenderMathMLFraction.h:

2011-01-10  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=52044
        REGRESSION(r74807): No-store is ignored within a document
        
        Don't use cached resources with Cache-control: no-store (unless cache policy is CachePolicyHistoryBuffer).
        This matches a behavior that got lost in r74807.

        Test: http/tests/misc/script-no-store.html
        (by Alexey Proskuryakov)

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):

2011-01-10  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Laszlo Gombos.

        [WIN] Add ProxyServerWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=52031

        Add stub implementation to fix ENABLE_NETSCAPE_PLUGIN_API on WinCE.

        * CMakeLists.txt:
        * CMakeListsWinCE.txt:
        * platform/network/win/ProxyServerWin.cpp: Added.
        (WebCore::proxyServersForURL):

2011-01-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [cairo] Rendering a lot of arcs on top of each other causes time
        outs in some tests
        https://bugs.webkit.org/show_bug.cgi?id=50869

        We avoid the situation where we have to render the same arc
        multiple times over itself. Now it renders just one oval and
        moves to the end angle.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addArc):

2011-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Port text input control painting to GtkStyleContext
        https://bugs.webkit.org/show_bug.cgi?id=51870

        Use GtkStyleContext API to paint text input controls when building
        with GTK+ 3.x.

        No new tests. This should not change functionality.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::adjustRepaintRect):
        (WebCore::RenderThemeGtk::paintTextField):

2011-01-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Forward declare some headers where possible
        https://bugs.webkit.org/show_bug.cgi?id=52133

        No new tests because no new functionality.

        * css/CSSValue.h:
        * dom/BeforeLoadEvent.h:
        * dom/Event.cpp:
        * dom/Event.h:
        * dom/StyledElement.cpp:
        * dom/StyledElement.h:
        * loader/DocumentLoader.h:
        * loader/FrameLoader.h:
        * page/Frame.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/filters/FEBlend.cpp:
        * platform/graphics/filters/FEColorMatrix.cpp:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        * platform/graphics/filters/FEComposite.cpp:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        * platform/graphics/filters/FEFlood.cpp:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        * platform/graphics/filters/FEMerge.cpp:
        * platform/graphics/filters/FEMorphology.cpp:
        * platform/graphics/filters/FEOffset.cpp:
        * platform/graphics/filters/FESpecularLighting.cpp:
        * platform/graphics/filters/FETile.cpp:
        * platform/graphics/filters/FETurbulence.cpp:
        * platform/graphics/filters/FilterEffect.cpp:
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        * platform/graphics/filters/SourceGraphic.cpp:
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFEConvolveMatrixElement.cpp:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMorphologyElement.cpp:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGTextContentElement.cpp:
        * svg/graphics/filters/SVGFEImage.cpp:
        * svg/graphics/filters/SVGFEImage.h:

2011-01-10  Adam Roben  <aroben@apple.com>

        Windows build fix after r75313

        * WebCore.vcproj/build-generated-files.sh: Updated for the change in
        this script's path.

2011-01-10  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: make properties on Array's prototype non-enumerable.
        https://bugs.webkit.org/show_bug.cgi?id=51776

        * inspector/front-end/utilities.js:
        ():

2011-01-10  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Fraser.

        Specificity of negated selectors apparently miscalculated
        https://bugs.webkit.org/show_bug.cgi?id=41206

        Give negated selectors the specificity of the selector they are negating.
        This is the same as the behavior of other browsers.

        Test: fast/css/pseudo-not.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificityForOneSelector):

2011-01-10  Adam Roben  <aroben@apple.com>

        Windows build fix after r75353

        * WebCore.vcproj/WebCoreCommon.vsprops: Added rendering/mathml to the
        include path.

2011-01-10  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Jeremy Orlow.

        [Chromium] Remove non-client-based Geolocation code
        https://bugs.webkit.org/show_bug.cgi?id=50921

        Code clean up, covered by existing tests.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/GeolocationServiceChromium.cpp: Removed.
        * platform/chromium/GeolocationServiceChromium.h: Removed.

2011-01-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: protocol related change. Rename stepIntoStatement, stepOutOfFunction, stepOverStatement.
        stepIntoStatement => stepInto
        stepOutOfFunction => stepOut
        stepOverStatement => stepOver

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

        * inspector/Inspector.idl:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::stepOver):
        (WebCore::InspectorDebuggerAgent::stepInto):
        (WebCore::InspectorDebuggerAgent::stepOut):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._stepOverClicked):
        (WebInspector.ScriptsPanel.prototype._stepIntoClicked):
        (WebInspector.ScriptsPanel.prototype._stepOutClicked):

2011-01-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Port progressbar painting to GtkStyleContext
        https://bugs.webkit.org/show_bug.cgi?id=52054

        Use GtkStyleContext API to paint progressbars when building with
        GTK+ 3.x. Also add support for indeterminate progressbars.

        No new tests. This should not change functionality.

        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeGtk::animationDurationForProgressBar):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeGtk::animationDurationForProgressBar):
        (WebCore::RenderThemeGtk::paintProgressBar):

2011-01-10  Andreas Kling  <kling@webkit.org>

        Reviewed by Darin Adler.

        Remove unused class "Pen" in WebCore/platform/graphics
        https://bugs.webkit.org/show_bug.cgi?id=49955

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Pen.cpp: Removed.
        * platform/graphics/Pen.h: Removed.
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        * platform/graphics/wx/GraphicsContextWx.cpp:
        * platform/graphics/wx/PenWx.cpp: Removed.

2011-01-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Create intermediate libWebCore library
        https://bugs.webkit.org/show_bug.cgi?id=52116

        Create intermediate libWebCore.la to avoid overflowing the linker
        in the final link stage.

        * GNUmakefile.am: define the new library.

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

        Unreviewed, rolling out r75337.
        http://trac.webkit.org/changeset/75337
        https://bugs.webkit.org/show_bug.cgi?id=52137

        It made fast/dom/navigator-detached-no-crash.html crash
        (Requested by Ossy on #webkit).

        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookiesEnabled):

2011-01-09  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * WebCore.xcodeproj/project.pbxproj: Copy SVGResourcesCache.h in to PrivateHeaders
        once more.

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

        Reviewed by Sam Weinig.

        <rdar://problem/8765555> WebKit2: Search field focus ring is missing

        Provide a focus ring visible rect to AppKit.

        * platform/mac/ThemeMac.mm:
        (-[WebCoreFlippedView _focusRingVisibleRect]):
        (-[WebCoreFlippedView _focusRingClipAncestor]):

2011-01-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Rob Buis.

        Move MathML renderer to rendering/mathml
        https://bugs.webkit.org/show_bug.cgi?id=52131

        Move all renderer of MathML to WebCore/rendering/mathml

        No change of functionality, no new tests added.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * mathml/RenderMathMLBlock.cpp: Removed.
        * mathml/RenderMathMLBlock.h: Removed.
        * mathml/RenderMathMLFenced.cpp: Removed.
        * mathml/RenderMathMLFenced.h: Removed.
        * mathml/RenderMathMLFraction.cpp: Removed.
        * mathml/RenderMathMLFraction.h: Removed.
        * mathml/RenderMathMLMath.cpp: Removed.
        * mathml/RenderMathMLMath.h: Removed.
        * mathml/RenderMathMLOperator.cpp: Removed.
        * mathml/RenderMathMLOperator.h: Removed.
        * mathml/RenderMathMLRoot.cpp: Removed.
        * mathml/RenderMathMLRoot.h: Removed.
        * mathml/RenderMathMLRow.cpp: Removed.
        * mathml/RenderMathMLRow.h: Removed.
        * mathml/RenderMathMLSquareRoot.cpp: Removed.
        * mathml/RenderMathMLSquareRoot.h: Removed.
        * mathml/RenderMathMLSubSup.cpp: Removed.
        * mathml/RenderMathMLSubSup.h: Removed.
        * mathml/RenderMathMLUnderOver.cpp: Removed.
        * mathml/RenderMathMLUnderOver.h: Removed.
        * rendering/mathml: Added.
        * rendering/mathml/RenderMathMLBlock.cpp: Copied from Source/WebCore/mathml/RenderMathMLBlock.cpp.
        * rendering/mathml/RenderMathMLBlock.h: Copied from Source/WebCore/mathml/RenderMathMLBlock.h.
        * rendering/mathml/RenderMathMLFenced.cpp: Copied from Source/WebCore/mathml/RenderMathMLFenced.cpp.
        * rendering/mathml/RenderMathMLFenced.h: Copied from Source/WebCore/mathml/RenderMathMLFenced.h.
        * rendering/mathml/RenderMathMLFraction.cpp: Copied from Source/WebCore/mathml/RenderMathMLFraction.cpp.
        * rendering/mathml/RenderMathMLFraction.h: Copied from Source/WebCore/mathml/RenderMathMLFraction.h.
        * rendering/mathml/RenderMathMLMath.cpp: Copied from Source/WebCore/mathml/RenderMathMLMath.cpp.
        * rendering/mathml/RenderMathMLMath.h: Copied from Source/WebCore/mathml/RenderMathMLMath.h.
        * rendering/mathml/RenderMathMLOperator.cpp: Copied from Source/WebCore/mathml/RenderMathMLOperator.cpp.
        * rendering/mathml/RenderMathMLOperator.h: Copied from Source/WebCore/mathml/RenderMathMLOperator.h.
        * rendering/mathml/RenderMathMLRoot.cpp: Copied from Source/WebCore/mathml/RenderMathMLRoot.cpp.
        * rendering/mathml/RenderMathMLRoot.h: Copied from Source/WebCore/mathml/RenderMathMLRoot.h.
        * rendering/mathml/RenderMathMLRow.cpp: Copied from Source/WebCore/mathml/RenderMathMLRow.cpp.
        * rendering/mathml/RenderMathMLRow.h: Copied from Source/WebCore/mathml/RenderMathMLRow.h.
        * rendering/mathml/RenderMathMLSquareRoot.cpp: Copied from Source/WebCore/mathml/RenderMathMLSquareRoot.cpp.
        * rendering/mathml/RenderMathMLSquareRoot.h: Copied from Source/WebCore/mathml/RenderMathMLSquareRoot.h.
        * rendering/mathml/RenderMathMLSubSup.cpp: Copied from Source/WebCore/mathml/RenderMathMLSubSup.cpp.
        * rendering/mathml/RenderMathMLSubSup.h: Copied from Source/WebCore/mathml/RenderMathMLSubSup.h.
        * rendering/mathml/RenderMathMLUnderOver.cpp: Copied from Source/WebCore/mathml/RenderMathMLUnderOver.cpp.
        * rendering/mathml/RenderMathMLUnderOver.h: Copied from Source/WebCore/mathml/RenderMathMLUnderOver.h.

2011-01-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Alexey Proskuryakov.

        HTMLStyleElement.disabled doesn't work (affects jQuery)
        https://bugs.webkit.org/show_bug.cgi?id=25287
        
        Fix the disabled property of a HTMLStyleElement to reflect,
        and set the disabled state of its style sheet, as required
        by DOM1 etc.

        Based on initial patch by Tarun Nainani.

        Test: fast/html/disable-style-element.html

        * dom/StyleElement.h:
        (WebCore::StyleElement::sheet): Make const.
        
        * html/HTMLStyleElement.h:
        * html/HTMLStyleElement.idl:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::disabled): 
        (WebCore::HTMLStyleElement::setDisabled): Getter and setter for disabled
        call through to the sheet (if any).

2011-01-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Rename RenderForeignObject to RenderSVGForeignObject
        https://bugs.webkit.org/show_bug.cgi?id=52129

        Rename RenderForeignObject to RenderSVGForeignObject to match the naming schema in render/svg.

        No change of functionality, no new tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderingAllInOne.cpp:
        * rendering/svg/RenderForeignObject.cpp: Removed.
        * rendering/svg/RenderForeignObject.h: Removed.
        * rendering/svg/RenderSVGAllInOne.cpp:
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::updateBoxModelInfoFromStyle):
        * rendering/svg/RenderSVGForeignObject.cpp: Copied from Source/WebCore/rendering/svg/RenderForeignObject.cpp.
        (WebCore::RenderSVGForeignObject::RenderSVGForeignObject):
        (WebCore::RenderSVGForeignObject::~RenderSVGForeignObject):
        (WebCore::RenderSVGForeignObject::paint):
        (WebCore::RenderSVGForeignObject::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGForeignObject::computeRectForRepaint):
        (WebCore::RenderSVGForeignObject::localToParentTransform):
        (WebCore::RenderSVGForeignObject::computeLogicalWidth):
        (WebCore::RenderSVGForeignObject::computeLogicalHeight):
        (WebCore::RenderSVGForeignObject::layout):
        (WebCore::RenderSVGForeignObject::nodeAtFloatPoint):
        (WebCore::RenderSVGForeignObject::nodeAtPoint):
        (WebCore::RenderSVGForeignObject::mapLocalToContainer):
        * rendering/svg/RenderSVGForeignObject.h: Copied from Source/WebCore/rendering/svg/RenderForeignObject.h.
        (WebCore::RenderSVGForeignObject::renderName):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::createRenderer):

2011-01-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Move all SVG renderer to WebCore/rendering/svg
        https://bugs.webkit.org/show_bug.cgi?id=52087

        No change of functionality. Just moved all SVG renderer to WebCore/rendering/svg.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vjproj/project.vjproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderForeignObject.cpp: Removed.
        * rendering/RenderForeignObject.h: Removed.
        * rendering/RenderSVGAllInOne.cpp: Removed.
        * rendering/RenderSVGBlock.cpp: Removed.
        * rendering/RenderSVGBlock.h: Removed.
        * rendering/RenderSVGContainer.cpp: Removed.
        * rendering/RenderSVGContainer.h: Removed.
        * rendering/RenderSVGGradientStop.cpp: Removed.
        * rendering/RenderSVGGradientStop.h: Removed.
        * rendering/RenderSVGHiddenContainer.cpp: Removed.
        * rendering/RenderSVGHiddenContainer.h: Removed.
        * rendering/RenderSVGImage.cpp: Removed.
        * rendering/RenderSVGImage.h: Removed.
        * rendering/RenderSVGModelObject.cpp: Removed.
        * rendering/RenderSVGModelObject.h: Removed.
        * rendering/RenderSVGResource.cpp: Removed.
        * rendering/RenderSVGResource.h: Removed.
        * rendering/RenderSVGResourceClipper.cpp: Removed.
        * rendering/RenderSVGResourceClipper.h: Removed.
        * rendering/RenderSVGResourceContainer.cpp: Removed.
        * rendering/RenderSVGResourceContainer.h: Removed.
        * rendering/RenderSVGResourceFilter.cpp: Removed.
        * rendering/RenderSVGResourceFilter.h: Removed.
        * rendering/RenderSVGResourceFilterPrimitive.cpp: Removed.
        * rendering/RenderSVGResourceFilterPrimitive.h: Removed.
        * rendering/RenderSVGResourceGradient.cpp: Removed.
        * rendering/RenderSVGResourceGradient.h: Removed.
        * rendering/RenderSVGResourceLinearGradient.cpp: Removed.
        * rendering/RenderSVGResourceLinearGradient.h: Removed.
        * rendering/RenderSVGResourceMarker.cpp: Removed.
        * rendering/RenderSVGResourceMarker.h: Removed.
        * rendering/RenderSVGResourceMasker.cpp: Removed.
        * rendering/RenderSVGResourceMasker.h: Removed.
        * rendering/RenderSVGResourcePattern.cpp: Removed.
        * rendering/RenderSVGResourcePattern.h: Removed.
        * rendering/RenderSVGResourceRadialGradient.cpp: Removed.
        * rendering/RenderSVGResourceRadialGradient.h: Removed.
        * rendering/RenderSVGResourceSolidColor.cpp: Removed.
        * rendering/RenderSVGResourceSolidColor.h: Removed.
        * rendering/RenderSVGRoot.cpp: Removed.
        * rendering/RenderSVGRoot.h: Removed.
        * rendering/RenderSVGShadowTreeRootContainer.cpp: Removed.
        * rendering/RenderSVGShadowTreeRootContainer.h: Removed.
        * rendering/RenderSVGTransformableContainer.cpp: Removed.
        * rendering/RenderSVGTransformableContainer.h: Removed.
        * rendering/RenderSVGViewportContainer.cpp: Removed.
        * rendering/RenderSVGViewportContainer.h: Removed.
        * rendering/SVGImageBufferTools.cpp: Removed.
        * rendering/SVGImageBufferTools.h: Removed.
        * rendering/SVGMarkerData.h: Removed.
        * rendering/SVGMarkerLayoutInfo.cpp: Removed.
        * rendering/SVGMarkerLayoutInfo.h: Removed.
        * rendering/SVGRenderSupport.cpp: Removed.
        * rendering/SVGRenderSupport.h: Removed.
        * rendering/SVGRenderTreeAsText.cpp: Removed.
        * rendering/SVGRenderTreeAsText.h: Removed.
        * rendering/SVGResources.cpp: Removed.
        * rendering/SVGResources.h: Removed.
        * rendering/SVGResourcesCache.cpp: Removed.
        * rendering/SVGResourcesCache.h: Removed.
        * rendering/SVGResourcesCycleSolver.cpp: Removed.
        * rendering/SVGResourcesCycleSolver.h: Removed.
        * rendering/SVGShadowTreeElements.cpp: Removed.
        * rendering/SVGShadowTreeElements.h: Removed.
        * rendering/svg/RenderForeignObject.cpp: Copied from Source/WebCore/rendering/RenderForeignObject.cpp.
        * rendering/svg/RenderForeignObject.h: Copied from Source/WebCore/rendering/RenderForeignObject.h.
        * rendering/svg/RenderSVGAllInOne.cpp: Copied from Source/WebCore/rendering/RenderSVGAllInOne.cpp.
        * rendering/svg/RenderSVGBlock.cpp: Copied from Source/WebCore/rendering/RenderSVGBlock.cpp.
        * rendering/svg/RenderSVGBlock.h: Copied from Source/WebCore/rendering/RenderSVGBlock.h.
        * rendering/svg/RenderSVGContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGContainer.cpp.
        * rendering/svg/RenderSVGContainer.h: Copied from Source/WebCore/rendering/RenderSVGContainer.h.
        * rendering/svg/RenderSVGGradientStop.cpp: Copied from Source/WebCore/rendering/RenderSVGGradientStop.cpp.
        * rendering/svg/RenderSVGGradientStop.h: Copied from Source/WebCore/rendering/RenderSVGGradientStop.h.
        * rendering/svg/RenderSVGHiddenContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGHiddenContainer.cpp.
        * rendering/svg/RenderSVGHiddenContainer.h: Copied from Source/WebCore/rendering/RenderSVGHiddenContainer.h.
        * rendering/svg/RenderSVGImage.cpp: Copied from Source/WebCore/rendering/RenderSVGImage.cpp.
        * rendering/svg/RenderSVGImage.h: Copied from Source/WebCore/rendering/RenderSVGImage.h.
        * rendering/svg/RenderSVGModelObject.cpp: Copied from Source/WebCore/rendering/RenderSVGModelObject.cpp.
        * rendering/svg/RenderSVGModelObject.h: Copied from Source/WebCore/rendering/RenderSVGModelObject.h.
        * rendering/svg/RenderSVGResource.cpp: Copied from Source/WebCore/rendering/RenderSVGResource.cpp.
        * rendering/svg/RenderSVGResource.h: Copied from Source/WebCore/rendering/RenderSVGResource.h.
        * rendering/svg/RenderSVGResourceClipper.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceClipper.cpp.
        * rendering/svg/RenderSVGResourceClipper.h: Copied from Source/WebCore/rendering/RenderSVGResourceClipper.h.
        * rendering/svg/RenderSVGResourceContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceContainer.cpp.
        * rendering/svg/RenderSVGResourceContainer.h: Copied from Source/WebCore/rendering/RenderSVGResourceContainer.h.
        * rendering/svg/RenderSVGResourceFilter.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceFilter.cpp.
        * rendering/svg/RenderSVGResourceFilter.h: Copied from Source/WebCore/rendering/RenderSVGResourceFilter.h.
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceFilterPrimitive.cpp.
        * rendering/svg/RenderSVGResourceFilterPrimitive.h: Copied from Source/WebCore/rendering/RenderSVGResourceFilterPrimitive.h.
        * rendering/svg/RenderSVGResourceGradient.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceGradient.cpp.
        * rendering/svg/RenderSVGResourceGradient.h: Copied from Source/WebCore/rendering/RenderSVGResourceGradient.h.
        * rendering/svg/RenderSVGResourceLinearGradient.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceLinearGradient.cpp.
        * rendering/svg/RenderSVGResourceLinearGradient.h: Copied from Source/WebCore/rendering/RenderSVGResourceLinearGradient.h.
        * rendering/svg/RenderSVGResourceMarker.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceMarker.cpp.
        * rendering/svg/RenderSVGResourceMarker.h: Copied from Source/WebCore/rendering/RenderSVGResourceMarker.h.
        * rendering/svg/RenderSVGResourceMasker.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceMasker.cpp.
        * rendering/svg/RenderSVGResourceMasker.h: Copied from Source/WebCore/rendering/RenderSVGResourceMasker.h.
        * rendering/svg/RenderSVGResourcePattern.cpp: Copied from Source/WebCore/rendering/RenderSVGResourcePattern.cpp.
        * rendering/svg/RenderSVGResourcePattern.h: Copied from Source/WebCore/rendering/RenderSVGResourcePattern.h.
        * rendering/svg/RenderSVGResourceRadialGradient.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceRadialGradient.cpp.
        * rendering/svg/RenderSVGResourceRadialGradient.h: Copied from Source/WebCore/rendering/RenderSVGResourceRadialGradient.h.
        * rendering/svg/RenderSVGResourceSolidColor.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceSolidColor.cpp.
        * rendering/svg/RenderSVGResourceSolidColor.h: Copied from Source/WebCore/rendering/RenderSVGResourceSolidColor.h.
        * rendering/svg/RenderSVGRoot.cpp: Copied from Source/WebCore/rendering/RenderSVGRoot.cpp.
        * rendering/svg/RenderSVGRoot.h: Copied from Source/WebCore/rendering/RenderSVGRoot.h.
        * rendering/svg/RenderSVGShadowTreeRootContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGShadowTreeRootContainer.cpp.
        * rendering/svg/RenderSVGShadowTreeRootContainer.h: Copied from Source/WebCore/rendering/RenderSVGShadowTreeRootContainer.h.
        * rendering/svg/RenderSVGTransformableContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGTransformableContainer.cpp.
        * rendering/svg/RenderSVGTransformableContainer.h: Copied from Source/WebCore/rendering/RenderSVGTransformableContainer.h.
        * rendering/svg/RenderSVGViewportContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGViewportContainer.cpp.
        * rendering/svg/RenderSVGViewportContainer.h: Copied from Source/WebCore/rendering/RenderSVGViewportContainer.h.
        * rendering/svg/SVGImageBufferTools.cpp: Copied from Source/WebCore/rendering/SVGImageBufferTools.cpp.
        * rendering/svg/SVGImageBufferTools.h: Copied from Source/WebCore/rendering/SVGImageBufferTools.h.
        * rendering/svg/SVGMarkerData.h: Copied from Source/WebCore/rendering/SVGMarkerData.h.
        * rendering/svg/SVGMarkerLayoutInfo.cpp: Copied from Source/WebCore/rendering/SVGMarkerLayoutInfo.cpp.
        * rendering/svg/SVGMarkerLayoutInfo.h: Copied from Source/WebCore/rendering/SVGMarkerLayoutInfo.h.
        * rendering/svg/SVGRenderSupport.cpp: Copied from Source/WebCore/rendering/SVGRenderSupport.cpp.
        * rendering/svg/SVGRenderSupport.h: Copied from Source/WebCore/rendering/SVGRenderSupport.h.
        * rendering/svg/SVGRenderTreeAsText.cpp: Copied from Source/WebCore/rendering/SVGRenderTreeAsText.cpp.
        * rendering/svg/SVGRenderTreeAsText.h: Copied from Source/WebCore/rendering/SVGRenderTreeAsText.h.
        * rendering/svg/SVGResources.cpp: Copied from Source/WebCore/rendering/SVGResources.cpp.
        * rendering/svg/SVGResources.h: Copied from Source/WebCore/rendering/SVGResources.h.
        * rendering/svg/SVGResourcesCache.cpp: Copied from Source/WebCore/rendering/SVGResourcesCache.cpp.
        * rendering/svg/SVGResourcesCache.h: Copied from Source/WebCore/rendering/SVGResourcesCache.h.
        * rendering/svg/SVGResourcesCycleSolver.cpp: Copied from Source/WebCore/rendering/SVGResourcesCycleSolver.cpp.
        * rendering/svg/SVGResourcesCycleSolver.h: Copied from Source/WebCore/rendering/SVGResourcesCycleSolver.h.
        * rendering/svg/SVGShadowTreeElements.cpp: Copied from Source/WebCore/rendering/SVGShadowTreeElements.cpp.
        * rendering/svg/SVGShadowTreeElements.h: Copied from Source/WebCore/rendering/SVGShadowTreeElements.h.

2011-01-09  Xianzhu Wang  <phnixwxz@gmail.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=41441
        createWindow method should only do window-creating without URL navigation.
        Let client APIs know which URL a new window will start with

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):

2011-01-09  Dirk Schulze  <krit@webkit.org>

        Unreviewed sort of Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2011-01-09  Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        Changes to add Process Launcher and Thread Launcher implementation to the WebKit2 GTK port.
        https://bugs.webkit.org/show_bug.cgi?id=48511

        * platform/FileSystem.h: 
        * platform/gtk/FileSystemGtk.cpp: Implement function to get a binary's path
        (WebCore::applicationDirectoryPath):

2011-01-08  Martin Robinson  <mrobinson@igalia.com>

        GTK+ Build fix. Add missing headers to the source list, fixing make dist.

        No new tests. This is only a build change.

        * GNUmakefile.am: Add missing headers to the source list.

2011-01-08 Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        [GTK] WebKit2 GNUmakefile is out of date from trunk
        https://bugs.webkit.org/show_bug.cgi?id=51883

        Added stubs for WebKit2 compilation.

        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::contextMenuItemVector):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::checked):
        (WebCore::ContextMenuItem::enabled):
        * platform/network/soup/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::authenticationClient):

2011-01-08  Helder Correia  <helder@sencha.com>

        Reviewed by Simon Fraser.

        Shadow is not drawn when filling a path with a gradient
        https://bugs.webkit.org/show_bug.cgi?id=51982

        This happens in CG and is related to bug 51869, this time to be fixed
        in GraphicsContext::fillPath(const Path& path). We need to draw the
        gradient clipped to the path on a CGLayer first, and then draw the
        layer on the GraphicsContext.

        Test: fast/canvas/canvas-fillPath-gradient-shadow.html

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

2011-01-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] PasteboardQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39771

        Update the code to follow the coding style.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):

2011-01-08  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        HTML5 Conformance Test failure: approved/xhtml5/html_style_in_comment.xhtml
        https://bugs.webkit.org/show_bug.cgi?id=48593

        XHTML <style> blocks, unlike HTML <style> blocks, should respect HTML
        comments.

        Test: fast/parser/xhtml-html-comment-in-style-block.xhtml

        * dom/StyleElement.cpp:
        (WebCore::isValidStyleChild): Remove the COMMENT_NODE check as the HTML parser doesn't add COMMENT_NODEs as children of style blocks.
        (WebCore::StyleElement::process): Factored out a condition that must remain in sync.

2011-01-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Navigator.cookiesEnabled return true for Qt even if there is no cookie jar
        https://bugs.webkit.org/show_bug.cgi?id=52081

        Test for the availability of cookie jar to return if cookies are enabled or not. The network access
        manager always exist, not the cookie jar.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookiesEnabled):

2011-01-08  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Canceled frame loads can corrupt back forward list
        https://bugs.webkit.org/show_bug.cgi?id=50254

        Avoids changing m_currentItem until the navigation commits.
        Also resets top-level history items if a subframe navigation is canceled.

        * WebCore/loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * WebCore/loader/HistoryController.cpp:
        * WebCore/loader/HistoryController.h:

2011-01-08  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Support createTouchList with Touch list for test automation.
        Implemented JS/V8 custom functions for createTouchList.
        https://bugs.webkit.org/show_bug.cgi?id=51196

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::createTouchList):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::V8Document::createTouchListCallback):
        * dom/Document.idl:
        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::initTouchEvent):

2011-01-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] CookieJarQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39778

        Improve the coding style of CookieJarQt.cpp.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::networkAccessManager):
        (WebCore::cookiesEnabled):

2011-01-08  Jeff Miller  <jeffm@apple.com>

        Rubber-stamped by Dan Bernstein.

        Fix QTMovieWin.vcproj to account for moving WebCore to Source\WebCore
        https://bugs.webkit.org/show_bug.cgi?id=52114

        * WebCore.vcproj/QTMovieWin.vcproj:
        Add an extra .. to some InheritedPropertySheets entries since WebCore is now one level deeper.

2011-01-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Mihai Parparita.

        SVG rendering clean up according to the webkit style rules 2
        https://bugs.webkit.org/show_bug.cgi?id=52112

        Modified the style of the license of all files in WebCore/rendering/svg to match the style
        in WebCore/svg. Cleaned up the code according to the webkit style rules.

        No change of functionality. No test added.

        * rendering/svg/RenderSVGInline.cpp:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGPath.cpp:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGTSpan.cpp:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.cpp:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextLayoutEngineBaseline.cpp: Brace was misplaced accoring to check-webkit-style.
        (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphOrientationAngle):
        * rendering/svg/SVGTextQuery.cpp:
        * rendering/svg/SVGTextQuery.h:

2011-01-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Mihai Parparita.

        SVG rendering clean up according to the webkit style rules
        https://bugs.webkit.org/show_bug.cgi?id=52107

        Cleanup of the SVG rendering code according to the webbkit style rules.
        Changed style of licensing texts to match the style in WebCore/svg, no change
        of the licensing text itself.

        * rendering/RenderForeignObject.cpp:
        * rendering/RenderForeignObject.h:
        * rendering/RenderSVGBlock.cpp:
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGGradientStop.cpp:
        * rendering/RenderSVGGradientStop.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::renderName):
        (WebCore::RenderSVGHiddenContainer::isSVGHiddenContainer):
        (WebCore::RenderSVGHiddenContainer::requiresLayer):
        (WebCore::RenderSVGHiddenContainer::clippedOverflowRectForRepaint):
        * rendering/RenderSVGImage.cpp:
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGResource.cpp:
        * rendering/RenderSVGResource.h:
        * rendering/RenderSVGResourceClipper.cpp:
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceContainer.cpp:
        * rendering/RenderSVGResourceContainer.h:
        * rendering/RenderSVGResourceFilter.cpp:
        * rendering/RenderSVGResourceFilter.h:
        * rendering/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/RenderSVGResourceFilterPrimitive.h:
        * rendering/RenderSVGResourceGradient.cpp:
        * rendering/RenderSVGResourceGradient.h:
        * rendering/RenderSVGResourceLinearGradient.cpp:
        * rendering/RenderSVGResourceLinearGradient.h:
        * rendering/RenderSVGResourceMarker.cpp:
        * rendering/RenderSVGResourceMarker.h:
        * rendering/RenderSVGResourceMasker.cpp:
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGResourcePattern.cpp:
        * rendering/RenderSVGResourcePattern.h:
        * rendering/RenderSVGResourceRadialGradient.cpp:
        * rendering/RenderSVGResourceRadialGradient.h:
        * rendering/RenderSVGResourceSolidColor.cpp:
        * rendering/RenderSVGResourceSolidColor.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGShadowTreeRootContainer.cpp:
        * rendering/RenderSVGShadowTreeRootContainer.h:
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/RenderSVGTransformableContainer.h:
        (WebCore::RenderSVGTransformableContainer::localToParentTransform):
        (WebCore::RenderSVGTransformableContainer::setNeedsTransformUpdate):
        (WebCore::RenderSVGTransformableContainer::localTransform):
        * rendering/RenderSVGViewportContainer.cpp:
        * rendering/RenderSVGViewportContainer.h:
        * rendering/SVGImageBufferTools.cpp:
        * rendering/SVGImageBufferTools.h:
        * rendering/SVGMarkerData.h:
        * rendering/SVGMarkerLayoutInfo.cpp:
        * rendering/SVGMarkerLayoutInfo.h:
        * rendering/SVGRenderSupport.cpp:
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * rendering/SVGRenderTreeAsText.h:
        * rendering/SVGResources.cpp:
        * rendering/SVGResources.h:
        * rendering/SVGResourcesCache.cpp:
        * rendering/SVGResourcesCache.h:
        * rendering/SVGResourcesCycleSolver.cpp:
        * rendering/SVGResourcesCycleSolver.h:
        * rendering/SVGShadowTreeElements.cpp:
        * rendering/SVGShadowTreeElements.h:

2011-01-07  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move WebCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=52050

        Update project files to understand WebCore's new location.  I suspect
        there will be some follow-up patches after we land this patch.

        * Android.derived.jscbindings.mk:
        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreGeneratedCairo.vsprops:
        * WebCore.vcproj/WebCoreGeneratedCommon.vsprops:

2011-01-07  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=51851
        Implement RenderSVGInlineText::localCaretRect()

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::localCaretRect): Implemented.

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

        Unreviewed; Added the missing null pointer check for r75293.

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

2011-01-07  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

         <rdar://problem/8649617> Migrate memory tracking from Safari to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=50799 Add Memory Sampler to WebKit
        
        Add a sampler for printing off process memory statistics.
        Export file mode.

        * WebCore.exp.in:

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

        Reviewed by Adam Barth.

        onbeforeunload is broken for framesets
        https://bugs.webkit.org/show_bug.cgi?id=19418

        Added beforeunload event support for sub frames. WebKit's implementation tries to match
        that of Internet Explorer as much as possible. beforeunload event is fired for each and
        every descendent of a frame that is about to navigate.

        When a value other than null is returned by a beforeunload handler, a confirmation dialog
        is shown for each handler (calls chrome's runBeforeUnloadConfirmPanel) just like it is done
        for main frames.

        In addition, navigation is forbidden while beforeunload handlers are being called.
        Setting values to location.href, location.reload, and other means of navigations are thus
        ignored while beforeunload event handler is being ran, matching Internet Explorer's behavior.

        Because navigation needs to prevented globally, NavigationDisablerForBeforeUnload is added to
        NavigationScheduler.h, which is instantiated as a RAII object in FrameLoader::shouldClose.

        Tests: fast/events/before-unload-adopt-subframe-to-outside.html
               fast/events/before-unload-adopt-within-subframes.html
               fast/events/before-unload-forbidden-navigation.html
               fast/events/before-unload-in-multiple-subframes.html
               fast/events/before-unload-in-subframe.html
               fast/events/before-unload-javascript-navigation.html
               fast/events/before-unload-remove-and-add-subframe.html
               fact/events/before-unload-remove-itself.html
               fast/events/before-unload-with-subframes.html

       * loader/FrameLoader.cpp:
       (WebCore::FrameLoader::shouldClose): Calls fireBeforeUnloadEvent on m_frame and m_frame's
       descendents. Returns true only if every call to fireBeforeUnloadEvent returned true.
       (WebCore::FrameLoader::fireBeforeUnloadEvent): Fires a beforeunload event and calls
       chrome's runBeforeUnloadConfirmPanel as needed.
       (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Calls shouldClose for all frames.
       * loader/FrameLoader.h:
       * loader/NavigationScheduler.cpp:
       (WebCore::NavigationScheduler::shouldScheduleNavigation): Checks the nullity of Page and calls
       NavigationDisablerForBeforeUnload::isNavigationAllowed when url is not javascript scheme.
       (WebCore::NavigationScheduler::scheduleRedirect): Calls shouldScheduleNavigation.
       (WebCore::NavigationScheduler::scheduleLocationChange): Ditto.
       (WebCore::NavigationScheduler::scheduleRefresh): Ditto.
       (WebCore::NavigationScheduler::scheduleHistoryNavigation): Ditto.
       * loader/NavigationScheduler.h:
       (WebCore::NavigationDisablerForBeforeUnload::NavigationDisablerForBeforeUnload): Disables navigation.
       (WebCore::NavigationDisablerForBeforeUnload::~NavigationDisablerForBeforeUnload): Enables navigation
       when called on the last instance of NavigationDisablerForBeforeUnload.
       (WebCore::NavigationDisablerForBeforeUnload::isNavigationAllowed): Returns true if there are no instance
       of NavigationDisablerForBeforeUnload left on the stack.

2011-01-07  Martin Robinson  <mrobinson@igalia.com>

        Build fix for GTK+.

        * GNUmakefile.am: Add RenderFullScreen.cpp to the sources list.
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::setAnimating): Guard the call to contentChanged
        with ENABLED(ACCELERATED_COMPOSITING).

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

        Unreviewed; speculative fix for Windows debug build.

        * bindings/js/JSBindingsAllInOne.cpp:

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

        Reviewed by Ojan Vafai.

        Adopting an iframe to a child frame results in stack overflow
        https://bugs.webkit.org/show_bug.cgi?id=52018

        Throws an exception when a document adopts an iframe that is an ancestor
        of the document in the frame hierarchy. New behavior matches that of Firefox.

        Test: fast/html/adopt-parent-frame.html

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

2011-01-07  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Scrollbar code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=52073

        Scrollbar code cleanup:
        - Remove ScrollbarThemeMac.{mm|h} from the mac sources list, we use
          ScrollbarThemeChromiumMac.{mm|h}
        - Remove USE_WEB_THEME_ENGINE_TO_PAINT_THUMB #define now that switch to
          WebThemeEngine is permanent
        - Fix typo in Linux scrollbar enum name

        No new tests (compiles).

        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::paintTrackPiece):
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::scrollbarStateToThemeState):
        (WebCore::ScrollbarThemeChromiumMac::paint):

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

        GTK Linux build fix: isDocumentRunningFullScreenAnimation should
        be protected both by ENABLE(FULLSCREEN_API) && USE(ACCELERATED_COMPOSITING)

        * page/FrameView.cpp:

2011-01-07  Rafael Weinstein  <rafaelw@chromium.org>

        Reviewed by Eric Seidel.

        Cleanup: Fold shadowParentNode into shadowHost
        https://bugs.webkit.org/show_bug.cgi?id=51059

        Replaces all uses of shadowParentNode.

        No new tests because no behavior has changed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve):
        * dom/Node.cpp:
        (WebCore::Node::shadowHost):
        (WebCore::Node::shadowAncestorNode):
        (WebCore::eventTargetRespectingSVGTargetRules):
        (WebCore::Node::getEventAncestors):
        * dom/Node.h:
        * editing/Editor.cpp:
        (WebCore::Editor::findString):
        * page/DragController.cpp:
        (WebCore::asFileInput):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::instanceAssociatedWithShadowTreeElement):
        (WebCore::EventHandler::dispatchMouseEvent):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hasLineIfEmpty):
        * rendering/RenderSVGShadowTreeRootContainer.cpp:
        (WebCore::RenderSVGShadowTreeRootContainer::updateFromElement):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title):

2011-01-07  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        I mistakenly included a Windows only file in a
        cross platform file. 

        * platform/graphics/ca/GraphicsLayerCA.cpp:

2011-01-07  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Get rid of include of <QuartzCore/QuartzCore.h>

        * platform/graphics/ca/GraphicsLayerCA.cpp:

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

        Further build fixes.  Add a ENABLE(FULLSCREEN_API) guard around
        the implementation of requiresCompositingfForFullScreen.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForFullScreen):

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

        No review, build fix only.  Removed parameter who was causing
        a warning in Release builds.

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

2011-01-07  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Use new wkCACFLayerGetContextUserData function

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:

2011-01-07  James Robinson  <jamesr@chromium.org>

        Fix compile bustage due to bad merge in 75276.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::beginAnimationUpdateTime):

2010-12-17  Jer Noble  <jer@kokode.apple.com>

        Reviewed by Simon Fraser.

        Implement WebKit Full Screen support.
        https://bugs.webkit.org/show_bug.cgi?id=49481
        rdar://problem/8247444

        Mark for export all those WebCore functions needed by WebFullscreenController.

        * WebCore.exp.in:

2010-12-17  Jer Noble  <jer@kokode.apple.com>

        Reviewed by Simon Fraser.

        Implement WebKit Full Screen support.
        https://bugs.webkit.org/show_bug.cgi?id=49481
        rdar://problem/8247444
        
        screenRect is useful for more than just HTMLMediaElements.  Promote it into
        Element.

        * dom/Element.cpp: Moved into Element from HTMLMediaElement.
        * dom/Element.h: Ditto.
        * dom/Node.cpp:
        * html/HTMLMediaElement.cpp: Moved screenRect into Element.
        * html/HTMLMediaElement.h: Ditto.
        * WebCore.exp.in: Modify the exports list to reflect the new symbol name.

2010-12-17  Jer Noble  <jer@kokode.apple.com>

        Reviewed by Simon Fraser.

        Implement WebKit Full Screen support.
        https://bugs.webkit.org/show_bug.cgi?id=49481
        rdar://problem/8247444

        The RenderFullScreen is intended to be used by clients of that API to allow a DOM subtree to
        be rendered outside its original Frame. Because of this, there are a few areas of the
        rendering code which need to be special cased: RenderFullScreen layers should not be clipped
        to the viewport, as they will almost always be rendering outside the viewport area;
        RenderFullScreen graphics layers should not be reparented by the RenderLayerCompositor, as
        the client will likely want to reparent the platformLayer into their own fullscreen platform
        window; the FrameView must update the RenderFullScreen graphics layer tree separately from
        the root layer, as the two trees are disconnected.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):  Special treatment for fullscreen renderer.
        (WebCore::FrameView::syncCompositingStateRecursive): Ditto.
        (WebCore::FrameView::paintContents): Ditto.
        * rendering/RenderLayer.h: Add a new ContentChangeType enum entry for FullScreen.
        * rendering/RenderLayer.cpp: 
        (WebCore::RenderLayer::contentChanged): Add support for above.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsFullScreen): New function.
        (WebCore::RenderLayerBacking::updateCompositedBounds): Do not clip if the layerOrAncestorIsFullScreen.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Special treatment for fullscreen renderer.
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Ditto.
        (WebCore::RenderLayerCompositor::requiresCompositingForFullScreen): Ditto.
        * rendering/RenderLayerCompositor.h:

2010-12-17  Jer Noble  <jer@kokode.apple.com>

        Reviewed by Simon Fraser.

        Implemented non-accelerated fullscreen support.  The Document will now vend a RenderFullScreen object for clients to
        use to relocate the fullscreen element subtree.

        https://bugs.webkit.org/show_bug.cgi?id=49481
        rdar://problem/8247444

        * css/CSSStyleSelector.cpp:
        (WebCore::loadFullScreenRulesIfNeeded): Change webkitFullScreen -> webkitIsFullScreen.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Ditto.
        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize m_fullScreenRenderer.
        (WebCore::Document::detach): Call setFullScreenRenderer(0).
        (WebCore::Document::nodeWillBeRemoved): Replicate the logic in webkitWillEnterFullScreenForElement.
        (WebCore::Document::webkitWillEnterFullScreenForElement):  Detach the fullscreen element to cause
            a new RenderFullScreen renderer to be created with the new fullscreen element.
        (WebCore::Document::webkitDidEnterFullScreenForElement):  Notify clients of a fullscreen change
            here, rather in "willEnter", to avoid reentrancy problems when clients remove nodes in response
            to webkitfullscreenchange events.
        (WebCore::Document::webkitWillExitFullScreenForElement): Recalculate the fullscreen element's style.
        (WebCore::Document::webkitDidExitFullScreenForElement): Ditto.
        (WebCore::Document::setFullScreenRenderer): Accessor for m_fullScreenRenderer.
        (WebCore::Document::setFullScreenRendererSize): Set the style on the m_fullScreenRenderer with a new
            size; this keeps clients from having to access the renderer's style directly.
        (WebCore::Document::setFullScreenRendererBackgroundColor): Ditto.
        * dom/Document.h:
        (WebCore::Document::webkitIsFullScreen): Change webkitFullScreen -> webkitIsFullScreen.
        (WebCore::Document::fullScreenRenderer): Accessor.
        * dom/Document.idl:
        * dom/Node.cpp:
        (WebCore::Node::createRendererIfNeeded): If the document is in fullscreen mode, create a RenderFullScreen
            object to insert between the fullscreen element and its parent.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::fullScreenRendererChanged): Added.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler): Change webkitFullScreen -> webkitIsFullScreen.

2010-12-17  Jer Noble  <jer@kokode.apple.com>

        Reviewed by Simon Fraser.

        Implement WebKit Full Screen support.
        https://bugs.webkit.org/show_bug.cgi?id=49481
        rdar://problem/8247444
        
        This patch introduces a new RenderObject type: RenderFullScreen.  The RenderFullScreen renderer 
        will be used to implement new FullScreen APIs.  Because the RenderFullScreen object will be the
        parent of the current fullscreen element, the style rules for fullscreen objects must change to
        match.
        
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderFullScreen.cpp: Added.
        (RenderFullScreen::setAnimating): Sets the m_isAnimating flag.
        (RenderFullScreen::createFullScreenStyle): Returns a new RenderStyle containing the default stye
            for RenderFullScreen objects.
        * rendering/RenderFullScreen.h: Added.
        (WebCore::RenderFullScreen::isRenderFullScreen): Added.  Overrides the RenderObject version.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderFullScreen): Added.  Used for type-checking RenderFullScreen objects.
        * css/fullscreen.css:  Modified the contained fullscreen styles.


2011-01-07  James Robinson  <jamesr@chromium.org>

        Revert "Implement mozilla's animationTime property"
        https://bugs.webkit.org/show_bug.cgi?id=51952

        This approach isn't quite right.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::beginAnimationUpdateTime):
        * page/animation/AnimationTimeController.cpp: Removed.
        * page/animation/AnimationTimeController.h: Removed.

2011-01-07  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] Black text on black buttons using a dark theme
        https://bugs.webkit.org/show_bug.cgi?id=35024

        Implement RenderThemeQt::systemColor to apply the correct colors from the current Qt style.

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

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

        Reviewed by Kenneth Russell.

        Add WEBKIT_lose_context WebGL extension.
        https://bugs.webkit.org/show_bug.cgi?id=51492

        Tests: fast/canvas/webgl/context-lost-restored.html
               fast/canvas/webgl/context-lost.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSWebGLRenderingContext::getSupportedExtensions):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        (WebCore::V8WebGLRenderingContext::getSupportedExtensionsCallback):
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContextRestoreTimer::fired):
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::forceLostContext):
        (WebCore::WebGLRenderingContext::onLostContext):
        (WebCore::WebGLRenderingContext::getNumberOfExtensions):
        (WebCore::WebGLRenderingContext::getExtensionNumber):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebKitLoseContext.cpp: Copied from WebCore/html/canvas/WebGLExtension.h.
        (WebCore::WebKitLoseContext::WebKitLoseContext):
        (WebCore::WebKitLoseContext::~WebKitLoseContext):
        (WebCore::WebKitLoseContext::getName):
        (WebCore::WebKitLoseContext::create):
        (WebCore::WebKitLoseContext::loseContext):
        * html/canvas/WebKitLoseContext.h: Copied from WebCore/html/canvas/WebGLExtension.h.
        * html/canvas/WebKitLoseContext.idl: Copied from WebCore/html/canvas/WebGLExtension.h.

2011-01-07  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Build fix for Chromium. Missing include.

        * page/animation/AnimationBase.cpp:

2011-01-07  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Build fix.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:

2011-01-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 52035 - Unregistering DOMWrapperWorlds is unsafe

        The method DOMWrapperWorld::unregisterWorld() effectively calls the DOMWrapperWorld's
        destructor early, in order to release wrappers once we know we no longer intend to use them.
        Whilst it is okay to have a method to throw away wrappers (assuming we know we're willing to
        lose any state stored on them) it is not okay to deregister the world from the JSGlobalData.
        A sequence of events that triggers the bug would look like this:

        (1) Create a DOMWrapperWorld.
        (2) Register a timer in the world.
        (3) Call unregisterWorld() on the world.
        (4) Timer goes off, code is executed in the world, creates a Node not attached to a Document.
        (5) We attempt to lookup a wrapper map for the world on the JSGlobalData, but because we've
            called forgetWorld() none exists.
        (6) Attempt to add a wrapper to a NULL map.

        Fix the problem by not removing the JSGlobalData's wrapper map until the world really goes away.

        * WebCore.exp.in:
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::clearWrappers):
        * bindings/js/DOMWrapperWorld.h:

2011-01-07  Chris Marrin  <cmarrin@apple.com>

        Rubber-stamped by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Final step in unifying GraphicsLayer logic across Win and Mac. This 
        implements the Windows side classes for PlatformCALayer and supporting
        classes. Also changed MediaPlayer to use new PlatformCALayerClient
        so it can use PlatformCALayer directly rather than a dummy GraphicsLayer.
        WKCACFLayerRenderer now does the task of notifying animations of their
        start time. Also commented out an assert in AnimationBase because
        AnimationController's frame time is not in sync with the new 
        AnimationTimeController. I've opened a new bug for that issue:

            https://bugs.webkit.org/show_bug.cgi?id=52037
            
        This also includes the Mac side changes backed out in 
        http://trac.webkit.org/changeset/75227.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * config.h:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::freezeAtTime):
        (WebCore::AnimationBase::getElapsedTime):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::beginAnimationUpdateTime):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::layerDidDisplay):
        (WebCore::GraphicsLayer::showDebugBorders):
        (WebCore::GraphicsLayer::showRepaintCounter):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerAnimationStarted):
        (WebCore::GraphicsLayerCA::setContentsToImage):
        (WebCore::GraphicsLayerCA::setContentsToMedia):
        (WebCore::GraphicsLayerCA::layerDidDisplay):
        (WebCore::GraphicsLayerCA::updateSublayerList):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::platformCALayer):
        (WebCore::GraphicsLayerCA::platformCALayerLayoutSublayersOfLayer):
        (WebCore::GraphicsLayerCA::platformCALayerRespondsToLayoutChanges):
        (WebCore::GraphicsLayerCA::platformCALayerContentsOrientation):
        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
        (WebCore::GraphicsLayerCA::platformCALayerShowDebugBorders):
        (WebCore::GraphicsLayerCA::platformCALayerShowRepaintCounter):
        (WebCore::GraphicsLayerCA::platformCALayerIncrementRepaintCount):
        (WebCore::GraphicsLayerCA::platformCALayerContentsOpaque):
        (WebCore::GraphicsLayerCA::platformCALayerDrawsContent):
        (WebCore::GraphicsLayerCA::platformCALayerLayerDidDisplay):
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::owner):
        (WebCore::PlatformCALayer::animationStarted):
        * platform/graphics/ca/PlatformCALayerClient.h: Copied from WebCore/platform/graphics/ca/PlatformCALayerClient.h.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setOwner):
        (PlatformCALayer::create):
        (PlatformCALayer::PlatformCALayer):
        (PlatformCALayer::contents):
        (PlatformCALayer::setContents):
        * platform/graphics/ca/win: Added.
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp: Added.
        * platform/graphics/ca/win/PlatformCALayerWin.cpp: Added.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp: Added.
        * platform/graphics/ca/win/PlatformCALayerWinInternal.h: Added.
        (WebCore::PlatformCALayerWinInternal::owner):
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer display]):
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):
        (setLayerNeedsDisplayInRect):
        (-[WebLayer setNeedsDisplay]):
        (-[WebLayer display]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer setNeedsDisplay]):
        (-[WebTiledLayer display]):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::CGContextWithHDC):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        (WebCore::MediaPlayerPrivateFullscreenWindow::rootChildLayer):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::~LayerClient):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerRespondsToLayoutChanges):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerAnimationStarted):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerContentsOrientation):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerPaintContents):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerShowDebugBorders):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerShowRepaintCounter):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerIncrementRepaintCount):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerContentsOpaque):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerDrawsContent):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerLayerDidDisplay):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerLayoutSublayersOfLayer):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::MediaPlayerPrivateQuickTimeVisualContext):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::platformMedia):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveCurrentImage):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::createLayerForMovie):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::movieNewImageAvailable):
        (WebCore::MediaPlayerPrivate::createLayerForMovie):
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::rootLayer):
        (WebCore::WKCACFLayerRenderer::addPendingAnimatedLayer):
        (WebCore::WKCACFLayerRenderer::setRootChildLayer):
        (WebCore::WKCACFLayerRenderer::setNeedsDisplay):
        (WebCore::WKCACFLayerRenderer::destroyRenderer):
        (WebCore::WKCACFLayerRenderer::render):
        * platform/graphics/win/WKCACFLayerRenderer.h:
        (WebCore::WKCACFLayerRendererClient::animationsStarted):
        (WebCore::WKCACFLayerRendererClient::syncCompositingState):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::showDebugBorders):
        (WebCore::RenderLayerBacking::showRepaintCounter):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::compositorShowDebugBorders):
        (WebCore::RenderLayerCompositor::compositorShowRepaintCounter):
        (WebCore::RenderLayerCompositor::notifyAnimationStarted):
        (WebCore::RenderLayerCompositor::notifySyncRequired):
        (WebCore::RenderLayerCompositor::paintContents):
        (WebCore::RenderLayerCompositor::showDebugBorders):
        (WebCore::RenderLayerCompositor::showRepaintCounter):

2011-01-07  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Let PingLoader send cookies if FrameLoaderClient permits it.
        https://bugs.webkit.org/show_bug.cgi?id=51898

        Test: http/tests/navigation/ping-cookie.html

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::PingLoader): Set m_shouldUseCredentialStorage
            at load start time, since we won't be able to call 
            FrameLoaderClient::shouldUseCredentialStorage() later.
        * loader/PingLoader.h:
        (WebCore::PingLoader::shouldUseCredentialStorage):

2011-01-07  Xan Lopez  <xlopez@igalia.com>

        Unreviewed, rolling out r75256.
        http://trac.webkit.org/changeset/75256
        https://bugs.webkit.org/show_bug.cgi?id=50869

        Broke GTK+ canvas tests

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addArc):

2011-01-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Port scrollbar painting to GtkStyleContext
        https://bugs.webkit.org/show_bug.cgi?id=52051

        Use GtkStyleContext API to paint scrollbars when building with
        GTK+ 3.x.

        No new tests. This should not change functionality.

        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::gtkScrollbarStyle):
        * platform/gtk/ScrollbarThemeGtk.cpp:
        * platform/gtk/ScrollbarThemeGtk.h:
        * platform/gtk/ScrollbarThemeGtk2.cpp:
        (WebCore::gtkStyleSetCallback):
        (WebCore::ScrollbarThemeGtk::ScrollbarThemeGtk):
        * platform/gtk/ScrollbarThemeGtk3.cpp:
        (WebCore::gtkStyleChangedCallback):
        (WebCore::ScrollbarThemeGtk::ScrollbarThemeGtk):
        (WebCore::ScrollbarThemeGtk::updateThemeProperties):
        (WebCore::ScrollbarThemeGtk::paintTrackBackground):
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground):
        (WebCore::ScrollbarThemeGtk::paintThumb):
        (WebCore::ScrollbarThemeGtk::paintButton):

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

        Reviewed by Darin Adler.

        <rdar://problem/8783318> Text emphasis marks should not appear over characters that have ruby annotations
        https://bugs.webkit.org/show_bug.cgi?id=51267

        Test: fast/text/emphasis-avoid-ruby.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection): Use getEmphasisMarkPosition() to check if
        there are text emphasis marks.
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow): Ditto.
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::getEmphasisMarkPosition): Added. Returns true and sets the emphasis mark
        position if the text is style with emphasis marks and there isn’t a ruby annotation that should
        suppress them. Otherwise returns false.
        (WebCore::InlineTextBox::paint): Use getEmphasisMarkPosition() to check if emphasis marks should
        be painted.
        * rendering/InlineTextBox.h:

2011-01-07  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [cairo] Rendering a lot of arcs on top of each other causes time
        outs in some tests
        https://bugs.webkit.org/show_bug.cgi?id=50869

        We avoid the situation where we have to render the same arc
        multiple times over itself. Now it renders just one oval and
        moves to the end angle.

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::addArc):

2011-01-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Port buttons painting to GtkStyleContext
        https://bugs.webkit.org/show_bug.cgi?id=51812

        Use GtkStyleContext API to paint buttons when building with GTK+
        3.x.

        No new tests. This should not change functionality.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::adjustRectForFocus):
        (WebCore::RenderThemeGtk::adjustRepaintRect):
        (WebCore::RenderThemeGtk::paintButton):

2011-01-07  Zhenyao Mo  <zmo@google.com>

        Unreviewed, build fix.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):

2011-01-06  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        copyTexSubImage2D shouldn't have undefined pixels
        https://bugs.webkit.org/show_bug.cgi?id=51559

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D): Refactor to share some code with copyTexSubImage2D through helper function clip2D.
        (WebCore::WebGLRenderingContext::copyTexSubImage2D): Initialize undefined pixels to 0.
        (WebCore::WebGLRenderingContext::validateTexFuncLevel): Seperate the validation of level from validateTexFuncParameters.
        (WebCore::WebGLRenderingContext::validateTexFuncParameters): Ditto.
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::getType): Expose the type of a texture.
        * html/canvas/WebGLTexture.h:

2011-01-07  Takashi Toyoshima  <toyoshim@google.com>

        Reviewed by Kenneth Russell.

        cleanupAfterGraphicsCall() is never called in
        WebGLRenderingContext::checkFramebufferStatus()
        https://bugs.webkit.org/show_bug.cgi?id=51668

        No new tests. This is a trivial bug.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::checkFramebufferStatus):

2011-01-07  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        GTK: AX: atk tests need to be updated after recent changes
        https://bugs.webkit.org/show_bug.cgi?id=51932

        Make sure we can always get the right accesssible parent for an
        AtkObject when traversing the hierarchy bottom up.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (isRootObject): New function to check whether an
        AccessibilityObject is the root one or not, according to the
        latest changes in the hierarchy.
        (atkParentOfRootObject): Gets the appropriate AtkObject from GTK's
        GAIL as the parent of the root AtkObject from WebCore.
        (webkit_accessible_get_parent): Use atkParentOfRootObject.
        (webkit_accessible_get_index_in_parent): Ditto.
        (atkRole): Expose AccessibilityObjects with ScrollAreaRole as
        AtkObject's of role ATK_ROLE_SCROLLED_PANE.

2011-01-07  Zhenyao Mo  <zmo@google.com>

        Unreviewed, Mac 32-bit build fix.
        Use float instead of double in GL function arguments to avoid implicit type down casting.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::blendColor):
        (WebCore::WebGLRenderingContext::clearColor):
        (WebCore::WebGLRenderingContext::clearDepth):
        (WebCore::WebGLRenderingContext::depthRange):
        (WebCore::WebGLRenderingContext::lineWidth):
        (WebCore::WebGLRenderingContext::polygonOffset):
        (WebCore::WebGLRenderingContext::sampleCoverage):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:

2011-01-07  Carlos Garcia Campos  <cgarcia@igalia.com> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Port slider painting to GtkStyleContext
        https://bugs.webkit.org/show_bug.cgi?id=51874

        Use GtkStyleContext API to paint sliders when building with GTK+
        3.x. Also move the code to adjust media slider to its own method
        in RenderThemeGtk.cpp since it's common to both gtk 2 and 3.

        No new tests. This should not change functionality.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustMediaSliderThumbSize):
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::adjustSliderThumbSize):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::paintSliderTrack):
        (WebCore::RenderThemeGtk::paintSliderThumb):
        (WebCore::RenderThemeGtk::adjustSliderThumbSize):

2011-01-07  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] [WK2] QtWebKit does not build in debug, FileReader.cpp does not compile
        https://bugs.webkit.org/show_bug.cgi?id=51992

        Add the missing header. CString is used in debug by the calls to LOG().

        * fileapi/FileReader.cpp:

2011-01-07  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Cairo's ContextShadow may mis-render some box shadows
        https://bugs.webkit.org/show_bug.cgi?id=51374

        The space required for the internal shadow of the corners was not
        correctly considered.

        * platform/graphics/cairo/ContextShadowCairo.cpp:
        (WebCore::ContextShadow::drawRectShadow):

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

        Reviewed by Darin Adler.

        REGRESSION (r74663): ASSERTION FAILED: m_tokenizer->lineNumber() == line.zeroBasedInt()
        https://bugs.webkit.org/show_bug.cgi?id=52013

        When excluding line numbers for composite strings, we forgot to exclude
        the line number for the current string!

        Test: fast/parser/line-number-composite-segmented-string.html

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::setExcludeLineNumbers):

2011-01-06  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Back out changes in http://trac.webkit.org/changeset/75199
        This breaks the Windows build. Fixing it on that side. Until
        then I'll back this out.

2011-01-06  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        When a live frame is moved between pages, some plug-in DOM methods cease to function
        https://bugs.webkit.org/show_bug.cgi?id=45770

        Test: fast/frames/iframe-reparenting-plugins.html

        * page/Frame.cpp:
        (WebCore::Frame::~Frame):
        (WebCore::Frame::addObserver):
        (WebCore::Frame::removeObserver):
        * page/Frame.h:
        (WebCore::FrameDestructionObserver::~FrameDestructionObserver):
        Added observer to be notified when frame is destroyed.
        * page/Page.cpp:
        (WebCore::Page::~Page):
        (WebCore::Page::refreshPlugins):
        PluginData no longer stores page pointer.
        * plugins/DOMMimeType.cpp:
        (WebCore::DOMMimeType::DOMMimeType):
        (WebCore::DOMMimeType::~DOMMimeType):
        (WebCore::DOMMimeType::enabledPlugin):
        * plugins/DOMMimeType.h:
        (WebCore::DOMMimeType::create):
        (WebCore::DOMMimeType::frameDestroyed):
        Store frame instead of page pointer in DOMMimeType.
        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::item):
        (WebCore::DOMMimeTypeArray::namedItem):
        Provide frame to create DOMMimeType.
        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::DOMPlugin):
        (WebCore::DOMPlugin::~DOMPlugin):
        (WebCore::DOMPlugin::item):
        (WebCore::DOMPlugin::namedItem):
        * plugins/DOMPlugin.h:
        (WebCore::DOMPlugin::create):
        (WebCore::DOMPlugin::frameDestroyed):
        Store frame instead of page pointer in DOMPlugin.
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::item):
        (WebCore::DOMPluginArray::namedItem):
        Provide frame to create DOMPlugin.
        * plugins/PluginData.cpp:
        (WebCore::PluginData::PluginData):
        (WebCore::PluginData::initPlugins):
        * plugins/PluginData.h:
        No longer stores a pointer to the page.
        Added page parameter to initPlugins.
        * plugins/PluginDataNone.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/chromium/PluginDataChromium.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/gtk/PluginDataGtk.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/wx/PluginDataWx.cpp:
        (WebCore::PluginData::initPlugins):
        Updated platforms to add (unused) page parameter to initPlugins.

2011-01-05  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Define GC3D types to match GL types and use them in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=45557

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::validateTexFuncData):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::texImage2DResourceSafe):
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters):
        (WebCore::GraphicsContext3D::extractImageData):
        (WebCore::GraphicsContext3D::extractTextureData):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::enable):
        (WebCore::SharedGraphicsContext3D::disable):
        (WebCore::SharedGraphicsContext3D::clear):
        (WebCore::SharedGraphicsContext3D::drawArrays):
        (WebCore::SharedGraphicsContext3D::getError):
        (WebCore::SharedGraphicsContext3D::getIntegerv):
        (WebCore::SharedGraphicsContext3D::createFramebuffer):
        (WebCore::SharedGraphicsContext3D::createTexture):
        (WebCore::SharedGraphicsContext3D::deleteFramebuffer):
        (WebCore::SharedGraphicsContext3D::deleteTexture):
        (WebCore::SharedGraphicsContext3D::framebufferTexture2D):
        (WebCore::SharedGraphicsContext3D::texParameteri):
        (WebCore::SharedGraphicsContext3D::texImage2D):
        (WebCore::SharedGraphicsContext3D::texSubImage2D):
        (WebCore::SharedGraphicsContext3D::readPixels):
        (WebCore::SharedGraphicsContext3D::setActiveTexture):
        (WebCore::SharedGraphicsContext3D::bindTexture):
        (WebCore::SharedGraphicsContext3D::bindFramebuffer):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (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::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::sizeInBytes):
        (WebCore::GraphicsContext3D::synthesizeGLError):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (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::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::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::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::sizeInBytes):
        (WebCore::GraphicsContext3D::synthesizeGLError):
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

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

        Reviewed by Eric Seidel.

        [GTK] Initial build support for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=51716

        Add initial build support for WebGL and insert bits of implementation
        necessary for clean compilation into GraphicsContext3D.

        No new tests. This is just a build change.

        * GNUmakefile.am: Add missing files to the source lists.
        * platform/graphics/GraphicsContext3D.h: Include IntSize.h as it's used below.
        Include typedefs necessary for WebGL on GTK+ and consolidate typdefs which are the
        same across different platforms. X11 headers define the VERSION symbol, so it's
        necessary to undefine it, since it's used as an enum value.

2011-01-06  Helder Correia  <helder@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsContext::drawConvexPolygon() has unnecessary code for shadow
        https://bugs.webkit.org/show_bug.cgi?id=52014

        The function is only used by RenderObject to draw box sides.
        The shadow branch is never used and thus can be removed.

        No new tests are necessary.

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

2011-01-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make sure touch is disabled in the minimal configuration
        https://bugs.webkit.org/show_bug.cgi?id=51316

        No new tests as there is no new functionality.

        * features.pri:

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

        Reviewed by Eric Seidel.

        [GTK] Freetype backend does not support WOFF
        https://bugs.webkit.org/show_bug.cgi?id=51904

        * CMakeListsEfl.txt: Add WOFF support to the sources list.
        * GNUmakefile.am: Add WOFF support to the sources list.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::createFontCustomPlatformData): Call the WOFF decoder when appropriate.
        (WebCore::FontCustomPlatformData::supportsFormat): Advertise support for WOFF.

2011-01-06  James Simonsen  <simonjam@chromium.org>

        Reviewed by Darin Fisher.

        [Web Timing] Remove vendor prefix
        https://bugs.webkit.org/show_bug.cgi?id=48922

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::performance): Rename to performance.
        * page/DOMWindow.h:
        * page/DOMWindow.idl: Rename to performance and make replaceable.

2011-01-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Changed PlatformCALayer API. Added PlatformCALayerClient abstract class which is
        used to communicate from PlatformCALayer to the owner. This replaces passing
        GraphicsLayerCA pointer when creating PlatformCALayer. It also includes the
        API that used to be in PlatformCALayerLayout. GraphicsLayerCA now implements
        the PlatformCALayerClient API.

        This change has little impact on the Mac side but makes the Windows
        interface simpler, especially when handling video layers on Windows.

        * WebCore.xcodeproj/project.pbxproj:
        * config.h:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::layerDidDisplay):
        (WebCore::GraphicsLayer::showDebugBorders):
        (WebCore::GraphicsLayer::showRepaintCounter):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerAnimationStarted):
        (WebCore::GraphicsLayerCA::setContentsToImage):
        (WebCore::GraphicsLayerCA::setContentsToMedia):
        (WebCore::GraphicsLayerCA::layerDidDisplay):
        (WebCore::GraphicsLayerCA::updateSublayerList):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::platformCALayerLayoutSublayersOfLayer):
        (WebCore::GraphicsLayerCA::platformCALayerRespondsToLayoutChanges):
        (WebCore::GraphicsLayerCA::platformCALayerContentsOrientation):
        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
        (WebCore::GraphicsLayerCA::platformCALayerShowDebugBorders):
        (WebCore::GraphicsLayerCA::platformCALayerShowRepaintCounter):
        (WebCore::GraphicsLayerCA::platformCALayerIncrementRepaintCount):
        (WebCore::GraphicsLayerCA::platformCALayerContentsOpaque):
        (WebCore::GraphicsLayerCA::platformCALayerDrawsContent):
        (WebCore::GraphicsLayerCA::platformCALayerLayerDidDisplay):
        (WebCore::GraphicsLayerCA::platformCALayer):
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::owner):
        (WebCore::PlatformCALayer::animationStarted):
        * platform/graphics/ca/PlatformCALayerClient.h: Added.
        (WebCore::PlatformCALayerClient::~PlatformCALayerClient):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setOwner):
        (PlatformCALayer::create):
        (PlatformCALayer::PlatformCALayer):
        (PlatformCALayer::contents):
        (PlatformCALayer::setContents):
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer display]):
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):
        (setLayerNeedsDisplayInRect):
        (-[WebLayer setNeedsDisplay]):
        (-[WebLayer display]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer setNeedsDisplay]):
        (-[WebTiledLayer display]):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::showDebugBorders):
        (WebCore::RenderLayerBacking::showRepaintCounter):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::compositorShowDebugBorders):
        (WebCore::RenderLayerCompositor::compositorShowRepaintCounter):
        (WebCore::RenderLayerCompositor::notifyAnimationStarted):
        (WebCore::RenderLayerCompositor::notifySyncRequired):
        (WebCore::RenderLayerCompositor::paintContents):
        (WebCore::RenderLayerCompositor::showDebugBorders):
        (WebCore::RenderLayerCompositor::showRepaintCounter):

2011-01-06  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Allow framesets after hidden inputs
        https://bugs.webkit.org/show_bug.cgi?id=51998

        This implements the HTML5 spec update in response to:
        http://www.w3.org/Bugs/Public/show_bug.cgi?id=11156

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2010-12-29  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        vertexAttribPointer should raise INVALID_OPERATION if stride/offset is not multiple of the type size
        https://bugs.webkit.org/show_bug.cgi?id=51725

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::vertexAttribPointer):

2011-01-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        [WINCE] Remove JSC::g_stackBase
        https://bugs.webkit.org/show_bug.cgi?id=51779

        * platform/wince/SharedTimerWinCE.cpp:
        (WebCore::TimerWindowWndProc):

2011-01-06  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Introduce QDRTNode for passing WebCore::Node across JS bridge

        This allows LayoutTestController to pass WebCore::Node back to
        layout tests.

        Also amend nodesFromRect-links-and-text.html and
        nodesFromRect-inner-documents.html so that they do not produce
        platform-specific results.

        Unskip:
        fast/dom/nodesFromRect-links-and-text.html
        fast/dom/nodesFromRect-inner-documents.html

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

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtDRTNodeRuntime::create):
        (JSC::Bindings::QtDRTNodeRuntime::get):
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue):

2011-01-06  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Eric Seidel.

        WML Parser should treat line/column number in a consistent way
        https://bugs.webkit.org/show_bug.cgi?id=51601

        XML Parser treats line/column number as 1-based values, but WML ErrorHandler treat them as 0-based.
        Therefore, this patch allows WML ErrorHandler to use 1-based values.

        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::handleError): Treat line/column number as 1 based values.
        * dom/XMLDocumentParser.h: Make textPositionOneBased public and Add TextPosition1(m_lastErrorPosition) to keep error line/column number.
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser): Initialize m_lastErrorPosition. 
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser): Initialize m_lastErrorPosition. 
        * wml/WMLErrorHandling.cpp:
        (WebCore::reportWMLError): Use 1 based value instead of 0 based value to report error line/column number.

2011-01-05  Adam Roben  <aroben@apple.com>

        Remove some dead code from WKCACFLayerRenderer

        Fixes <http://webkit.org/b/51954> WKCACFLayerRenderer has dead and
        redundant code for reacting to changes to the layer tree

        Reviewed by Sam Weinig.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        * platform/graphics/win/WKCACFLayerRenderer.h:
        Removed didFlushContext and the HashMap it depended on. We react to
        changes to the layer tree in layerTreeDidChange instead.

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

        Reviewed by Beth Dakin.

        AX: "AXExpanded" not exposed on most ARIA roles that use aria-expanded
        https://bugs.webkit.org/show_bug.cgi?id=51995

        Test: platform/mac/accessibility/aria-expanded-standard-items.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsARIAExpanded):
        (WebCore::AccessibilityObject::isExpanded):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isVisited):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):

2010-12-28  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Must generate INVALID_VALUE errors for strings containing out-of-range characters
        https://bugs.webkit.org/show_bug.cgi?id=50929

        * html/canvas/WebGLRenderingContext.cpp: Validate characters according to GLSL ES 1.0 spec section 3.1.
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::getAttribLocation):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::shaderSource):
        (WebCore::WebGLRenderingContext::validateString): Helper function to perform the character validation.
        * html/canvas/WebGLRenderingContext.h: Declare validateString().

2011-01-06  Yong Li  <yoli@rim.com>

        Reviewed by Adam Barth.
        Add the test case that is missed in r75066.
        https://bugs.webkit.org/show_bug.cgi?id=48077

        Test case: WebCore/manual-tests/bugzilla-48077.html.

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

        Reviewed by Simon Fraser.

        Implement mozilla's animationTime property
        https://bugs.webkit.org/show_bug.cgi?id=51952

        Implements mozilla's animationTime property as described here:
        https://developer.mozilla.org/en/DOM/window.mozAnimationStartTime
        and http://hacks.mozilla.org/2010/08/more-efficient-javascript-animations-with-mozrequestanimationframe/
        The property is called webkitAnimationTime as calling it the 'Start' time is not very informative.
        This property exposes a notion of a 'current' time to use for declarative animations and allows
        scripts to synchronize imperative animations with declarative ones if they choose to.  Once queried
        this time is saved and used for all declarative animation updates until the embedder paints/composites
        the next frame and clears it, or 15ms elapse (in case the embedder isn't producing frames, for example
        if the page is in a background tab).

        This patch also ensures that all declarative animations started in the same script execution block
        are synchronized even if some time elapses while script is running.

        Test: fast/animation/animation-time.html

        * WebCore.gypi:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitAnimationTime):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Frame.cpp:
        (WebCore::Frame::currentAnimationTime):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::animationTime):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::beginAnimationUpdateTime):
        * page/animation/AnimationTimeController.cpp: Added.
        (WebCore::AnimationTimeController::AnimationTimeController):
        (WebCore::AnimationTimeController::~AnimationTimeController):
        (WebCore::AnimationTimeController::currentAnimationTime):
        (WebCore::AnimationTimeController::clearCurrentAnimationTime):
        (WebCore::AnimationTimeController::clearCurrentAnimationTimeTimerFired):
        * page/animation/AnimationTimeController.h: Added.
        (WebCore::AnimationTimeController::create):

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

        Reviewed by Simon Fraser.

        Null out the parent stylesheet pointer when a css rule is removed.
        https://bugs.webkit.org/show_bug.cgi?id=51993

        Tests: fast/dom/StyleSheet/removed-media-rule-deleted-parent-crash.html
               fast/dom/StyleSheet/removed-stylesheet-rule-deleted-parent-crash.html

        * css/CSSRuleList.cpp:
        (WebCore::CSSRuleList::deleteRule):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::deleteRule):

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

        Reviewed by Kenneth Russell.

        NaN in a TypedArray should be converted to zero only for Float32Array.
        https://bugs.webkit.org/show_bug.cgi?id=46990

        Test: LayoutTests/fast/canvas/webgl/array-unit-tests.html

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::convertArrayValue):
        (WebCore::constructArrayBufferView):
        * html/canvas/Float32Array.h:
        (WebCore::Float32Array::set):
        (WebCore::Float32Array::item):

2011-01-06  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed Windows build fix for r75161.

        * platform/graphics/cg/GraphicsContextCG.cpp: Missing include added.

2011-01-06  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r75139.

        Try to remove include after adding forward-declaration in r75145.

        * platform/graphics/Gradient.h:

2011-01-06  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        https://bugs.webkit.org/show_bug.cgi?id=51811
        Merge m_height and m_width members of ImageData into the new m_size member.

        Image (BitmapImage, ImageSource) types in WebKit use IntSize to store their
        width and height argument, except ImageData. This patch refactors ImageData
        to follow the style of other Image types in WebKit.
        Using of PassRefPtrs other than argument passing is not allowed in WebKit anymore.
        This patch also refactors the PassRefPtr usages of ImageData.

        It's just a refactoring, so we don't need any new tests.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::readTerminal):
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Reader::readImageData):
        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        (WebCore::ImageData::ImageData):
        * html/ImageData.h:
        (WebCore::ImageData::size):
        (WebCore::ImageData::width):
        (WebCore::ImageData::height):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::createEmptyImageData):
        (WebCore::CanvasRenderingContext2D::createImageData):
        (WebCore::CanvasRenderingContext2D::getImageData):
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/haiku/ImageBufferHaiku.cpp:
        (WebCore::getImageData):

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

        Reviewed by Darin Adler.

        document.querySelector(':nth-child(foo)') should throw a syntax error
        https://bugs.webkit.org/show_bug.cgi?id=51231

        Also fixes 
        CSSNthSelector parsing code is illegible and buggy (allows "n3" as a valid selector)
        https://bugs.webkit.org/show_bug.cgi?id=21815

        Add a check in the parser that other than an+b, only "odd" or "even" would be allowed
        as parameters to nth selector.

        Tests: fast/css/css3-nth-tokens-script.html
               fast/css/css3-nth-tokens-style.html

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::isValidNthToken):
        * css/CSSParser.h:

2011-01-06  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] crash in QNetworkReplyHandler::sendResponseIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=51453

        Check if m_reply is NULL before accessing.

        * manual-tests/load-deferrer-resume-crash.html: Added.
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::setLoadMode):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

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

        Reviewed by Csaba Osztrogonác.

        [Qt][V8] Fix the build when DEVICE_ORIENTATION is enabled.

        No new tests needed.

        * WebCore.pro: remove duplications and globally add RuntimeEnabledFeatures.

2011-01-06  Helder Correia  <helder@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt][GTK] Use GraphicsContext::hasShadow() in port-specific code
        https://bugs.webkit.org/show_bug.cgi?id=51985

        r75139 introduced GraphicsContext::hasShadow(). This can now simplify
        and unify some code in the Qt and GTK ports.

        No new tests necessary for this refactoring.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):

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

        Fix Chromium Mac build.

        * platform/graphics/Gradient.h: Forward-declare CGContextRef.
        This might even make it possible to remove the include of
        <CoreGraphics/CoreGraphics.h> for PLATFORM(WIN), but I did not
        do that at this time because I don't want to break the Windows
        build when fixing the Chromium build.

2011-01-05  Xianzhu Wang  <wangxianzhu@google.com>

        Reviewed by David Levin.

        Implement RemoteFontStream's skip behavior (in FontCustomPlatformData.cpp)
        https://bugs.webkit.org/show_bug.cgi?id=51736

        No new tests. This change has potential effect on @font-face CSS feature
        on ports using Skia. Tested on Chromium that this change won't break
        fast/css/font-face-remote.html. This change can make the test pass on
        other ports using Skia.

        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::RemoteFontStream::read):

2011-01-05  Helder Correia  <helder@sencha.com>

        Reviewed by Simon Fraser.

        Shadows are not drawn when filling a rect with a gradient fillStyle on Mac and Chromium-Mac
        https://bugs.webkit.org/show_bug.cgi?id=51869

        GraphicsContext::fillRect(const FloatRect&) is clipping to the rect.
        The shadow is being drawn, but getting clipped to the rect being filled.
        The solution is to draw the gradient into a CGLayer (when a shadow is
        required), then render the layer to the GraphicsContext.

        This patch also fixes:
        canvas/philip/tests/2d.shadow.gradient.alpha.html
        canvas/philip/tests/2d.shadow.gradient.basic.html
        canvas/philip/tests/2d.shadow.gradient.transparent.2.html

        Test: fast/canvas/canvas-fillRect-gradient-shadow.html

        * platform/graphics/Gradient.h:
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRect):

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

        Reviewed by Darin Adler.

        Debug and Release builds on Windows clobber each other
        https://bugs.webkit.org/show_bug.cgi?id=49185

        Changes the structure of WebKitBuild build products directory so we
        completely separate each build configuration into independent directories.
        
        Although we previously had per-configuration directories for obj, this change adds
        per-configuration directories for bin, lib, obj, and include. Each configuration's
        build products are stored within a directory inside of WebKitBuild.
        
        Most use of $(WebKitOutputDir) in the build files has been replaced by $(ConfigurationBuildDir),
        defined in common.vsprops to be $(WebKitOutputDir)\$(ConfigurationName).

        * WebCore.vcproj/QTMovieWinCommon.vsprops:
        * WebCore.vcproj/QTMovieWinPostBuild.cmd:
        * WebCore.vcproj/QTMovieWinPreBuild.cmd:
        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/WebCoreGeneratedCairo.vsprops:
        * WebCore.vcproj/WebCoreGeneratedCommon.vsprops:
        * WebCore.vcproj/WebCoreMediaQT.vsprops:
        * WebCore.vcproj/WebCorePostBuild.cmd:
        * WebCore.vcproj/WebCorePreBuild.cmd:
        * WebCore.vcproj/copyForwardingHeaders.cmd:
        * WebCore.vcproj/copyInspectorFiles.cmd:

2011-01-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Ariya Hidayat.

        Directly composited SVG images fail to render
        https://bugs.webkit.org/show_bug.cgi?id=51975
        
        There was already code, added in r67900, to detect whether an image
        may be directly composited, by checking to see if it's a bitmap image.
        
        However, CachedImage::image() returns the nullImage() if m_image is null,
        which is a BitmapImage, confusing this test.

        Test: compositing/images/direct-svg-image.html

        * loader/cache/CachedImage.cpp: Remove nullImage(), since Image has
        exactly the same method.
        (WebCore::CachedImage::image): Use Image::nullImage().
        * loader/cache/CachedImage.h:
        (WebCore::CachedImage::hasImage): New method to ask whether the m_image is
        non-null.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage): Use hasImage()
        so that we don't test the nullImage.

2011-01-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Fix percentage values in radius of radial gradients
        https://bugs.webkit.org/show_bug.cgi?id=51979
        
        Handle percentage values for the ending size of radial gradients.

        Test: fast/gradients/css3-radial-gradients3.html

        * css/CSSGradientValue.cpp:
        (WebCore::CSSRadialGradientValue::resolveRadius): Add parameter for height or width, which is
        non-null if percentage values are allowed, and compute percentage values when we see them.
        (WebCore::CSSRadialGradientValue::createGradient): Pass height or width down to say that
        percentages are OK when resolving end radii.
        * css/CSSGradientValue.h: New parameter for resolveRadius.

2011-01-05  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        [Web Timing] Zero out some values on cross-origin redirects
        https://bugs.webkit.org/show_bug.cgi?id=49294

        Tests: http/tests/misc/webtiming-cross-origin-redirect.php
               http/tests/misc/webtiming-origins.html

        * loader/DocumentLoadTiming.h:
        (WebCore::DocumentLoadTiming::DocumentLoadTiming): Add flags for cross-origin redirects and same-origin navigation.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::~FrameLoader):
        (WebCore::FrameLoader::stopLoading): Don't overwrite previous unload times.
        (WebCore::FrameLoader::completed):
        (WebCore::FrameLoader::loadWithDocumentLoader): Remember previous URL to see if navigation is same-origin.
        (WebCore::FrameLoader::commitProvisionalLoad): Set flag if navigation is same-origin.
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest): Set flag on cross-origin redirects.
        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::redirectCount): Clear if cross-origin redirect flag is set.
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::redirectStart): Ditto.
        (WebCore::PerformanceTiming::redirectEnd): Ditto.
        (WebCore::PerformanceTiming::unloadEventStart): Clear if cross-origin navigation is set.
        (WebCore::PerformanceTiming::unloadEventEnd): Ditto.

2011-01-05  Helder Correia  <helder@sencha.com>

        Reviewed by Ariya Hidayat.

        [Qt] Default focus ring is too wide
        https://bugs.webkit.org/show_bug.cgi?id=51854

        This is an intermediate step to solve this bug. Use QPalette::Highlight
        instead of default half-transparent black as the focus ring color.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::drawFocusRingForPath):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::platformFocusRingColor):
        * platform/qt/RenderThemeQt.h:

2011-01-05  James Simonsen  <simonjam@chromium.org>

        Reviewed by Darin Fisher.

        [Web Timing] requestStart and responseStart should be available even if the document is still loading
        https://bugs.webkit.org/show_bug.cgi?id=51368

        Test: http/tests/misc/webtiming-slow-load.php

        * page/PerformanceTiming.cpp:
        (WebCore::getPossiblySkewedTimeInKnownRange): Handle case where response is not yet complete.
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToAbsolute): Use full upper bound.

2011-01-05  Chris Rogers  <crogers@google.com>

        Reviewed by Darin Fisher.

        Add WebKitClient::createAudioDevice() for Chromium port of web audio API
        https://bugs.webkit.org/show_bug.cgi?id=51424

        No new tests since audio API is not yet implemented.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2011-01-05  Anders Carlsson  <andersca@apple.com>

        Try again.

        * WebCore.exp.in:

2011-01-05  Anders Carlsson  <andersca@apple.com>

        Attempt to fix Leopard build.

        * WebCore.exp.in:

2011-01-05  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] refactor complex text on Linux
        https://bugs.webkit.org/show_bug.cgi?id=51956

        Pull out TextRunWalker from FontLinux.cpp.  Put it in its own file.
        Rename it to ComplexTextController, to match platform/graphics/mac
        more closely.

        No tests because the change is just renaming a class.

        * WebCore.gyp/WebCore.gyp:
        * platform/graphics/chromium/ComplexTextControllerLinux.cpp: Added.
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::~ComplexTextController):
        (WebCore::ComplexTextController::isWordBreak):
        (WebCore::ComplexTextController::determineWordBreakSpacing):
        (WebCore::ComplexTextController::setPadding):
        (WebCore::ComplexTextController::reset):
        (WebCore::ComplexTextController::setBackwardsIteration):
        (WebCore::ComplexTextController::nextScriptRun):
        (WebCore::ComplexTextController::widthOfFullRun):
        (WebCore::ComplexTextController::setupFontForScriptRun):
        (WebCore::ComplexTextController::allocHarfbuzzFont):
        (WebCore::ComplexTextController::deleteGlyphArrays):
        (WebCore::ComplexTextController::createGlyphArrays):
        (WebCore::ComplexTextController::resetGlyphArrays):
        (WebCore::ComplexTextController::shapeGlyphs):
        (WebCore::ComplexTextController::setGlyphXPositions):
        (WebCore::ComplexTextController::normalizeSpacesAndMirrorChars):
        (WebCore::ComplexTextController::getNormalizedTextRun):
        * platform/graphics/chromium/ComplexTextControllerLinux.h: Added.
        (WebCore::ComplexTextController::setWordSpacingAdjustment):
        (WebCore::ComplexTextController::setLetterSpacingAdjustment):
        (WebCore::ComplexTextController::letterSpacing):
        (WebCore::ComplexTextController::setXOffsetToZero):
        (WebCore::ComplexTextController::rtl):
        (WebCore::ComplexTextController::glyphs):
        (WebCore::ComplexTextController::length):
        (WebCore::ComplexTextController::xPositions):
        (WebCore::ComplexTextController::advances):
        (WebCore::ComplexTextController::width):
        (WebCore::ComplexTextController::logClusters):
        (WebCore::ComplexTextController::numCodePoints):
        (WebCore::ComplexTextController::fontPlatformDataForScriptRun):
        (WebCore::ComplexTextController::isCodepointSpace):
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::glyphIndexForXPositionInScriptRun):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):

2011-01-05  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Darin Adler.

        Merge cf and mac header files with same name
        https://bugs.webkit.org/show_bug.cgi?id=51916

        Since most of the code in the header files is identical, we can merge them and have #if
        USE(CFNETWORK) to separate out the network specific parts.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/cf/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::sender):
        (WebCore::AuthenticationChallenge::nsURLAuthenticationChallenge):
        * platform/network/cf/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        * platform/network/mac/AuthenticationChallenge.h: Removed.
        * platform/network/mac/ResourceError.h: Removed.
        * platform/network/mac/ResourceRequest.h: Removed.
        * platform/network/mac/ResourceResponse.h: Removed.

2011-01-05  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson.

        Implement word transformation
        https://bugs.webkit.org/show_bug.cgi?id=51943

        Export Editor functions needed by WebKit2.

        * WebCore.exp.in:

2011-01-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Implement repeating CSS3 gradients
        https://bugs.webkit.org/show_bug.cgi?id=51843
        
        Add support for repeating gradients, via the new gradient functions
        -webkit-repeating-linear-gradient and -webkit-repeating-radial-gradient.

        Tests: fast/gradients/css3-repeating-linear-gradients.html
               fast/gradients/css3-repeating-radial-gradients.html

        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::isRepeating): Accessor for whethe the gradient repeats.
        (WebCore::CSSGradientValue::CSSGradientValue): Pass CSSGradientRepeat in.
        (WebCore::CSSLinearGradientValue::create): Pass CSSGradientRepeat.
        (WebCore::CSSLinearGradientValue::CSSLinearGradientValue): Ditto
        (WebCore::CSSRadialGradientValue::create): Ditto.
        (WebCore::CSSRadialGradientValue::CSSRadialGradientValue): Ditto.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops): Pass maxLengthForRepeat, which
        is used for repeating radial gradients. Add code to repeat the stops,
        adding stops before the start, and after the end until the 0-N range is
        covered, where N is large enough to ensure the box is covered. Fix an issue
        with repeating gradients where if both stops were < 0, it would fail to clamp
        them to 0.
        
        (WebCore::CSSLinearGradientValue::cssText): Output strings for repeating gradients.
        (WebCore::CSSLinearGradientValue::createGradient): maxExtent for linear gradients is 1,
        because they are guaranteed to fill the box already.
        (WebCore::CSSRadialGradientValue::cssText): Output strings for repeating gradients.
        (WebCore::CSSRadialGradientValue::createGradient): Compute the distance to the furthest
        corner in order to inform addStops() how much additional extent is required.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseDeprecatedGradient): Old gradients never repeat.
        (WebCore::CSSParser::parseLinearGradient): Pass down CSSGradientRepeat.
        (WebCore::CSSParser::parseRadialGradient): Ditto.
        (WebCore::CSSParser::isGeneratedImageValue): Add repeating gradient functions.
        (WebCore::CSSParser::parseGeneratedImage): Ditto.
        * css/CSSParser.h: Pass CSSGradientRepeat to gradient functions.
        * platform/graphics/cg/GradientCG.cpp: Remove unused #include.

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

        Reviewed by Ariya Hidayat.

        ContextShadow::blurLayerImage() not endian-safe
        https://bugs.webkit.org/show_bug.cgi?id=51822

        Correct the channel map in ContextShadow to reflect the different
        ordering of pixels on processors with different endianness.

        No new tests. This is covered by the existing shadow tests. It was
        not discovered, because all of the bots using ContextShadow are
        little-endian.

        * platform/graphics/ContextShadow.cpp:
        (WebCore::ContextShadow::blurLayerImage): Initialize the channel mapping
        based on machine endianness.

2011-01-05  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Nate Chapin.

        [Chromium] Crash when drawing PDF plug-in scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=51942

        Pepper plug-in scrollbars don't have a parent, guard against that before
        seeing if the parent is a FrameView.

        Not testable via layout tests, verified fix by hand.
        
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::paint):

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

        Unreviewed.

        Update FIXME comment to sound better. Also initialize the block to fix compile.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):

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

        Reviewed by Dave Hyatt.

        Do not merge anonymous blocks when one of them is the one getting removed.
        https://bugs.webkit.org/show_bug.cgi?id=51919

        Test: fast/block/merge-anonymous-block-remove-child-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeChild):

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

        Reviewed by Eric Seidel.

        ApplyStyleCommand::applyRelativeFontStyleChange should take EditingStyle*
        https://bugs.webkit.org/show_bug.cgi?id=50641

        Modified applyRelativeFontStyleChange to take EditingStyle instead of CSSMutableStyleDeclaration.
        Also extracted the logic to obtain the font size delta from ApplyStyleCommand to EditingStyle.
        The font size delta is now stored as a member variable of EditingStyle as supposed to a property
        in CSSMutableStyleDeclration as soon as EditingStyle is instantiated.

        No new tests are added since this is a refactoring.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::doApply): Calls applyRelativeFontStyleChange.
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): Takes EditingStyle.
        * editing/ApplyStyleCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::EditingStyle): Initializes m_fontSizeDelta.
        (WebCore::EditingStyle::init): Ditto.
        (WebCore::EditingStyle::extractFontSizeDelta): Extracted from applyRelativeFontStyleChange.
        (WebCore::EditingStyle::isEmpty): Takes care of m_fontSizeDelta.
        (WebCore::EditingStyle::setStyle): Calls extractFontSizeDelta.
        (WebCore::EditingStyle::overrideWithStyle): Ditto.
        (WebCore::EditingStyle::clear): Initializes m_fontSizeDelta.
        (WebCore::EditingStyle::copy): Calls extractFontSizeDelta.
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::fontSizeDelta): Added.
        (WebCore::EditingStyle::hasFontSizeDelta): Added.
        * editing/Editor.h:

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

        Reviewed by Darin Adler.

        <rdar://problem/8799835> hyphenate-character: auto should fall back to hyphen-minus if the primary font lacks a hyphen glyph
        https://bugs.webkit.org/show_bug.cgi?id=51915

        This changes the results of existing tests in fast/text.

        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::primaryFontHasGlyphForCharacter): Added.
        * rendering/style/RenderStyle.cpp:
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::primaryFontHasGlyphForCharacter): Added a stub.
        (WebCore::RenderStyle::hyphenString): For hyphenate-character: auto, return a
        hyphen only if the primary font has a hyphen glyph, and otherwise return a
        hyphen-minus.

2011-01-05  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] [Symbian] Make CONFIG-=def_files the default configuration for trunk builds
        https://bugs.webkit.org/show_bug.cgi?id=51888

        Overrule Qt's default from qconfig.pri for non-production builds so
        that CONFIG(def_files) evaluates to false and QtWebKit trunk builds succeed.

        No new tests as there is no new functionality.

        * WebCore.pro:

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

        Unreviewed, rolling out r74778.
        http://trac.webkit.org/changeset/74778
        https://bugs.webkit.org/show_bug.cgi?id=51930

        Android and QtWebKit-V8 uses V8DOMWindowShell::setContext.
        (Requested by bbandix on #webkit).

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::setContext):
        * bindings/v8/V8DOMWindowShell.h:

2011-01-05  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Animated GIF images does not animate 10x as expected by default.
        https://bugs.webkit.org/show_bug.cgi?id=36818

        Add a test animated GIF which should be displayed 2 times and stop.

        * manual-tests/animated-gif-looping.html:
        * manual-tests/resources/animated-2x.gif: Added.

2011-01-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fork code of ScrollbarThemeGtk that will differ for GTK+ 3
        https://bugs.webkit.org/show_bug.cgi?id=51923

        Split out pieces of ScrollbarThemeGtk into ScrollbarThemeGtk2 and
        ScrollbarThemeGtk3 that will differ between GTK+ 2 and GTK+ 3.

        No new tests. This should not change functionality.

        * GNUmakefile.am: Add ScrollbarThemeGtk2.cpp and ScrollbarThemeGtk3.cpp
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::updateScrollbarsFrameThickness):
        * platform/gtk/ScrollbarThemeGtk.h:
        * platform/gtk/ScrollbarThemeGtk2.cpp: Added.
        (WebCore::ScrollbarThemeGtk::updateThemeProperties):
        (WebCore::ScrollbarThemeGtk::paintTrackBackground):
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground):
        (WebCore::ScrollbarThemeGtk::paintThumb):
        (WebCore::ScrollbarThemeGtk::paintButton):
        * platform/gtk/ScrollbarThemeGtk3.cpp: Added.
        (WebCore::ScrollbarThemeGtk::updateThemeProperties):
        (WebCore::ScrollbarThemeGtk::paintTrackBackground):
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground):
        (WebCore::ScrollbarThemeGtk::paintThumb):
        (WebCore::ScrollbarThemeGtk::paintButton):

2011-01-05  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Fix the usage of SOURCE_GROUP
        https://bugs.webkit.org/show_bug.cgi?id=51739

        * CMakeLists.txt:

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

        Reviewed by Csaba Osztrogonác.

        [Qt][V8] Fix the build after recent changes.

        No new tests needed.

        * WebCore.pro: Add missing files, and remove obsolete ones.

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

        Reviewed by Adam Barth.

        Suspend HTMLParserScheduler when page load is deferred to
        avoid potential JS re-entrancy. Otherwise, when JS execution is triggered
        from an external script or by events, and is blocked by a modal dialog,
        WebKit can parse more HTML source and also start another JS execution.
        
        https://bugs.webkit.org/show_bug.cgi?id=48077

        Test case: WebCore/manual-tests/bugzilla-48077.html.

        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::suspendScheduledTasks):
        (WebCore::DocumentParser::resumeScheduledTasks):
        * dom/DocumentParser.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::suspendScheduledTasks):
        (WebCore::HTMLDocumentParser::resumeScheduledTasks):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        (WebCore::HTMLParserScheduler::suspend):
        (WebCore::HTMLParserScheduler::resume):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::isScheduledForResume):
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2011-01-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen, Gustavo Noronha Silva

        [GStreamer] MediaPlayerPrivateGStreamer::totalBytes() does not work reliably
        https://bugs.webkit.org/show_bug.cgi?id=51926

        Work around potential upstream bug: Querying a GstBin for the duration,
        will forward the query to all sink children. Our WebKitWebSrc however
        is a bin with only source children, therefore the query fails. Until
        this is changed upstream, this patch works around it as follows,
        based on suggestion by Philippe Normand and Sebastian Dröge:

        When the initial query fails, attempt the same query on all source
        pads and take the maximum length reported.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes):

2011-01-05  Philippe Normand  <pnormand@igalia.com>

        Rubber-stamped by Eric Seidel.

        [GStreamer] build fails with gstreamer core 0.10.31 and -plugins-base 0.10.30
        https://bugs.webkit.org/show_bug.cgi?id=51810

        Based on a patch by Mart Raudsepp.

        No new tests, build fix only.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::setWindowOverlay): Use the new xoverlay
        API if the GST_CHECK_PLUGINS_BASE_VERSION macro is defined. It was
        introduced in same version as the xoverlay API change.

2011-01-05  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Dirk Schulze.

        Malformed SVG causes crash in updateContainerOffset
        https://bugs.webkit.org/show_bug.cgi?id=44610

        We should check recursive <use> at the begining of
        WebCore::SVGUseElement::buildInstanceTree instead
        of at the end of it because the target element's
        children may cause infinite recursive <use>.

        Test: svg/custom/recursive-use.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::hasCycleUseReferencing):
        * svg/SVGUseElement.h:

2011-01-04  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=51907
        Style selector should only be recalculated when the pending sheet count goes to zero
        
        Shark says this is a significant performance improvement on some sites with lots of stylesheets.

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

2011-01-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use GtkStyleContext to get platform colors
        https://bugs.webkit.org/show_bug.cgi?id=51830

        Use GtkStyleContext API to get platform colors when building with
        GTK+ 3.x.

        No new tests. This should not change functionality.

        * platform/graphics/Color.h: Add specialized constructor for GdkRGBA.
        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::Color):
        (WebCore::Color::operator GdkRGBA):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::activeListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::systemColor):

2011-01-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Build fix for GTK when using gtk+-3 after r75009.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::RenderThemeGtk::getStockIcon): Use adoptGRef instead of
        adoptGRefPtr which doesn't exist.

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=51903
        Tell UI process which subframe is largest

        * WebCore.exp.in: Exported FrameView::contentsSize().

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

        Unreviewed. GTK build fix.

        WK2: Support Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=51859

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

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

        Unreviewed, rolling out r74992.
        http://trac.webkit.org/changeset/74992
        https://bugs.webkit.org/show_bug.cgi?id=51917

        Crash in HTMLDocumentParser::suspendScheduledTasks()
        (Requested by tkent on #webkit).

        * dom/DocumentParser.cpp:
        * dom/DocumentParser.h:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::isScheduledForResume):
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2011-01-04  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] Add support for non-trivial context menu action
        https://bugs.webkit.org/show_bug.cgi?id=51902

        Fix the preprocessor guard for ContextMenuItemTagSelectAll in
        the implementation of ContextMenuController::contextMenuItemSelected(). The guard was
        inconsistent with what is defined in ContextMenuItem.h.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):

2011-01-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Ryosuke Niwa.

        Avoid manual ref/deref in AsyncScriptRunner by using PendingScript
        https://bugs.webkit.org/show_bug.cgi?id=51723

        ScriptElement should also be able to keep its Element+CachedScript in
        a PendingScript, and then executeScriptSoon can accept a PendingScript.
        Once HTMLScriptRunner, ScriptElement, and AsyncScriptRunner all use
        PendingScripts, then generic request and execute which operate on
        PendingScripts can be factored out to avoid code duplicate that we have.

        No new tests because no new functionality.

        * dom/AsyncScriptRunner.cpp:
        (WebCore::AsyncScriptRunner::~AsyncScriptRunner):
        (WebCore::AsyncScriptRunner::executeScriptSoon):
        (WebCore::AsyncScriptRunner::timerFired):
        * dom/AsyncScriptRunner.h:
        * dom/PendingScript.h: Add ctor which sets element and cachedScript. Rename adoptElement->setElement.
        * dom/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::requestPendingScript):

2011-01-04  Jeff Miller  <jeffm@apple.com>

        Reviewed by Darin Adler.

        Member variable and method naming cleanup to be consistent with WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=51228

        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::eventActivatedView):
        Rename activatedWebView() to didActivateWebView().
        
        * platform/PlatformMouseEvent.h:
        Rename m_activatedWebView to m_didActivateWebView.
        
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        Initialize platform-specific member variables in PlatformMouseEvent constructors.
        
        (WebCore::PlatformMouseEvent::didActivateWebView):
        Rename activatedWebView() to didActivateWebView().

        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        Rename m_activatedWebView to m_didActivateWebView.

2011-01-04  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        CSS3 :nth-child selector and valid whitespace test fails
        https://bugs.webkit.org/show_bug.cgi?id=36279

        Teach the tokenizer to allow white spaces around [+/-] signs in nth constructs.

        Test: fast/css/css3-nth-space.html

        * css/tokenizer.flex:

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

        Unreviewed. Build fix.

        WK2: Support Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=51859

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (fallbackObject):

2011-01-04  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] PNG compression settings optimized for speed
        https://bugs.webkit.org/show_bug.cgi?id=51719

        Although Z_HUFFMAN_ONLY is the fastest on hard-to-compress images,
        it is also the slowest, by a wide margin, on easy-to-compress images.
        Use a more balanced configuration, based on the libpng compression defaults,
        but with a faster compression level (3 instead of 6), and a faster filter
        ("sub" instead of "all").

        No change in behaviour, so no new tests.

        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::PNGImageEncoder::encode):

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

        Reviewed by Sam Weinig.

        WK2: Support Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=51859

        WK2 doesn't use platform scroll views anymore. Accessibility code
        needs to have its own scroll views. 

        Test: platform/mac/accessibility/webkit-scrollarea.html

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::rootObject):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::handleScrollbarUpdate):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::handleScrollbarUpdate):
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityAllInOne.cpp:
        * accessibility/AccessibilityImageMapLink.cpp:
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityListBoxOption.cpp:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateChildrenIfNecessary):
        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
        (WebCore::AccessibilityObject::axObjectCache):
        (WebCore::AccessibilityObject::focusedUIElement):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isAccessibilityScrollView):
        (WebCore::AccessibilityObject::isScrollView):
        (WebCore::AccessibilityObject::canSetNumericValue):
        (WebCore::AccessibilityObject::scrollBar):
        (WebCore::AccessibilityObject::size):
        (WebCore::AccessibilityObject::setValue):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        (WebCore::AccessibilityRenderObject::updateChildrenIfNecessary):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityScrollView.cpp: Added.
        (WebCore::AccessibilityScrollView::AccessibilityScrollView):
        (WebCore::AccessibilityScrollView::create):
        (WebCore::AccessibilityScrollView::scrollBar):
        (WebCore::AccessibilityScrollView::children):
        (WebCore::AccessibilityScrollView::updateChildrenIfNecessary):
        (WebCore::AccessibilityScrollView::removeChildScrollbar):
        (WebCore::AccessibilityScrollView::addChildScrollbar):
        (WebCore::AccessibilityScrollView::addChildren):
        (WebCore::AccessibilityScrollView::webAreaObject):
        (WebCore::AccessibilityScrollView::accessibilityHitTest):
        (WebCore::AccessibilityScrollView::document):
        (WebCore::AccessibilityScrollView::elementRect):
        (WebCore::AccessibilityScrollView::parentObject):
        * accessibility/AccessibilityScrollView.h: Added.
        (WebCore::AccessibilityScrollView::roleValue):
        (WebCore::AccessibilityScrollView::scrollView):
        (WebCore::AccessibilityScrollView::accessibilityIsIgnored):
        (WebCore::AccessibilityScrollView::isAccessibilityScrollView):
        (WebCore::toAccessibilityScrollView):
        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::AccessibilityScrollbar):
        (WebCore::AccessibilityScrollbar::create):
        (WebCore::AccessibilityScrollbar::elementRect):
        (WebCore::AccessibilityScrollbar::document):
        (WebCore::AccessibilityScrollbar::orientation):
        (WebCore::AccessibilityScrollbar::isEnabled):
        (WebCore::AccessibilityScrollbar::valueForRange):
        (WebCore::AccessibilityScrollbar::setValue):
        * accessibility/AccessibilityScrollbar.h:
        (WebCore::AccessibilityScrollbar::setParent):
        (WebCore::AccessibilityScrollbar::canSetValueAttribute):
        (WebCore::AccessibilityScrollbar::canSetNumericValue):
        (WebCore::AccessibilityScrollbar::isAccessibilityScrollbar):
        (WebCore::AccessibilityScrollbar::parentObject):
        (WebCore::AccessibilityScrollbar::roleValue):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper remoteAccessibilityParentObject]):
        (-[AccessibilityObjectWrapper position]):
        (-[AccessibilityObjectWrapper scrollViewParent]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityHitTest:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        * dom/Document.cpp:
        (WebCore::Document::axObjectCache):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::accessibilityRemoteObject):
        * loader/FrameLoaderClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::axObjectCache):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::~Scrollbar):
        (WebCore::Scrollbar::scroll):
        (WebCore::Scrollbar::axObjectCache):
        * platform/Scrollbar.h:
        * platform/Widget.h:
        (WebCore::Widget::axObjectCache):

2011-01-04  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Add support to compositor to composite to offscreen texture.
        https://bugs.webkit.org/show_bug.cgi?id=50833

        A patch to extend compositor to be able to composite into an offscreen texture instead
        of just directly to the display buffer. Builds on RenderSurfaceChromium support.
        Explicitly resets alpha channel before rendering to display.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::updateAndDrawRootLayer):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::setCompositeOffscreen):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::setScissorToRect):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::isCompositingOffscreen):
        (WebCore::LayerRendererChromium::getOffscreenLayerTexture):

2011-01-04  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] depend on harfbuzz explicitly
        https://bugs.webkit.org/show_bug.cgi?id=51895

        platform/graphics/chromium uses Harfbuzz directly.  Rather than
        expecting Skia to adjust the include paths, be explicit about
        the dependency.

        * WebCore.gyp/WebCore.gyp:

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

        Reviewed by Brady Eidson.

        Add back/forward encoding and decoding to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51901

        * WebCore.exp.in: Export functions used in WebKit2.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTree): Use references instead of pointers.
        (WebCore::HistoryItem::encodeBackForwardTreeNode): Ditto.
        (WebCore::HistoryItem::decodeBackForwardTree): Ditto.
        * history/HistoryItem.h: Ditto.
        * platform/network/FormData.cpp:
        (WebCore::encode): Ditto.
        (WebCore::decode): Ditto.
        (WebCore::FormData::encodeForBackForward): Ditto.
        (WebCore::FormData::decodeForBackForward): Ditto.
        * platform/network/FormData.h: Ditto.

2011-01-04  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Implement sel.modify('move', 'left'/'right', 'lineBoundary').
        https://bugs.webkit.org/show_bug.cgi?id=33435

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyMovingRight):
        (WebCore::SelectionController::modifyMovingLeft):
        * editing/visible_units.cpp:
        (WebCore::logicalStartOfLine):
        (WebCore::logicalEndOfLine):
        (WebCore::leftBoundaryOfLine):
        (WebCore::rightBoundaryOfLine):
        * editing/visible_units.h:

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

        Reviewed by Xan Lopez.

        [GTK] Use the default CSS text input control border width of relying on the GTK+ theme
        https://bugs.webkit.org/show_bug.cgi?id=51887

        Do not rely on the GTK+ theme to determine text control borders. This simplifies
        the RenderTheme code, prevents metrics differences between GTK+ 2.x and 3.x and
        doesn't break the rendering of any theme that I've encountered.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustSearchFieldStyle): No longer call setTextInputBorders, but
        still disable any border radius.
        * platform/gtk/RenderThemeGtk.h: Remove setTextInputBorders and no longer override the
        default style of text areas and text input controls.
        * platform/gtk/RenderThemeGtk2.cpp: Ditto.
        * platform/gtk/RenderThemeGtk3.cpp: Ditto.

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

        Reviewed by Darin Adler.

        Remove the last non-GObject usage of PlatformRefPtr and move the code to GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=51846

        No new tests. This should not introduce any functional changes.

        Changed all references to PlatformRefPtr in GTK+ code to GRefPtr. Changed
        all references to PlatformRefPtr in Brew code to RefPtr.

2011-01-04  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/51890> Move ResourceLoadPriority.h into WebCore/platform/network

        Reviewed by Antti Koivisto.

        This is needed to prevent a WebCore/platform policy violation in
        my next patch.

        * WebCore.gypi: Updated for moved header.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/network/ResourceLoadPriority.h: Renamed from WebCore/loader/ResourceLoadPriority.h.

2011-01-04  Brady Eidson  <beidson@apple.com>

        Reviewed by a spell checker.

        * storage/StorageMap.h: mesured?  Really?

2011-01-04  Carlos Garcia Campos  <cgarcia@igalia.com> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Port stock icon painting to GtkStyleContext
        https://bugs.webkit.org/show_bug.cgi?id=51764

        Port stock icon painting for media and search input elements to
        GtkStyleContext. Also create the initial machinery for accessing
        style contexts for all GTK+ 3.x based widgets.

        No new tests. This should not change functionality.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintGdkPixbuf):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        (WebCore::RenderThemeGtk::paintMediaButton):
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/RenderThemeGtk2.cpp:
        (WebCore::RenderThemeGtk::getStockIcon):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::gtkStyleChangedCallback):
        (WebCore::styleContextMap):
        (WebCore::getStyleContext):
        (WebCore::RenderThemeGtk::paintMenuList):

2010-12-31  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Hyatt.

        Scripts should not be executed before preceding stylesheets are loaded
        https://bugs.webkit.org/show_bug.cgi?id=8852

        Block inline script execution on pending stylesheet loads. This matches
        other browsers and HTML5.

        Tests: fast/tokenizer/inline-script-stylesheet-write.html
               fast/tokenizer/inline-script-stylesheet.html

        * dom/PendingScript.cpp:
        (WebCore::PendingScript::releaseElementAndClear):
        * dom/PendingScript.h:
        (WebCore::PendingScript::PendingScript):
        (WebCore::PendingScript::operator=):
        (WebCore::PendingScript::startingPosition):
        (WebCore::PendingScript::setStartingPosition):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        
        This fixes an unrelated bug with beforeload events that was exposed by the other
        changes (fast/dom/beforeload/remove-link-in-beforeload-listener.html).
        
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::sourceFromPendingScript):
        (WebCore::HTMLScriptRunner::runScript):

2011-01-04  Xianzhu Wang  <wangxianzhu@google.com>

        Reviewed by Darin Adler.

        Let DataView.getInt8() and DataView.setInt8() use int8_t instead of
        ambiguous 'char' to fix fast/canvas/webgl/data-view-test.html failure
        on ARM.
        https://bugs.webkit.org/show_bug.cgi?id=51861

        By the way, changed other getIntXX() and setIntXX() methods to use
        more precise integer types.

        * bindings/js/JSDataViewCustom.cpp:
        (WebCore::setDataViewMember):
        * bindings/v8/custom/V8DataViewCustom.cpp:
        (WebCore::V8DataView::getInt8Callback):
        (WebCore::V8DataView::setInt8Callback):
        * html/canvas/DataView.cpp:
        (WebCore::DataView::getInt8):
        (WebCore::DataView::setInt8):
        * html/canvas/DataView.h:
        * html/canvas/DataView.idl:

2011-01-04  Yong Li  <yoli@rim.com>

        Reviewed by Adam Barth.

        Suspend HTMLParserScheduler when page load is deferred to
        avoid potential JS re-entrancy. Otherwise, when JS execution is triggered
        from an external script or by events, and is blocked by a modal dialog,
        WebKit can parse more HTML source and also start another JS execution.
        
        https://bugs.webkit.org/show_bug.cgi?id=48077

        Test case: WebCore/manual-tests/bugzilla-48077.html.

        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::suspendScheduledTasks):
        (WebCore::DocumentParser::resumeScheduledTasks):
        * dom/DocumentParser.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::suspendScheduledTasks):
        (WebCore::HTMLDocumentParser::resumeScheduledTasks):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        (WebCore::HTMLParserScheduler::suspend):
        (WebCore::HTMLParserScheduler::resume):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::isScheduledForResume):
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2011-01-04  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Include glib-object.h for GObject
        https://bugs.webkit.org/show_bug.cgi?id=51876

        * bindings/gobject/DOMObjectCache.cpp:

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

        Reviewed by Dan Bernstein.

        Clicking on the first or the last letter of LTR/RTL text in a RTL/LTR block puts caret on the opposite side.
        https://bugs.webkit.org/show_bug.cgi?id=50992

        Fixed the bug by interchanging the offset when the direction of inline text box and the containing block
        does not match. Reused the code added by http://trac.webkit.org/changeset/73553.

        Test: editing/selection/caret-bidi-first-and-last-letters.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::offsetForPosition):

2010-12-29  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Remove 2 unnecessary includes from Document.h
        https://bugs.webkit.org/show_bug.cgi?id=51727

        No new tests because no changed functionality.

        * dom/Document.cpp:
        * dom/Document.h:
        * editing/Editor.cpp:
        * editing/SpellChecker.h:
        * editing/SplitTextNodeCommand.cpp:
        * editing/TextCheckingHelper.cpp:
        * page/FrameView.cpp:
        * page/Page.cpp:
        * rendering/HitTestResult.cpp:
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        * rendering/svg/SVGInlineFlowBox.cpp:

2011-01-04  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix.

        * CMakeListsWinCE.txt: Added missing include directories, files and libraries.

2011-01-04  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Simon Hausmann.

        Provide an interface to require using fullscreen mediaplayer
        https://bugs.webkit.org/show_bug.cgi?id=51133

        Only video should be displayed in fullscreen when 
        requiresFullscreenForVideoPlayback is specified.

        No new tests because no client implements requiresFullscreenForVideoPlayback yet.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState):

2011-01-04  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [WK2] create an initial implementation of the context menu handling for WebKit 2
        https://bugs.webkit.org/show_bug.cgi?id=51825

        Implement contextMenuItemVector() for Qt, this method is used in WebKit 2 to get the
        platform independent menu informations.

        * platform/qt/ContextMenuQt.cpp:
        (WebCore::contextMenuItemVector):

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

        Unreviewed, rolling out r74960.
        http://trac.webkit.org/changeset/74960
        https://bugs.webkit.org/show_bug.cgi?id=51868

        Rollout since we hit an assert after this patch. (Requested by
        krit on #webkit).

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildInstanceTree):

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

        Unreviewed, rolling out r74961.
        http://trac.webkit.org/changeset/74961
        https://bugs.webkit.org/show_bug.cgi?id=51867

        breaks 32/64-bits debug bots build (Requested by philn-tp on
        #webkit).

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::setWindowOverlay):

2011-01-03  Philippe Normand  <pnormand@igalia.com>

        Rubber-stamped by Eric Seidel.

        [GStreamer] build fails with gstreamer core 0.10.31 and -plugins-base 0.10.30
        https://bugs.webkit.org/show_bug.cgi?id=51810

        Based on a patch by Mart Raudsepp.

        No new tests, build fix only.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::setWindowOverlay): Use the new xoverlay
        API if the GST_CHECK_PLUGINS_BASE_VERSION macro is defined. It was
        introduced in same version as the xoverlay API change.

2011-01-04  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Dirk Schulze.

        Malformed SVG causes crash in updateContainerOffset
        https://bugs.webkit.org/show_bug.cgi?id=44610

        We should check recursive <use> at the begining of
        WebCore::SVGUseElement::buildInstanceTree instead
        of at the end of it because the target element's
        children may cause infinite recursive <use>.

        Test: svg/custom/recursive-use.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildInstanceTree):

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

        Unreviewed, build fix.

        Try to fix Clang build.

        * css/CSSParser.cpp:
        (WebCore::valueFromSideKeyword):
        (WebCore::CSSParser::parseLinearGradient):

2011-01-03  Julie-Jeongeun-Kim  <Jeongeun.Kim@obigo.com>

        Reviewed by Darin Adler.

        HTML5 Conformance Test failure: approved/xhtml5/object_border_pixel.xhtml
        https://bugs.webkit.org/show_bug.cgi?id=48596
        
        border attribute was not parsed in HTMLObjectElement.
        I added code for it as HTMLImageElement handled.

        new test:fast/html/object-border.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):

2011-01-03  Darin Adler  <darin@apple.com>

        Try to fix Chromium build.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTreeNode): Added a V8 case here.
        Not sure this ever will be used with V8.
        (WebCore::HistoryItem::decodeBackForwardTree): Ditto.

2011-01-03  Darin Adler  <darin@apple.com>

        Try to fix Leopard build.

        * history/HistoryItem.cpp: Use a consistent type, uint64_t, for the
        size variable.

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

        Reviewed by Darin Adler.

        Fixes before child calculation when adding anonymous childs to table parts.
        https://bugs.webkit.org/show_bug.cgi?id=50932

        Fix in r74364 was incomplete. When before child is equal to the table part(to
        which the new child is getting added), it confuses the table part to add it
        incorrectly as an after child. The patch fixes by passing the before child as
        the table part's first child.

        Tests: fast/css-generated-content/table-before-after-child-add.html
               fast/css-generated-content/table-cell-before-after-child-add.html
               fast/css-generated-content/table-row-before-after-child-add.html
               fast/css-generated-content/table-row-before-after-child-add.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):

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

        Reviewed by Simon Fraser.

        Shrink HTMLTableCellElement
        https://bugs.webkit.org/show_bug.cgi?id=51858

        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::HTMLTableCellElement): Removed intialization of m_row and
        m_col.
        * html/HTMLTableCellElement.h: Removed m_row and m_col and their accessors.

2011-01-03  Darin Adler  <darin@apple.com>

        Fix build.

        * platform/network/FormData.cpp:
        (WebCore::FormData::create): Roll back uint8_t change.
        (WebCore::FormData::flatten): Ditto.
        (WebCore::FormData::flattenToString): Ditto.
        (WebCore::encode): Ditto.
        (WebCore::decode): Ditto.
        (WebCore::FormData::encodeForBackForward):
        * platform/network/FormData.h: Ditto.
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream): Ditto.

2011-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson.

        Add code to encode/decode the back/forward tree
        https://bugs.webkit.org/show_bug.cgi?id=51853

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTree): Added.
        (WebCore::HistoryItem::encodeBackForwardTreeNode): Added.
        (WebCore::HistoryItem::decodeBackForwardTree): Added.
        * history/HistoryItem.h: Added functions above.

        * platform/network/FormData.cpp:
        (WebCore::FormData::create): Changed type to Vector<uint8_t> instead of
        Vector<char>. This type is used in our newer code for vectors of bytes.
        (WebCore::FormData::flatten): Ditto.
        (WebCore::FormData::flattenToString): Ditto. Had to add a cast here.
        (WebCore::FormData::encodeForBackForward): Added.
        (WebCore::FormData::decodeForBackForward): Added.
        * platform/network/FormData.h: Changed type to Vector<uint8_t> instead of
        Vector<char>. Also made some single-argument constructors explicit.
        Also added the new functions.

        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream): Changed to use uint8_t to match above.

2011-01-03  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix GTK build.

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::drawGlyphsShadow):

2011-01-03  Helder Correia  <helder@sencha.com>

        Reviewed by Simon Fraser.

        ContextShadow can avoid code duplication for getting the CTM
        https://bugs.webkit.org/show_bug.cgi?id=51799

        ContextShadow defines its own getTransformationMatrixFromContext()
        which does exactly the same as GraphicsContext::getCTM().

        Existing tests: fast/canvas/canvas*shadow*html

        * platform/graphics/ContextShadow.cpp:
        (WebCore::ContextShadow::mustUseContextShadow):
        (WebCore::ContextShadow::adjustBlurDistance):
        (WebCore::ContextShadow::calculateLayerBoundingRect):
        * platform/graphics/ContextShadow.h:
        * platform/graphics/cairo/ContextShadowCairo.cpp:
        (WebCore::ContextShadow::beginShadowLayer):
        (WebCore::ContextShadow::endShadowLayer):
        (WebCore::ContextShadow::drawRectShadowWithoutTiling):
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::drawGlyphsShadow):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawPathShadow):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::drawGlyphsShadow):
        * platform/graphics/qt/ContextShadowQt.cpp:
        (WebCore::ContextShadow::beginShadowLayer):
        (WebCore::ContextShadow::endShadowLayer):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):

2011-01-03  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        InsertTextCommand::m_charactersAdded is unused
        https://bugs.webkit.org/show_bug.cgi?id=51849

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::InsertTextCommand): Don't initialize m_charactersAdded.
        (WebCore::InsertTextCommand::input): Don't update m_charactersAdded.
        * editing/InsertTextCommand.h: Removed charactersAdded function and
        m_charactersAdded data member.

2011-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Move paintMenuListButton() to RenderThemeGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=51832

        Method paintMenuListButton() contains code common to both gtk 2
        and 3, so it can be moved to RenderThemeGtk.cpp instead of
        duplicating it.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMenuListButton):
        * platform/gtk/RenderThemeGtk2.cpp:
        * platform/gtk/RenderThemeGtk3.cpp:

2011-01-03  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=51850
        Put CFNetwork loader code inside USE(CFNETWORK)

        Add USE(CFNETWORK) macros around all the cf/mac network files. Also added all CFNetwork
        files to the WebCore Xcode project.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/cf/ResourceLoaderCFNet.cpp:
        * loader/mac/ResourceLoaderMac.mm:
        * platform/network/cf/AuthenticationCF.cpp:
        * platform/network/cf/AuthenticationCF.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        * platform/network/cf/CookieStorageCFNet.cpp:
        * platform/network/cf/CookieStorageCFNet.h:
        * platform/network/cf/CredentialStorageCFNet.cpp:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        * platform/network/cf/FormDataStreamCFNet.h:
        * platform/network/cf/LoaderRunLoopCF.cpp:
        * platform/network/cf/LoaderRunLoopCF.h:
        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cf/ResourceResponse.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/mac/AuthenticationMac.h:
        * platform/network/mac/AuthenticationMac.mm:
        * platform/network/mac/FormDataStreamMac.h:
        * platform/network/mac/FormDataStreamMac.mm:
        * platform/network/mac/ResourceError.h:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/mac/ResourceRequest.h:
        * platform/network/mac/ResourceRequestMac.mm:
        * platform/network/mac/ResourceResponse.h:
        * platform/network/mac/ResourceResponseMac.mm:

2011-01-03  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Adam Barth.

        [Qt] Add SelectAll option to the context menu for the editor
        https://bugs.webkit.org/show_bug.cgi?id=50049

        Enable SelectAll for the Qt context menu.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        * platform/ContextMenuItem.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagSelectAll):
        * platform/LocalizedStrings.h:

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

        Reviewed by Darin Adler.

        Shrink RootInlineBox
        https://bugs.webkit.org/show_bug.cgi?id=51847

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection): Changed to use the baselineType()
        accessor.
        * rendering/RootInlineBox.h: Rolled m_baselineType into a bitfield. Changed its type to
        unsigned because otherwise MSVC treats it as signed.
        (WebCore::RootInlineBox::baselineType): Added a cast.

2011-01-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Split webkitprivate.{cpp,h} in more manageable chunks
        https://bugs.webkit.org/show_bug.cgi?id=50698

        Fix DOM bindings generation to no longer include the now-gone
        webkitprivate.h header, including the appropriate replacements
        instead.

        * bindings/scripts/CodeGeneratorGObject.pm:

2011-01-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Add Encode/Decode machinery Darin and I plan to work with for back/forward stuff in WebKit2.

        * ForwardingHeaders/wtf/Decoder.h: Added.
        * ForwardingHeaders/wtf/Encoder.h: Added.

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

        Reviewed by Darin Adler.

        AX: Regression: WebKit no longer auto-scrolls with VoiceOver navigation
        https://bugs.webkit.org/show_bug.cgi?id=51833

        Make sure the web area returns the contentsSize, not the same size as what is displayed.

        Test: platform/mac/accessibility/webarea-size-equals-content-size.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect):

2011-01-03  Simon Fraser  <simon.fraser@apple.com>

        Fix warning in 32-bit builds.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSLinearGradientValue::createGradient):

2011-01-03  Benjamin C Meyer  <bmeyer@rim.com>

        Reviewed by Daniel Bates.

        In the cmake build system move logic related to ENABLE_NOTIFICATIONS into its own block.
        https://bugs.webkit.org/show_bug.cgi?id=51827

        * CMakeLists.txt:

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

        Reviewed by Simon Fraser.

        Remove the unused RenderTableCell::m_percentageHeight
        https://bugs.webkit.org/show_bug.cgi?id=51837

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell): Removed initialization of m_percentageHeight.
        * rendering/RenderTableCell.h: Removed m_percentageHeight.

2011-01-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by David Hyatt.

        Implement -webkit-linear-gradient and -webkit-radial-gradient
        https://bugs.webkit.org/show_bug.cgi?id=28152

        Add support for -webkit-radial-gradients.

        Tests: fast/gradients/css3-radial-gradients.html
               fast/gradients/css3-radial-gradients2.html

        * css/CSSGradientValue.cpp:
        (WebCore::blend): Used to blend colors, which is necessary when truncating
        the start of radial gradients.
        (WebCore::GradientStop): Small struct to aid gradient stop processing.
        (WebCore::CSSGradientValue::addStops): Rename 'positions' to 'stops', and store
        the color so that we can blend it when truncating radial gradients. Changed
        to handle both linear and radial gradients.
        (WebCore::CSSRadialGradientValue::cssText): Update to follow the spec.
        (WebCore::CSSRadialGradientValue::resolveRadius): Stylistic change.
        (WebCore::distanceToClosestCorner): New utility method.
        (WebCore::distanceToFarthestCorner): Ditto.
        (WebCore::CSSRadialGradientValue::createGradient): New logic to deal with shape and
        fill rules.

        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::isLinearGradient): Color-stop processing needs to know what
        kind of gradient it's dealing with, so add new isFooGradient methods.
        (WebCore::CSSGradientValue::isRadialGradient): Ditto.
        (WebCore::CSSLinearGradientValue::isLinearGradient):
        (WebCore::CSSRadialGradientValue::setShape): New setters for shape, size etc.
        (WebCore::CSSRadialGradientValue::setSizingBehavior):
        (WebCore::CSSRadialGradientValue::setEndHorizontalSize):
        (WebCore::CSSRadialGradientValue::setEndVerticalSize):
        (WebCore::CSSRadialGradientValue::isRadialGradient):

        * css/CSSParser.h:
        * css/CSSParser.h: Pass a CSSParserValueList* into parseFillPositionXY() and parseFillPosition()
        so we can use parseFillPosition() when parsing a gradient function.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillPositionXY): Pass in a CSSParserValueList*
        (WebCore::CSSParser::parseFillPosition): Ditto
        (WebCore::CSSParser::parseFillProperty): Pass m_valueList to parseFillPosition.
        (WebCore::CSSParser::parseTransformOriginShorthand): Ditto
        (WebCore::CSSParser::parseRadialGradient): Flesh out radial gradient parsing.
        (WebCore::CSSParser::parseTransformOrigin): Pass m_valueList to parseFillPosition.
        (WebCore::CSSParser::parsePerspectiveOrigin): Ditto

        * css/CSSValueKeywords.in: New keywords for radial gradient shape and fill behaviors.

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::Gradient): Pass aspect ratio for elliptical gradients.
        * platform/graphics/Gradient.h: Add aspect ratio for elliptical gradients.
        (WebCore::Gradient::create):
        (WebCore::Gradient::startRadius): Expose radii.
        (WebCore::Gradient::endRadius):
        (WebCore::Gradient::setStartRadius): Setters are required for when we need to scale color stops.
        (WebCore::Gradient::setEndRadius):
        (WebCore::Gradient::aspectRatio):
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint): For elliptical gradients, scale the CTM.
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::fillRect): Use start/endRadius() rather than r0() and r1().

2011-01-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by David Hyatt.

        Implement -webkit-linear-gradient and -webkit-radial-gradient
        https://bugs.webkit.org/show_bug.cgi?id=28152
        
        Add support for the parsing and rendering of non-repeating CSS3 linear gradients,
        according to <http://dev.w3.org/csswg/css3-images/#linear-gradients>.

        Tests: fast/gradients/css3-color-stop-units.html
               fast/gradients/css3-color-stops.html
               fast/gradients/css3-gradient-parsing.html
               fast/gradients/css3-linear-angle-gradients.html

        * css/CSSGradientValue.h:
        Add subclasses of CSSGradientValue for linear and radial gradients.
        
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image): Add FIXME comment about why we can't cache
        the gradient sometimes.
        (WebCore::compareStops): positions are CSSValues now.
        (WebCore::CSSGradientValue::sortStopsIfNeeded): Add assertion that this is only called
        for old-style gradients.
        (WebCore::CSSGradientValue::addStops): New method that handles the spec rules about
        missing positions, ensuring that stop position is ordered, and spacing out stops
        without positions. Also normalize gradients which use stops outside the 0-1 range
        so that platforms can render them correctly.
        (WebCore::positionFromValue): Determin the position on the gradient line for percentage,
        number and length values.
        (WebCore::CSSGradientValue::computeEndPoint):
        (WebCore::CSSLinearGradientValue::cssText):
        (WebCore::endPointsFromAngle): Compute endpoints for a gradient which covers the rectangle
        given an angle.
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::cssText):
        (WebCore::CSSRadialGradientValue::resolveRadius):
        (WebCore::CSSRadialGradientValue::createGradient):

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Style fix.
        (WebCore::CSSParser::parseContent): Use isGeneratedImageValue() and parseGeneratedImage()
        (WebCore::CSSParser::parseFillImage): Use isGeneratedImageValue() and parseGeneratedImage()
        (WebCore::CSSParser::parseBorderImage): Use isGeneratedImageValue() and parseGeneratedImage()
        (WebCore::parseDeprecatedGradientPoint): Renamed to indicate that it's only used for -webkit-gradient.
        (WebCore::parseDeprecatedGradientColorStop): Renamed to indicate that it's only used for -webkit-gradient,
        and fixed to store CSSValues for the stop position.
        (WebCore::CSSParser::parseDeprecatedGradient): Renamed to indicate that it's only used for -webkit-gradient,
        and create CSSLinearGradientValue and CSSRadialGradientValue as appropriate.
        (WebCore::valueFromSideKeyword):
        (WebCore::parseGradientColorOrKeyword): Color parsing utility.
        (WebCore::CSSParser::parseLinearGradient): New method to parse linear gradients.
        (WebCore::CSSParser::parseRadialGradient): Stub for new method to parse radial gradients.
        (WebCore::CSSParser::isGeneratedImageValue): Detect gradients and CSS canvas.
        (WebCore::CSSParser::parseGeneratedImage): Parser for generated images like gradients
        and CSS canvas.
        * css/CSSParser.h:
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::setP0): We need to be able to change the points when normalizing gradients.
        (WebCore::Gradient::setP1): Ditto.

2011-01-03  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] document.getElementById(...) doesn't return the right object in combination with QGraphicsWidget
        https://bugs.webkit.org/show_bug.cgi?id=51464

        Added a way to bind any QObject created as a plugin to JavaScript, 
        by adding a custom member (qtObject) to WebCore::Widget. 
        Added a test to tst_qwebpage to make sure plugins created 
        as QGraphicsWidget are accessible through JavaScript.

        * bindings/js/ScriptControllerQt.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * platform/Widget.h:
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::Widget):
        (WebCore::Widget::setBindingObject):
        (WebCore::Widget::bindingObject):

2011-01-03  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

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

        Printing on a page with body { height: 100% } clips out the overflow contents.  This happened
        because the computePageRects function was never correct.  It was using the layer's width and height
        for the document's width and height, and the layer no longer includes overflow in its width and
        height.  It was also incorrectly assuming the first page would begin at (0,0), and this is an invalid
        assumption in RTL or vertical text environments.

        Added printing/page-count-percentage-height.html

        * page/PrintContext.cpp:
        (WebCore::PrintContext::computePageRects):
        (WebCore::PrintContext::computePageRectsWithPageSizeInternal):

2011-01-03  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix for --minimal build after r74895.

        * html/InputType.cpp: Missing include added.
        * html/NumberInputType.cpp: Missing include added.

2011-01-02  Darin Adler  <darin@apple.com>

        Reviewed by Kent Tamura.

        Eliminate HTMLInputElement::m_deprecatedTypeNumber, other input refactoring and renaming
        https://bugs.webkit.org/show_bug.cgi?id=51791

        * dom/InputElement.h: Make sanitizeValueForTextField public so it can
        be called by InputType.

        * html/BaseButtonInputType.cpp:
        (WebCore::BaseButtonInputType::accessKeyAction): Added.
        (WebCore::BaseButtonInputType::storesValueSeparateFromAttribute): Added.
        * html/BaseButtonInputType.h: Ditto.

        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::canSetStringValue): Added.
        (WebCore::BaseCheckableInputType::accessKeyAction): Added.
        (WebCore::BaseCheckableInputType::fallbackValue): Added.
        (WebCore::BaseCheckableInputType::storesValueSeparateFromAttribute): Added.
        (WebCore::BaseCheckableInputType::isCheckable): Added.
        * html/BaseCheckableInputType.h: Ditto.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::hasSpinButton): Added.
        * html/BaseDateAndTimeInputType.h: Ditto.

        * html/BaseTextInputType.h: Made more functions private.

        * html/ButtonInputType.cpp:
        (WebCore::ButtonInputType::isTextButton): Added.
        * html/ButtonInputType.h: Ditto.

        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::willDispatchClick): Added.
        (WebCore::CheckboxInputType::didDispatchClick): Added.
        (WebCore::CheckboxInputType::isCheckbox): Added.
        * html/CheckboxInputType.h: Ditto.

        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::scaledStepValueShouldBeInteger): Fixed
        typo in name of this function.
        * html/DateTimeInputType.h: Ditto.
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::scaledStepValueShouldBeInteger): Ditto.
        * html/DateTimeLocalInputType.h: Ditto.

        * html/EmailInputType.cpp:
        (WebCore::EmailInputType::isEmailField): Added.
        * html/EmailInputType.h: Ditto.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::FileInputType): Added.
        (WebCore::FileInputType::canSetStringValue): Added.
        (WebCore::FileInputType::canChangeFromAnotherType): Added.
        (WebCore::FileInputType::files): Added.
        (WebCore::FileInputType::canSetValue): Added.
        (WebCore::FileInputType::getTypeSpecificValue): Added.
        (WebCore::FileInputType::storesValueSeparateFromAttribute): Added.
        (WebCore::FileInputType::setFileList): Added.
        (WebCore::FileInputType::isFileUpload): Added.
        * html/FileInputType.h: Ditto.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement): Updated for data member
        renaming and removal.
        (WebCore::HTMLInputElement::isValidValue): Call canSetStringValue
        instead of checking specific type numbers.
        (WebCore::HTMLInputElement::getAllowedValueStepWithDecimalPlaces):
        Use fastGetAttribute and fixed typo in the name of the
        scaledStepValueShouldBeInteger function.
        (WebCore::HTMLInputElement::isKeyboardFocusable): Call
        InputType::isKeyboardFocusable; moved most of the type-specific
        logic there.
        (WebCore::HTMLInputElement::shouldUseInputMethod): Call
        InputType::shouldUseInputMethod; moved the type-specific logic there.
        (WebCore::HTMLInputElement::handleBlurEvent): Call
        InputType::handleBlurEvent; moved the type-specific logic there.
        (WebCore::HTMLInputElement::setType): Tweak the names and types
        in this function.
        (WebCore::HTMLInputElement::updateType): Removed the code that
        set m_deprecatedTypeNumber. Compare types by comparing the value
        from formControlType. Removed file-specific logic and instead call
        InputType::canChangeFromAnotherType. Streamlined the logic for
        activation callbacks.
        (WebCore::HTMLInputElement::accessKeyAction): Call
        InputType::accessKeyAction; moved the type-specific logic there.
        (WebCore::HTMLInputElement::mapToEntry): Call
        InputType::shouldRespectHeightAndWidthAttributes and
        InputType::shouldRespectAlignAttribute.
        (WebCore::HTMLInputElement::parseMappedAttribute): Updated
        for name changes and the removal of m_defaultChecked. Changed the
        alt attribute logic to be based on the class of the renderer.
        Call InputType::srcAttributeChanged and moved the type-specific
        logic there. Call shouldRespectAlignAttribute and
        shouldRespectHeightAndWidthAttributes rather than having
        type-specific logic here. Call minOrMaxAttributeChanged.
        (WebCore::HTMLInputElement::rendererIsNeeded): Call
        InputType::rendererIsNeeded; moved the type-specific logic there.
        (WebCore::HTMLInputElement::attach): Removed the unneeded m_inited
        flag, which was redundant with the m_haveType flag. Call
        InputType::attach; moved the type-specific logic there.
        (WebCore::HTMLInputElement::altText): Use fastGetAttribute.
        (WebCore::HTMLInputElement::isSuccessfulSubmitButton): Call
        InputType::canBeSuccessfulSubmitButton; moved the type-specific
        logic there.
        (WebCore::HTMLInputElement::isActivatedSubmit): Updated for
        name changes.
        (WebCore::HTMLInputElement::setActivatedSubmit): Ditto.
        (WebCore::HTMLInputElement::reset): Updated to use
        InputType::storesValueSeparateFromAttribute. Also use
        hasAttribute(checkedAttr) rather than m_defaultChecked,
        since both are the same. Also updated for name change.
        (WebCore::HTMLInputElement::setChecked): Updated for name
        changes. Also added call to
        InputType::shouldSendChangeEventAfterCheckedChanged and
        moved the type-specific logic there.
        (WebCore::HTMLInputElement::setIndeterminate): Call
        isCheckable to see if indeterminate is allowed.
        Also updated for name changes.
        (WebCore::HTMLInputElement::copyNonAttributeProperties):
        Updated for name changes and removed data members.
        (WebCore::HTMLInputElement::value): Call
        InputType::getTypeSpecificValue and InputType::fallbackValue.
        Moved the type-specific logic there.
        (WebCore::HTMLInputElement::valueWithDefault): Call
        InputType::defaultValue. Moved the type-specific logic there.
        (WebCore::HTMLInputElement::setSuggestedValue): Call
        InputType::canSetSuggestedValue. Moved the type-specific logic
        there.
        (WebCore::HTMLInputElement::setValue): Call
        InputType::canSetValue. Moved the type-specific logic there.
        Clear the file list if it exists rather than checking the
        type explicitly. We could probably do that a more elegant way.
        (WebCore::HTMLInputElement::placeholder): Use fastGetAttribute.
        (WebCore::HTMLInputElement::setValueFromRenderer): Use the
        isFileUpload function in the assertion.
        (WebCore::HTMLInputElement::setFileListFromRenderer): Put most
        of the code from this function into FileInputType::setFileList.
        (WebCore::HTMLInputElement::preDispatchEventHandler): Changed
        to call InputType::willDispatchClick, which does the type-specific
        work. Still need to use a single struct for all types, because
        the type of the element could change during the event handling.
        (WebCore::HTMLInputElement::postDispatchEventHandler): Changed
        to call InputType::didDispatchClick.
        (WebCore::HTMLInputElement::defaultValue): Use fastGetAttribute.
        (WebCore::HTMLInputElement::accept): Use fastGetAttribute.
        (WebCore::HTMLInputElement::alt): Use fastGetAttribute.
        (WebCore::HTMLInputElement::src): Use fastGetAttribute.
        (WebCore::HTMLInputElement::setAutofilled): Updated for name
        changes.
        (WebCore::HTMLInputElement::files): Use InputType::files.
        (WebCore::HTMLInputElement::isAcceptableValue): Use
        InputType::isAcceptableValue.
        (WebCore::HTMLInputElement::sanitizeValue): Use
        InputType::sanitizeValue.
        (WebCore::HTMLInputElement::hasUnacceptableValue): Use
        InputType::hasUnacceptableValue.
        (WebCore::HTMLInputElement::needsActivationCallback): Use
        InputType::shouldResetOnDocumentActivation.
        (WebCore::HTMLInputElement::willMoveToNewOwnerDocument): Use
        InputType::willMoveToNewOwnerDocument.
        (WebCore::HTMLInputElement::dataList): Use
        InputType::shouldRespectListAttribute.
        (WebCore::HTMLInputElement::selectedOption): Tweaked logic
        and naming a bit.
        (WebCore::HTMLInputElement::stepUpFromRenderer): Use
        fastGetAttribute.
        (WebCore::HTMLInputElement::isSpeechEnabled): Use
        InputType::shouldRespectSpeechAttribute.
        (WebCore::HTMLInputElement::isTextButton): No longer inline.
        Calls through to InputType.
        (WebCore::HTMLInputElement::isRadioButton): Ditto.
        (WebCore::HTMLInputElement::isSearchField): Ditto.
        (WebCore::HTMLInputElement::isInputTypeHidden): Ditto.
        (WebCore::HTMLInputElement::isPasswordField): Ditto.
        (WebCore::HTMLInputElement::isCheckbox): Ditto.
        (WebCore::HTMLInputElement::isText): Ditto.
        (WebCore::HTMLInputElement::isEmailField): Ditto.
        (WebCore::HTMLInputElement::isFileUpload): Ditto.
        (WebCore::HTMLInputElement::isImageButton): Ditto.
        (WebCore::HTMLInputElement::isNumberField): Ditto.
        (WebCore::HTMLInputElement::isSubmitButton): Ditto.
        (WebCore::HTMLInputElement::isTelephoneField): Ditto.
        (WebCore::HTMLInputElement::isURLField): Ditto.
        (WebCore::HTMLInputElement::isEnumeratable): Ditto.
        (WebCore::HTMLInputElement::isChecked): No longer inline.
        Calls InputType::isCheckable.
        (WebCore::HTMLInputElement::hasSpinButton): No longer inline.
        Calls through to InputType.
        (WebCore::HTMLInputElement::supportsPlaceholder): No longer
        inline. Calls isTextType as before, but with no special case
        for ISINDEX. That special case was unneeded since it returns
        true from isTextType.
        (WebCore::HTMLInputElement::checkedRadioButtons): No longer
        inline.
        (WebCore::HTMLInputElement::handleBeforeTextInsertedEvent):
        No longer inline.

        * html/HTMLInputElement.h: Removed multiple unneeded includes.
        The big one is probably InputType.h, but also HTMLFormElement.h.
        Removed unneeded forward declarations. Made many functions
        no longer inline since they now need to make virtual function
        dispatches. Removed the unneeded defaultChecked and
        webkitdirectory functions. Both are handled by HTML attribute
        reflection for DOM bindings, and the callers instead can get
        at the attribute. Made updateCheckedRadioButtons public so it
        can be called by an InputType class. Removed
        DeprecatedInputType, InputTypeMap, createTypeMap,
        deprecatedInputType, allowsIndeterminate,
        respectHeightAndWidthAttrs, storesValueSeparateFromAttribute,
        m_imageLoader, m_fileList, m_deprecatedTypeNumber,
        m_defaultChecked, and m_inited. Renamed m_checked to
        m_isChecked, m_useDefaultChecked to m_reflectsCheckedAttribute,
        m_indeterminate tom_isIndeterminate, m_haveType to m_hasType,
        m_activeSubmit to m_isActivatedSubmit, and m_autofilled to
        m_isAutofilled.
        
        * html/HiddenInputType.cpp:
        (WebCore::HiddenInputType::accessKeyAction): Added.
        (WebCore::HiddenInputType::rendererIsNeeded) Added.:
        (WebCore::HiddenInputType::storesValueSeparateFromAttribute): Added.
        (WebCore::HiddenInputType::isHiddenType): Added.
        (WebCore::HiddenInputType::shouldRespectHeightAndWidthAttributes): Added.
        * html/HiddenInputType.h: Ditto.

        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::ImageInputType): Moved out of the header file.
        (WebCore::ImageInputType::srcAttributeChanged): Added.
        (WebCore::ImageInputType::attach): Added.
        (WebCore::ImageInputType::willMoveToNewOwnerDocument): Added.
        (WebCore::ImageInputType::shouldRespectAlignAttribute): Added.
        (WebCore::ImageInputType::canBeSuccessfulSubmitButton): Added.
        (WebCore::ImageInputType::isImageButton): Added.
        (WebCore::ImageInputType::isEnumeratable): Added.
        (WebCore::ImageInputType::shouldRespectHeightAndWidthAttributes): Added.
        * html/ImageInputType.h: Ditto.

        * html/InputType.cpp:
        (WebCore::InputType::create): Changed argument type to String. There
        is no value in taking an AtomicString here.
        (WebCore::InputType::scaledStepValueShouldBeInteger): Fixed typo in
        this function name.
        (WebCore::InputType::canSetStringValue): Added.
        (WebCore::InputType::isKeyboardFocusable): Added.
        (WebCore::InputType::shouldUseInputMethod): Added.
        (WebCore::InputType::handleBlurEvent): Added.
        (WebCore::InputType::accessKeyAction): Added.
        (WebCore::InputType::attach): Added.
        (WebCore::InputType::srcAttributeChanged): Added.
        (WebCore::InputType::willMoveToNewOwnerDocument): Added.
        (WebCore::InputType::shouldRespectAlignAttribute): Added.
        (WebCore::InputType::canChangeFromAnotherType): Added.
        (WebCore::InputType::minOrMaxAttributeChanged): Added.
        (WebCore::InputType::canBeSuccessfulSubmitButton): Added.
        (WebCore::InputType::rendererIsNeeded): Added.
        (WebCore::InputType::files): Added.
        (WebCore::InputType::getTypeSpecificValue): Added.
        (WebCore::InputType::fallbackValue): Added.
        (WebCore::InputType::defaultValue): Added.
        (WebCore::InputType::canSetSuggestedValue): Added.
        (WebCore::InputType::shouldSendChangeEventAfterCheckedChanged): Added.
        (WebCore::InputType::storesValueSeparateFromAttribute): Added.
        (WebCore::InputType::canSetValue): Added.
        (WebCore::InputType::willDispatchClick): Added.
        (WebCore::InputType::didDispatchClick): Added.
        (WebCore::InputType::isAcceptableValue): Added.
        (WebCore::InputType::sanitizeValue): Added.
        (WebCore::InputType::hasUnacceptableValue): Added.
        (WebCore::InputType::setFileList): Added.
        (WebCore::InputType::shouldResetOnDocumentActivation): Added.
        (WebCore::InputType::shouldRespectListAttribute): Added.
        (WebCore::InputType::shouldRespectSpeechAttribute): Added.
        (WebCore::InputType::isTextButton): Added.
        (WebCore::InputType::isRadioButton): Added.
        (WebCore::InputType::isSearchField): Added.
        (WebCore::InputType::isHiddenType): Added.
        (WebCore::InputType::isPasswordField): Added.
        (WebCore::InputType::isCheckbox): Added.
        (WebCore::InputType::isEmailField): Added.
        (WebCore::InputType::isFileUpload): Added.
        (WebCore::InputType::isImageButton): Added.
        (WebCore::InputType::isNumberField): Added.
        (WebCore::InputType::isSubmitButton): Added.
        (WebCore::InputType::isTelephoneField): Added.
        (WebCore::InputType::isURLField): Added.
        (WebCore::InputType::isEnumeratable): Added.
        (WebCore::InputType::isCheckable): Added.
        (WebCore::InputType::hasSpinButton): Added.
        (WebCore::InputType::shouldRespectHeightAndWidthAttributes): Added.

        * html/InputType.h: Removed unneeded ExceptionCode.h include and
        used a typedef instead as we do when we want for forward declare it.
        Added includes and forward declarations needed for new functions.
        Added ClickHandlingState structure. Changed the argument to create
        to a String rather than AtomicString. Added many virtual functions.
        
        * html/IsIndexInputType.cpp:
        (WebCore::IsIndexInputType::shouldRespectListAttribute): Added.
        * html/IsIndexInputType.h: Ditto.

        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::handleBlurEvent): Added.
        (WebCore::NumberInputType::isAcceptableValue): Added.
        (WebCore::NumberInputType::sanitizeValue): Added.
        (WebCore::NumberInputType::hasUnacceptableValue): Added.
        (WebCore::NumberInputType::shouldRespectSpeechAttribute): Added.
        (WebCore::NumberInputType::isNumberField): Added.
        (WebCore::NumberInputType::hasSpinButton): Added.
        * html/NumberInputType.h: Ditto.

        * html/PasswordInputType.cpp:
        (WebCore::PasswordInputType::shouldUseInputMethod): Added.
        (WebCore::PasswordInputType::shouldResetOnDocumentActivation): Added.
        (WebCore::PasswordInputType::shouldRespectListAttribute): Added.
        (WebCore::PasswordInputType::shouldRespectSpeechAttribute): Added.
        (WebCore::PasswordInputType::isPasswordField): Added.
        * html/PasswordInputType.h: Ditto.

        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::isKeyboardFocusable): Added.
        (WebCore::RadioInputType::attach): Added.
        (WebCore::RadioInputType::shouldSendChangeEventAfterCheckedChanged): Added.
        (WebCore::RadioInputType::willDispatchClick): Added.
        (WebCore::RadioInputType::didDispatchClick): Added.
        (WebCore::RadioInputType::isRadioButton): Added.
        * html/RadioInputType.h: Ditto.

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::accessKeyAction): Added.
        (WebCore::RangeInputType::minOrMaxAttributeChanged): Added.
        (WebCore::RangeInputType::fallbackValue): Added.
        (WebCore::RangeInputType::sanitizeValue): Added.
        (WebCore::RangeInputType::shouldRespectListAttribute): Added.
        * html/RangeInputType.h: Ditto.

        * html/ResetInputType.cpp:
        (WebCore::ResetInputType::defaultValue): Added.
        (WebCore::ResetInputType::isTextButton): Added.
        * html/ResetInputType.h: Ditto.

        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::shouldRespectSpeechAttribute): Added.
        (WebCore::SearchInputType::isSearchField): Added.
        * html/SearchInputType.h: Ditto.

        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::canBeSuccessfulSubmitButton): Added.
        (WebCore::SubmitInputType::defaultValue): Added.
        (WebCore::SubmitInputType::isSubmitButton): Added.
        (WebCore::SubmitInputType::isTextButton): Added.
        * html/SubmitInputType.h: Ditto.

        * html/TelephoneInputType.cpp:
        (WebCore::TelephoneInputType::shouldRespectSpeechAttribute): Added.
        (WebCore::TelephoneInputType::isTelephoneField): Added.
        * html/TelephoneInputType.h: Ditto.

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldUseInputMethod): Added.
        (WebCore::TextFieldInputType::sanitizeValue): Added.
        (WebCore::TextFieldInputType::shouldRespectListAttribute): Added.
        * html/TextFieldInputType.h: Ditto.

        * html/TextInputType.cpp:
        (WebCore::TextInputType::canSetSuggestedValue): Added.
        (WebCore::TextInputType::shouldRespectSpeechAttribute): Added.
        * html/TextInputType.h: Ditto.

        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::scaledStepValueShouldBeInteger): Fixed
        typo in the name of this function.
        * html/TimeInputType.h: Ditto.

        * html/URLInputType.cpp:
        (WebCore::URLInputType::isURLField): Added.
        * html/URLInputType.h: Ditto.

2011-01-03  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed.

        NSScrollView-based scrollbars and ScrollBarTheme-based scrollbars don't look the same
        https://bugs.webkit.org/show_bug.cgi?id=51151

        Flip switch to use WebThemeEngine for Chromium/Mac scrollbar rendering,
        so that it can match Safari's (and thus use the same baselines).

        No new tests, should be covered by layout tests (which will need
        expectation changes)

        * platform/chromium/ScrollbarThemeChromiumMac.mm:

2011-01-03  Antonio Gomes  <agomes@rim.com>

        Unreviewed build fix for WebKit/Gtk+.

        RenderThemeGtk::initMediaColors() in RenderThemeGtk2.cpp needs to be
        guarded by ENABLE(VIDEO), as it is in its header.

        No new tests.

        * platform/gtk/RenderThemeGtk2.cpp:

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

        Rubber-stamped by Simon Fraser.

        <rdar://problem/8812159> Update copyright strings

        * Info.plist:

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

        Reviewed by Sam Weinig.

        <rdar://problem/8806570> REGRESSION (r73337): Incorrect text match count when a match occurs in a text field
        https://bugs.webkit.org/show_bug.cgi?id=51623

        * editing/Editor.cpp:
        (WebCore::Editor::countMatchesForText): Actually remember the original search range end
        container and offset and restore them when needed, instead of using two references to the
        same Range.
        * manual-tests/find-count-matches-after-text-control.html: Added.

2011-01-02  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Csaba Osztrogonác.

        WebKit 2 does not build on 64bits with a recent GCC
        https://bugs.webkit.org/show_bug.cgi?id=51754

        Use explicitely 64 bits types for the attributes of DatabaseDetails.

        * storage/DatabaseDetails.h:
        (WebCore::DatabaseDetails::expectedUsage):
        (WebCore::DatabaseDetails::currentUsage):

2011-01-02  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r74868.

        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::getImageData):

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

        Unreviewed, rolling out r74847.
        http://trac.webkit.org/changeset/74847
        https://bugs.webkit.org/show_bug.cgi?id=51803

        "Preprocessor guards should be in header files" (Requested by
        ap on #webkit).

        * bindings/js/JSDOMWindowBase.cpp:
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * html/HTMLDocument.cpp:
        * loader/FrameLoader.cpp:
        * loader/ResourceLoadNotifier.cpp:
        * page/Chrome.cpp:
        * page/Console.cpp:
        * page/ContextMenuController.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):
        * page/EventHandler.cpp:
        * page/Page.cpp:
        * storage/Database.cpp:
        * workers/AbstractWorker.cpp:
        * workers/DefaultSharedWorkerRepository.cpp:
        * workers/SharedWorker.cpp:
        * workers/Worker.cpp:
        * workers/WorkerContext.cpp:
        * workers/WorkerMessagingProxy.cpp:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2011-01-02  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Unreviewed build fix.

        * CMakeLists.txt:

2011-01-02  Dirk Schulze  <krit@webkit.org>

        Reviewed by Simon Fraser.

        Clarify ImageBuffer and ImageData relationship
        https://bugs.webkit.org/show_bug.cgi?id=51297

        Remove references to ImageData and CanvasPixelArray from ImageBuffer and SVG filter/masker code,
        since this was a layering violation, and replaced it by ByteArray.

        No change of functionality, so no new test added.

        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        (WebCore::ImageData::ImageData):
        * html/ImageData.h: Added new constructor with ByteArray input.
        (WebCore::ImageData::width):
        (WebCore::ImageData::height):
        (WebCore::ImageData::data):
        * html/canvas/CanvasPixelArray.cpp:
        (WebCore::CanvasPixelArray::create):
        (WebCore::CanvasPixelArray::CanvasPixelArray):
        * html/canvas/CanvasPixelArray.h: New conctructor with ByteArray input, used by HTML Canvas.
        (WebCore::CanvasPixelArray::data):
        (WebCore::CanvasPixelArray::length):
        (WebCore::CanvasPixelArray::set):
        (WebCore::CanvasPixelArray::get):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData):
        (WebCore::CanvasRenderingContext2D::putImageData):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::apply):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::apply):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::setDestinationPixels):
        (WebCore::FEConvolveMatrix::apply):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::apply):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::apply):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::apply):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::apply):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::apply):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::asImageBuffer):
        (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:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):

2011-01-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move JavaScriptCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=51604

        Update references to JavaScriptCore.

        * Android.derived.jscbindings.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pro:
          - These changes are subtle and might not be 100% correct.
        * move-js-headers.sh:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        forbid sandboxed frames to call top.close() when allow-same-origin is not setted
        https://bugs.webkit.org/show_bug.cgi?id=38340

        We now pass the ScriptExecutionContext to window.close so it can find
        the Frame and check whether navigation is allowed.  This check will
        almost always pass because you can only close top-level frames, but the
        check will fail when the calling script is sandboxed.

        Tests: fast/frames/sandboxed-iframe-close-top-noclose.html
               fast/frames/sandboxed-iframe-close-top.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        sandbox iframes have access to top.history methods
        https://bugs.webkit.org/show_bug.cgi?id=38152

        To enforce the sandbox restrictions on History, we need to pass the
        ScriptExecutionContext to WebCore.  This patch leaves the original
        History methods in place because they are used directly by folks who
        don't care about security checks.

        Test: fast/frames/sandboxed-iframe-history-denied.html

        * page/History.cpp:
        (WebCore::History::back):
        (WebCore::History::forward):
        (WebCore::History::go):
        * page/History.h:
        * page/History.idl:

2011-01-01  Adam Barth  <abarth@webkit.org>

        Remove empty file.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMAllInOne.cpp:
        * dom/Entity.cpp: Removed.

2011-01-01  Adam Barth  <abarth@webkit.org>

        Remove empty file.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSPopStateEventCustom.cpp: Removed.

2011-01-01  Adam Barth  <abarth@webkit.org>

        Remove empty files.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/BindingFrame.h: Removed.
        * bindings/generic/BindingLocation.h: Removed.

2011-01-01  Konstantin Tokarev  <annulen@yandex.ru>

        Reviewed by Darin Adler.

        Don't include Inspector headers when Inspector is disabled
        https://bugs.webkit.org/show_bug.cgi?id=51789

        * bindings/js/JSDOMWindowBase.cpp: Include Inspector headers when
        Inspector is enabled
        * dom/Document.cpp: Include Inspector headers when
        Inspector is enabled
        (WebCore::Document::recalcStyle): Disabled InspectorInstrumentationCookie
        handling
        * html/HTMLDocument.cpp: Include Inspector headers when
        Inspector is enabled
        * loader/FrameLoader.cpp: Include Inspector headers when
        Inspector is enabled
        * loader/ResourceLoadNotifier.cpp: Include Inspector headers when
        Inspector is enabled
        * page/Chrome.cpp: Include Inspector headers when
        Inspector is enabled
        * page/Console.cpp: Include Inspector headers when
        Inspector is enabled
        * page/ContextMenuController.cpp: Include Inspector headers when
        Inspector is enabled
        * page/DOMWindow.cpp: Include Inspector headers when
        Inspector is enabled
        (WebCore::DOMWindow::dispatchEvent): Disabled InspectorInstrumentationCookie
        handling
        * page/EventHandler.cpp: Include Inspector headers when
        Inspector is enabled
        * page/Page.cpp: Include Inspector headers when
        Inspector is enabled
        * storage/Database.cpp: Include Inspector headers when
        Inspector is enabled
        * workers/AbstractWorker.cpp: Include Inspector headers when
        Inspector is enabled
        * workers/DefaultSharedWorkerRepository.cpp: Include Inspector headers when
        Inspector is enabled
        * workers/SharedWorker.cpp: Include Inspector headers when
        Inspector is enabled
        * workers/Worker.cpp: Include Inspector headers when
        Inspector is enabled
        * workers/WorkerContext.cpp: Include Inspector headers when
        Inspector is enabled
        * workers/WorkerMessagingProxy.cpp: Include Inspector headers when
        Inspector is enabled
        * xml/XMLHttpRequest.cpp: Include Inspector headers when
        Inspector is enabled
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): Disabled
        InspectorInstrumentationCookie handling

2010-12-31  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        fast/loader/about-blank-hash-change.html fails on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=51788

        I'm unable to reproduce the failure locally, so this patch is slightly
        speculative.  We need to be slighly more careful how we compare the
        fragment identifiers for Chromium because Chromium uses a URL parser
        that is more agressive about canonicalization.

        * page/Location.cpp:
        (WebCore::Location::setHash):

2010-12-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Use GLib/GIO API for FileSystemGtk implementation
        https://bugs.webkit.org/show_bug.cgi?id=51617

        Complete implementation of FileSystem platform code for GLib. This
        converts remaining API points using POSIX calls to platform-independent
        GLib calls and fixes other compilation errors.

        No new tests. This code will be tested when an implementation
        of beginDragWithFiles is complete.

        (WebCore::JSDirectoryEntry::getFile):
        (WebCore::JSDirectoryEntry::getDirectory):
        * platform/FileSystem.h: Added forward declarations for GLib types to
        avoid GLib includes and changed the PlatformFileHandle to be a GIOStream.
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::openTemporaryFile): Reimplement using only GLib calls.
        (WebCore::openFile): Ditto.
        (WebCore::closeFile): Ditto.
        (WebCore::seekFile): Added implementation.
        (WebCore::writeToFile): Reimplement using only GLib calls.
        (WebCore::readFromFile): Ditto.

2010-12-31  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Some renaming and refactoring of form element code
        https://bugs.webkit.org/show_bug.cgi?id=51784

        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove): Call new overload of remove
        for option elements instead of putting the logic in the binding.

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::HTMLButtonElement): Updated for name changes.
        (WebCore::HTMLButtonElement::defaultEventHandler): Renamed argument to
        "event" instead of "evt". Also updated for name changes.
        (WebCore::HTMLButtonElement::isActivatedSubmit): Ditto.
        (WebCore::HTMLButtonElement::setActivatedSubmit): Ditto.
        (WebCore::HTMLButtonElement::appendFormData): Ditto.
        * html/HTMLButtonElement.h: Renamed m_activeSubmit to m_isActivatedSubmit
        to match the getter function name. The name still doesn't seem great.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement): Updated for name changes.
        (WebCore::HTMLFormElement::~HTMLFormElement): Use autoComplete function
        instead of m_autocomplete data member.
        (WebCore::HTMLFormElement::rendererIsNeeded): Use m_wasDemoted data member
        instead of otherwise-unused isDemoted function.
        (WebCore::HTMLFormElement::submitImplicitly): Updated for name changes.
        (WebCore::HTMLFormElement::validateInteractively): Removed code to clear
        m_insubmit. This is now handled by the caller, prepareForSubmission.
        (WebCore::HTMLFormElement::prepareForSubmission): Renamed. Updated for
        name changes. Moved code to clear m_isSubmittingOrPreparingForSubmission
        here from validateInteractively. Removed unneeded check of m_doingsubmit
        boolean before setting it.
        (WebCore::HTMLFormElement::submit): Factored this function into two.
        One for JavaScript and one for non-JavaScript. Neither function needs a frame
        argument, because the question being asked, anyPageIsProcessingUserGesture,
        is a question asked of an entire page group, not a specific frame or page,
        so it's not important which is the active frame.
        (WebCore::HTMLFormElement::submitFromJavaScript): Ditto.
        (WebCore::HTMLFormElement::reset): Updated for name changes.
        (WebCore::HTMLFormElement::parseMappedAttribute): Removed code to parse
        acceptAttr and got rid of code to set m_autocomplete.
        (WebCore::HTMLFormElement::elementForAlias): Changed return type to a raw
        pointer.
        (WebCore::HTMLFormElement::getNamedElements): Updated to use raw pointer
        and the vector find function. Added a FIXME about the comment.
        (WebCore::HTMLFormElement::documentDidBecomeActive): Use autoComplete
        function instead of m_autocomplete data member.
        (WebCore::HTMLFormElement::willMoveToNewOwnerDocument): Ditto.
        (WebCore::HTMLFormElement::didMoveToNewOwnerDocument): Ditto.
        (WebCore::HTMLFormElement::autoComplete): Ditto.
        * html/HTMLFormElement.h: Added a FIXME about renaming the autoComplete
        function. Renamed prepareSubmit to prepareForSubmission. Got rid of the
        frame argument from the submit function and added a new submitFromJavaScript
        variant. Removed the unneeded isDemoted function. Changed the return type
        of elementForAlias to a raw pointer. Removed m_autocomplete. Renamed
        m_insubmit to m_isSubmittingOrPreparingForSubmission, m_doingsubmit to
        m_shouldSubmit, m_inreset to m_inResetFunction, m_malformed to m_wasMalformed,
        m_demoted to m_wasDemoted. Use plain bool instead of bitfields.

        * html/HTMLFormElement.idl: Use the function named submitFromJavaScript
        instead of using CallWith=DynamicFrame because we don't need to know
        what frame is calling. If we did, it's not clear that the "dynamic"
        frame would be the right one anyway.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::remove): Added an overload that takes an option
        element, since the JavaScript binding supports this.
        * html/HTMLSelectElement.h: Ditto.

        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::handleDOMActivateEvent): Updated for name changes.
        * html/ImageInputType.h: Ditto.
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::handleDOMActivateEvent): Ditto.

2010-12-31  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Pass style for <area> instead of associated <img> when querying whether
        the theme draws the focus ring for an <area>
        https://bugs.webkit.org/show_bug.cgi?id=51632

        Fixes an issue where the style for the associated <img> of an <area>
        was passed when considering whether the theme should draw a focus ring
        for the <area>. Instead, we should pass the theme the style for the <area>.

        It's not possible to test this at this time since there are no themes
        that override focus ring drawing for <area>s.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintFocusRing): Moved call to RenderTheme::supportsFocusRing()
        such that it's called with respect to the focused <area>.

2010-12-31  Darin Adler  <darin@apple.com>

        * WebCore.xcodeproj/project.pbxproj: Added back the language.
        Developers should be using Xcode 3.2.5 or newer.

2010-12-31  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move V8 to WebCore Location implementation
        https://bugs.webkit.org/show_bug.cgi?id=51768

        * bindings/generic/BindingFrame.h:
        * bindings/generic/BindingLocation.h:
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::setLocation):
        * bindings/v8/V8Utilities.cpp:
        * bindings/v8/V8Utilities.h:
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::hashAccessorSetter):
        (WebCore::V8Location::hostAccessorSetter):
        (WebCore::V8Location::hostnameAccessorSetter):
        (WebCore::V8Location::hrefAccessorSetter):
        (WebCore::V8Location::pathnameAccessorSetter):
        (WebCore::V8Location::portAccessorSetter):
        (WebCore::V8Location::protocolAccessorSetter):
        (WebCore::V8Location::searchAccessorSetter):
        (WebCore::V8Location::reloadCallback):
        (WebCore::V8Location::replaceCallback):
        (WebCore::V8Location::assignCallback):

2010-12-31  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Eric Seidel.

        Make retrieving extraMediaControlsStyleSheet be page dependent.
        https://bugs.webkit.org/show_bug.cgi?id=51752

        Use themeForPage to retrieve extraMediaControlsStyleSheet for media
        controls.

        No new tests because no platform-specific theme implementation uses
        the passed page pointer yet.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):

2010-12-31  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] WebInspector.ResourcesPanel.prototype.canShowSourceLine() broken.

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

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowSourceLine):

2010-12-31  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix after r74800.

        * bindings/js/JSDOMWindowCustom.cpp: Add missing header.
        * bindings/js/JSLocationCustom.cpp: Ditto.

2010-12-31  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move HTML and XML parser benchmarks into PerformanceTests/Parser
        https://bugs.webkit.org/show_bug.cgi?id=51772

        Remove the benchmarks folder now that it's empty.  Future benchmarks
        should go in the PerformanceTests directory.

        * benchmarks: Removed.
        * benchmarks/parser: Removed.
        * benchmarks/parser/html-parser.html: Removed.
        * benchmarks/parser/resources: Removed.
        * benchmarks/parser/resources/html5.html: Removed.
        * benchmarks/parser/resources/runner.js: Removed.
        * benchmarks/parser/xml-parser.html: Removed.

2010-12-31  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Add XML parser benchmark
        https://bugs.webkit.org/show_bug.cgi?id=51612

        Move the JavaScript code of html parser into a separate file to share it with xml parser.

        * benchmarks/parser/html-parser.html:
        * benchmarks/parser/resources/runner.js: Copied from WebCore/benchmarks/parser/html-parser.html.
        (runFunction):
        (run):
        (start):
        * benchmarks/parser/xml-parser.html: Copied from WebCore/benchmarks/parser/html-parser.html.

2010-12-29  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Update validation of stencil mask and ref values
        https://bugs.webkit.org/show_bug.cgi?id=50716

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext): Initialize cached stencil settings.
        (WebCore::WebGLRenderingContext::drawArrays): Validate stencil settings.
        (WebCore::WebGLRenderingContext::drawElements): Ditto.
        (WebCore::WebGLRenderingContext::stencilFunc): Cache stencil settings, but generate no error.
        (WebCore::WebGLRenderingContext::stencilFuncSeparate): Ditto.
        (WebCore::WebGLRenderingContext::stencilMask): Ditto.
        (WebCore::WebGLRenderingContext::stencilMaskSeparate): Ditto.
        (WebCore::WebGLRenderingContext::validateStencilSettings): Helper function to validate stencil settings.
        * html/canvas/WebGLRenderingContext.h: Declare stencil setting members.

2010-12-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fork pieces of RenderThemeGtk that will differ for GTK+ 3
        https://bugs.webkit.org/show_bug.cgi?id=51755

        Split out pieces of RenderThemeGtk into RenderThemeGtk2 and RenderThemeGtk3
        if they are going to differ between GTK+ 2.x and GTK+ 3.x. This is the preliminary
        step to landing support for the new GTK+ 3.x theming API.

        No new tests. This should not change functionality.

        * GNUmakefile.am: Add RenderThemeGtk2 and RenderThemeGtk3 to the sources list.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustTextFieldStyle): Call the setTextInputBorders static method.
        (WebCore::RenderThemeGtk::adjustTextAreaStyle): Ditto.
        (WebCore::RenderThemeGtk::paintMediaButton): Ditto.
        (WebCore::RenderThemeGtk::adjustProgressBarStyle): ditto.
        * platform/gtk/RenderThemeGtk.h: Make setTextInputBorders a method, so that
        it can be exist in RenderThemeGtk{2,3} and be called from RenderThemeGtk.
        * platform/gtk/RenderThemeGtk2.cpp: Added. A fork of the bits of RenderThemeGtk
        that will eventually be platform-dependent.
        * platform/gtk/RenderThemeGtk3.cpp: Added. Ditto.

2010-12-30  Justin Schuh  <jschuh@chromium.org>

        Reviewed by James Robinson.

        Reverting r74292 because it introduced a crash with ruby text.
        https://bugs.webkit.org/show_bug.cgi?id=51637

        Test: fast/css/counters/counter-ruby-text-cleared.html

        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):

2010-12-30  Darin Adler  <darin@apple.com>

        Reviewed by David Kilzer.

        Remove unused JSBinding source files
        https://bugs.webkit.org/show_bug.cgi?id=51762

        * bindings/js/JSBinding.h: Removed.
        * bindings/js/specialization: Removed.
        * bindings/js/specialization/JSBindingState.cpp: Removed.
        * bindings/js/specialization/JSBindingState.h: Removed.

        * CMakeLists.txt: Removed references to files.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Ditto.

2010-12-30  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Remove Document.h include from some headers where it isn't necessary
        https://bugs.webkit.org/show_bug.cgi?id=51730

        No new tests because no new functionality.

        * editing/EditingStyle.cpp:
        * editing/EditingStyle.h:
        * editing/SelectionController.h:
        * editing/visible_units.h:
        * html/HTMLAudioElement.h:
        * html/HTMLBodyElement.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.h:
        * xml/DOMParser.cpp:
        * xml/DOMParser.h:
        (WebCore::DOMParser::create):
        (WebCore::DOMParser::DOMParser):

2010-12-30  Benjamin C Meyer  <bmeyer@rim.com>

        Reviewed by Darin Adler.

        bindings/js/JSDesktopNotificationsCustom.cpp is not included in the cmake build
        which is required when NOTIFICATIONS is enabled.

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

        * CMakeLists.txt:

2010-12-30  Antti Koivisto  <antti@apple.com>

        Not reviewed.

        Revert accidental project file change.

        * WebCore.xcodeproj/project.pbxproj:

2010-12-30  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=51134
        Move loading related code from MemoryCache to CachedResourceLoader

        - Merge MemoryCache::requestResource to CachedResourceLoader::requestResource
        - Merge MemoryCache::requestUserCSSStyleSheet to CachedResourceLoader::requestUserCSSStyleSheet
        - Move MemoryCache::revalidateResource to CachedResourceLoader::revalidateResource
        - Add MemoryCache::add
        - Refactor the decision on whether to reload, revalidate or use the existing resource to 
          a single function, CachedResourceLoader::determineRevalidationPolicy

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
            
            Remove a code path that called MemoryCache::requestResource directly. This code path would have crashed
            if ever taken (since it passes null CachedResourceLoader pointer).
            
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        (WebCore::CachedResource::mustRevalidateDueToCacheHeaders):
        
            Moved tests that were not about cache headers to CachedResourceLoader::determineRevalidationPolicy and renamed.
        
        (WebCore::CachedResource::setLoadPriority):
        
            Check for Unresolved value before setting.
        
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::setOwningCachedResourceLoader):
        
            Rename to be bit less mysterious.
        
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        
            This was moved from MemoryCache.
        
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        
            This was moved/merged from MemoryCache.
        
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::requestResource):
        
            This combines MemoryCache::requestResource and the existing method.
        
        (WebCore::CachedResourceLoader::revalidateResource):
        
            This was moved from MemoryCache.
        
        (WebCore::CachedResourceLoader::loadResource):
        
            New method for initiating loading.
        
        (WebCore::CachedResourceLoader::notifyLoadedFromMemoryCache):
        
            Renamed the mysterious CachedResourceLoader::checkCacheObjectStatus
        
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::add):
        * loader/cache/MemoryCache.h:
        (WebCore::MemoryCache::remove):

2010-12-30  Steve Block  <steveblock@google.com>

        Reviewed by Gavin Barraclough.

        Enable JSC Rich Source Info for Android even when Inspector and Debugger are disabled
        https://bugs.webkit.org/show_bug.cgi?id=51740

        This is a policy decision for Android.

        No new tests, simply enabling existing, tested code on Android.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo):

2010-12-30  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Adam Barth.

        REGRESSION: fast/dom/cssTarget-crash.html fails
        https://bugs.webkit.org/show_bug.cgi?id=20342

        Do not reload the page when submitting a form, using "GET" method, and the
        form action url matches the location url, except for the fragment.
      
        Test: fast/forms/submit-change-fragment.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::shouldScrollToAnchor):
        * loader/FrameLoader.h:

2010-12-30  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move security logic out of the JavaScript binding for location into the DOM class
        https://bugs.webkit.org/show_bug.cgi?id=51714

        * WebCore.xcodeproj/project.pbxproj: Removed JSBindingState.cpp, JSBindingState.h,
        and JSBinding.h. Later, we'll remove them from other project files and delete
        the source files.

        * bindings/js/JSBinding.h: Emptied out, marked for later deletion.

        * bindings/js/JSDOMBinding.cpp: Removed unused overload of the jsOwnedStringOrNull
        function, unused shouldAllowNavigation function, unused allowSettingSrcToJavascriptURL
        function, unused toLexicalFrame function, unused completeURL function, unused
        getCachedDOMStructure and cacheDOMStructure overloads, and unused
        getCachedDOMConstructor and cacheDOMConstruction functions.
        (WebCore::activeDOMWindow): Added.
        (WebCore::firstDOMWindow): Added.
        (WebCore::toDynamicFrame): Changed to use firstDOMWindow instead of calling through
        JSBindingState, since the latter is an unneeded abstraction.
        (WebCore::processingUserGesture): Changed to call ScriptController's function
        rather than calling through JSBindingState, which is an unneeded abstraction

        * bindings/js/JSDOMBinding.h: Removed the functions mentioned above. Added
        activeDOMWindow and firstDOMWindow. Also added a FIXME for the extremely poorly
        named allowsAccessFromFrame functions, which answer the question of whether
        script is allowed access *to* a frame.

        * bindings/js/JSDOMWindowCustom.cpp: Removed many unneeded includes.
        (WebCore::JSDOMWindow::setLocation): Streamlined by using the new
        activeDOMWindow and firstDOMWindow functions.
        (WebCore::JSDOMWindow::open): Ditto.
        (WebCore::JSDOMWindow::showModalDialog): Ditto.
        (WebCore::JSDOMWindow::postMessage): Ditto.

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHref): Changed to pass the active and first windows through
        to the Location::setHref function, with it doing the rest of the work. This moves
        work out of the DOM binding that belongs in the DOM itself. Eventually such functions
        could even be automatically generated by the bindings script.
        (WebCore::JSLocation::setProtocol): Ditto.
        (WebCore::JSLocation::setHost): Ditto.
        (WebCore::JSLocation::setHostname): Ditto.
        (WebCore::JSLocation::setPort): Ditto.
        (WebCore::JSLocation::setPathname): Ditto.
        (WebCore::JSLocation::setSearch): Ditto.
        (WebCore::JSLocation::setHash): Ditto.
        (WebCore::JSLocation::replace): Ditto.
        (WebCore::JSLocation::reload): Ditto.
        (WebCore::JSLocation::assign): Ditto.

        * bindings/js/specialization/JSBindingState.cpp: Emptied out, marked for later deletion.
        * bindings/js/specialization/JSBindingState.h: Emptied out, marked for later deletion.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setLocation): Added a SetLocationLocking argument that allows us
        to use this function for Location::replace, which is the same as setLocation except that
        it locks both history and the back/forward list.
        * page/DOMWindow.h: Ditto.

        * page/Location.cpp:
        (WebCore::Location::setHref): Added. Uses DOMWindow::setLocation so that the security
        logic there does not have to be repeated or even refactored.
        (WebCore::Location::setProtocol): Ditto.
        (WebCore::Location::setHost): Ditto.
        (WebCore::Location::setHostname): Ditto.
        (WebCore::Location::setPort): Ditto.
        (WebCore::Location::setPathname): Ditto.
        (WebCore::Location::setSearch): Ditto.
        (WebCore::Location::setHash): Ditto.
        (WebCore::Location::assign): Ditto.
        (WebCore::Location::replace): Ditto.
        (WebCore::Location::reload): Added. Security logic was refactored from the code in
        JSLocationCustom.cpp. Added a FIXME about the fact that this security logic seems
        possibly unneeded.

        * page/Location.h: Fixed indentation on the whole file. Added the new functions above.
        (WebCore::Location::create):
        (WebCore::Location::frame):

2010-12-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Pasting a style property with value should automatically split it into prop/value
        https://bugs.webkit.org/show_bug.cgi?id=51581

        The "paste" DOM event is handled for the CSS property name field to parse out the name and value parts
        of a CSS property being pasted (by the first ':' found). The property is committed (if not a new one),
        and the edit focus is transferred to the value field.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.selectElement):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.js:
        (WebInspector.completeURL): Drive-by: return full URLs as-is.
        (WebInspector.startEditing.cleanUpAfterEditing):
        (WebInspector.startEditing):
        (WebInspector.startEditing.pasteEventListener):
        (WebInspector.startEditing.keyDownEventListener):

2010-12-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: breakpoint is not disabled when clicking on breakpoints sidebar pane checkbox.
        https://bugs.webkit.org/show_bug.cgi?id=51745

        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.set enabled):

2010-12-30  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: call stack shows "Paused on a JavaScript breakpoint" when stepping.
        https://bugs.webkit.org/show_bug.cgi?id=51748

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.registerShortcuts):
        (WebInspector.CallStackSidebarPane.prototype._scriptBreakpointHit):
        (WebInspector.CallStackSidebarPane.prototype._nativeBreakpointHit):

2010-12-30  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Fix leak of MemoryInfo wrappers introduced in r57004 (see issue 51712).

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

        * WebCore.gypi:
        * WebCore.pro:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::memoryAccessorGetter):
        * bindings/v8/custom/V8PerformanceCustom.cpp: Copied from V8ConsoleCustom.cpp.
        (WebCore::V8Performance::memoryAccessorGetter):
        * page/Console.idl:
        * page/Performance.idl:

2010-12-30  Steve Block  <steveblock@google.com>

        Reviewed by Sam Weinig.

        Visiting macnn.com often causes SQL spew via geolocation database
        https://bugs.webkit.org/show_bug.cgi?id=51557

        If the Geolocation position cache database path has not been set, early-out
        rather than using an empty path and thus failing to open the database.
        This avoids SQL log spew.

        Also, avoid starting the database thread until the path has been set, and
        shorten the thread name to avoid warnings due to exceeding 30 characters.

        No new tests, implementation clean-up only.

        * page/GeolocationPositionCache.cpp:
        (WebCore::GeolocationPositionCache::addUser):
        (WebCore::GeolocationPositionCache::removeUser):
        (WebCore::GeolocationPositionCache::setDatabasePath):
        (WebCore::GeolocationPositionCache::startBackgroundThread):

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

        Reviewed by Martin Robinson.

        [GTK] minimal build fails at link time due to missing sqlite3 symbols
        https://bugs.webkit.org/show_bug.cgi?id=51327

        Guard the code calling sqlite3 with the ENABLE(DATABASE) check.

        No new tests, build fix only.

        * platform/sql/SQLiteAuthorizer.cpp:
        * platform/sql/SQLiteDatabase.cpp:
        * platform/sql/SQLiteFileSystem.cpp:
        * platform/sql/SQLiteStatement.cpp:
        * platform/sql/SQLiteTransaction.cpp:

2010-12-30  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dirk Schulze.

        Prevent stringToLengthType() from skipping past end-of-string on invalid length unit. 
        https://bugs.webkit.org/show_bug.cgi?id=51692

        * svg/SVGLength.cpp:
        (WebCore::stringToLengthType):
        (WebCore::SVGLength::setValueAsString):

2010-12-30  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Eric Seidel.

        Create a helper function for finding descendent video elements for a node.
        https://bugs.webkit.org/show_bug.cgi?id=51696

        Test: media/video-element-other-namespace-crash.html

        * html/MediaDocument.cpp:
        (WebCore::descendentVideoElement): helper function.
        (WebCore::MediaDocument::defaultEventHandler): use the new helper function. fix code repetitions.
        (WebCore::MediaDocument::replaceMediaElementTimerFired): use the new helper function.

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract Database & DOM Storage agents; remove InspectorBackend.
        https://bugs.webkit.org/show_bug.cgi?id=51707

        This change brushes up storage agents + removes redundant InspectorBackend class.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::databaseForId):
        (WebCore::InjectedScriptHost::selectDatabase):
        (WebCore::InjectedScriptHost::selectDOMStorage):
        (WebCore::InjectedScriptHost::inspectorDOMAgent):
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp: Removed.
        * inspector/InspectorBackend.h: Removed.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::setInjectedScriptSource):
        (WebCore::InspectorController::dispatchOnInjectedScript):
        (WebCore::InspectorController::releaseWrapperObjectGroup):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMStorageAgent.cpp: Added.
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::selectDOMStorage):
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageResourceForId):
        * inspector/InspectorDOMStorageAgent.h: Copied from WebCore/inspector/InspectorStorageAgent.h.
        (WebCore::InspectorDOMStorageAgent::create):
        (WebCore::InspectorDOMStorageAgent::frontend):
        * inspector/InspectorDatabaseAgent.cpp: Renamed from WebCore/inspector/InspectorStorageAgent.cpp.
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        (WebCore::InspectorDatabaseAgent::selectDatabase):
        (WebCore::InspectorDatabaseAgent::clearFrontend):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        * inspector/InspectorDatabaseAgent.h: Renamed from WebCore/inspector/InspectorStorageAgent.h.
        (WebCore::InspectorDatabaseAgent::create):
        (WebCore::InspectorDatabaseAgent::frontend):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype.attachDebuggerWhenShown):
        (WebInspector.ScriptsPanel.prototype._toggleDebugging):

2010-12-29  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        Cleanup SVG code according to the webkit style rules 3
        https://bugs.webkit.org/show_bug.cgi?id=51490

        Last patch to fix indention and other style issues according to the WebKit style rules in the SVG code.
        Just one file can't be fixed for check-webkit-style.
        * SVGAllInOne.cpp: check-webkit-style wants a config.h at the beginning

        No changes of functionality, so no new tests. 

        * svg/SVGAllInOne.cpp:
        * svg/SVGImage.cpp:
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::setValue):
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.h:
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        (WebCore::SVGPreserveAspectRatio::transformRect):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::viewport):
        * svg/SVGSetElement.h:
        * svg/SVGStylable.h:
        (WebCore::SVGStylable::~SVGStylable):
        * svg/SVGStyledLocatableElement.h:
        (WebCore::SVGStyledLocatableElement::localCoordinateSpaceTransform):
        (WebCore::SVGStyledLocatableElement::isStyledLocatable):
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::isKnownAttribute):
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::parseMappedAttribute):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::isKnownAttribute):
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.h:
        (WebCore::SVGTitleElement::rendererIsNeeded):
        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        (WebCore::SVGTransformDistance::scaledDistance):
        (WebCore::SVGTransformDistance::addSVGTransforms):
        (WebCore::SVGTransformDistance::addSVGTransform):
        (WebCore::SVGTransformDistance::addToSVGTransform):
        (WebCore::SVGTransformDistance::isZero):
        * svg/SVGTransformList.cpp:
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::getTarget):
        * svg/SVGVKernElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::parseViewSpec):
        * svg/SVGZoomAndPan.h:
        (WebCore::SVGZoomAndPan::SVGZoomAndPan):
        (WebCore::SVGZoomAndPan::~SVGZoomAndPan):
        (WebCore::SVGZoomAndPan::zoomAndPan):
        * svg/SVGZoomEvent.h:
        (WebCore::SVGZoomEvent::create):
        * svg/animation/SMILTime.cpp:
        (WebCore::operator*):
        * svg/animation/SMILTime.h:
        (WebCore::SMILTime::SMILTime):
        (WebCore::SMILTime::unresolved):
        (WebCore::SMILTime::indefinite):
        (WebCore::SMILTime::operator=):
        (WebCore::SMILTime::value):
        (WebCore::SMILTime::isFinite):
        (WebCore::SMILTime::isIndefinite):
        (WebCore::SMILTime::isUnresolved):
        (WebCore::operator==):
        (WebCore::operator!): new operator checks for 0 or infinite values.
        (WebCore::operator!=):
        (WebCore::operator>):
        (WebCore::operator<):
        (WebCore::operator>=):
        (WebCore::operator<=):
        * svg/animation/SMILTimeContainer.h:
        (WebCore::SMILTimeContainer::create):
        (WebCore::SMILTimeContainer::setDocumentOrderIndexesDirty):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::operator==):
        (WebCore::SVGSMILElement::repeatingDuration):
        (WebCore::SVGSMILElement::resolveInterval):
        (WebCore::SVGSMILElement::calculateAnimationPercentAndRepeat):
        * svg/animation/SVGSMILElement.h:
        (WebCore::SVGSMILElement::timeContainer):
        (WebCore::SVGSMILElement::intervalBegin):
        (WebCore::SVGSMILElement::intervalEnd):
        (WebCore::SVGSMILElement::previousIntervalBegin):
        (WebCore::SVGSMILElement::documentOrderIndex):
        (WebCore::SVGSMILElement::setDocumentOrderIndex):
        * svg/graphics/SVGImage.h:
        (WebCore::SVGImage::create):
        (WebCore::SVGImage::destroyDecodedData):
        (WebCore::SVGImage::decodedSize):
        (WebCore::SVGImage::frameAtIndex):
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::create):
        (WebCore::SVGFilterBuilder::lastEffect):
        (WebCore::SVGFilterBuilder::getEffectReferences):
        (WebCore::SVGFilterBuilder::addBuiltinEffects):

2010-12-29  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Darin Adler.

        ASSERT(oldchild->parent() == owner) fails.
        https://bugs.webkit.org/show_bug.cgi?id=50480

        In RenderBlock removeChild function, when the inlineChildrenBlock(equal to prev or next)
        is reparented to blockChildrenBlock, it is no longer a child of "this". This causes the
        assertion failure when removeChildNode executes on the child(equal to prev or next).
        Fix a typo in canMergeContiguousAnonymousBlocks.

        Test: fast/multicol/span/double-merge-anonymous-block-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks): fix typo, change prev to next.
        (WebCore::RenderBlock::removeChild): if prev or not is reparented, then set it to zero.

2010-12-29  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Darin Adler.

        Check SVG element type in FrameView::scrollToAnchor
        https://bugs.webkit.org/show_bug.cgi?id=51718

        Test: svg/custom/scroll-to-anchor-in-symbol.svg

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

2010-12-29  Anton Muhin  <antonm@chromium.org>

        Reviewed by Eric Seidel.

        [v8] Minor cleanup: remove unused method (the only method which can mutate context of V8DOMWindowShell)
        https://bugs.webkit.org/show_bug.cgi?id=51704

        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8DOMWindowShell.h:

2010-12-29  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Darin Adler.

        Use a HashMap for m_continuation to save memory
        https://bugs.webkit.org/show_bug.cgi?id=43716

        Saving memory consumption by applying a HashMap convention to
        continuation pointers of RenderInline and RenderBlock classes.

        * rendering/RenderBlock.cpp: Removed m_continuation.
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::destroy):
        (WebCore::RenderBlock::inlineElementContinuation):
        (WebCore::RenderBlock::blockElementContinuation):
        * rendering/RenderBlock.h: Removed m_continuation.
        * rendering/RenderBoxModelObject.cpp: Added a hash map for continuations.
        (WebCore::RenderBoxModelObject::destroy): Added an assertion.
        (WebCore::RenderBoxModelObject::continuation): Added.
        (WebCore::RenderBoxModelObject::setContinuation): Added.
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderInline.cpp: Removed m_continuation.
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::destroy):
        (WebCore::RenderInline::inlineElementContinuation):
        * rendering/RenderInline.h: Removed m_continuation.

2010-12-27  Amruth Raj  <amruthraj@motorola.com> and Ravi Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        [GTK] Enable building whatever already exists of WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=37369

        No new functionality added or deleted. Only makefile change. Hence, no tests added.

        * GNUmakefile.am: Removed bindings/gobject from webcore_sources & webcore_cppflags and
        added them to WebKit/gtk/GNUmakefile.am
        * platform/network/soup/cache/webkit/soup-cache.h: Remove include <webkit/webkitdefines.h>
        and declare WEBKIT_API directly

2010-12-29  Eric Seidel  <eric@webkit.org>

        Unreviewed.

        Simplify make-hash-tools.pl
        https://bugs.webkit.org/show_bug.cgi?id=49922

        Added HashTools.h to the project file now that its not autogenerated.
        I also sorted the project file using sort-xcode-project-file

        * WebCore.xcodeproj/project.pbxproj:

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

        Not reviewed: revert r74755 and 74757.

2010-12-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Sam Weinig.

        JSDataViewCustom.cpp gives the fastcall calling convention to functions called via C++
        https://bugs.webkit.org/show_bug.cgi?id=51722

        Remove the JSC_HOST_CALL from methods that are called from C++. JSC_HOST_CALL gives
        methods the fastcall calling convention, which leads to runtime errors when they are
        called from C++. Also remove a bit of unnecessary code duplication.

        No new tests. This is covered by fast/canvas/webgl/data-view-test.html.

        * bindings/js/JSDataViewCustom.cpp:
        (WebCore::getDataViewMember): Remove duplicated code.
        (WebCore::JSDataView::getInt8): Remove JSC_HOST_CALL.
        (WebCore::JSDataView::getUint8): Ditto.
        (WebCore::JSDataView::getFloat32): Ditto.
        (WebCore::JSDataView::getFloat64): Ditto.
        (WebCore::setDataViewMember): Remove duplicated code.
        (WebCore::JSDataView::setInt8): Remove JSC_HOST_CALL.
        (WebCore::JSDataView::setUint8): Ditto.

2010-12-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Kenneth Russel.

        A more robust fix for https://bugs.webkit.org/show_bug.cgi?id=51681

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::attach): Added. Like recalcStyle(), calls
        CanvasRenderingContext2D::updateFont() if necessary. This covers the case of a detach/
        attach-type style recalc.
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal): Removed the early return added in
        r74716. A font that is loading custom fonts is okay to use, as long as it is valid.
        (WebCore::CanvasRenderingContext2D::accessFont): Added a call to
        Document::updateStyleIfNeeded(). This ensures that any pending style recalc will take place
        and update the font if it is invalid.
        * platform/graphics/Font.h:
        (WebCore::Font::loadingCustomFonts): Made this private.

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

        Not reviewed: Qt build fix.

        * inspector/InspectorController.cpp:

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract Database & DOM Storage
        agents; remove InspectorBackend.
        https://bugs.webkit.org/show_bug.cgi?id=51707

        This change brushes up storage agents + removes redundant
        InspectorBackend class.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::databaseForId):
        (WebCore::InjectedScriptHost::selectDatabase):
        (WebCore::InjectedScriptHost::selectDOMStorage):
        (WebCore::InjectedScriptHost::inspectorDOMAgent):
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp: Removed.
        * inspector/InspectorBackend.h: Removed.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::setInjectedScriptSource):
        (WebCore::InspectorController::dispatchOnInjectedScript):
        (WebCore::InspectorController::releaseWrapperObjectGroup):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMStorageAgent.cpp: Added.
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageEntries):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::selectDOMStorage):
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageResourceForId):
        * inspector/InspectorDOMStorageAgent.h: Copied from WebCore/inspector/InspectorStorageAgent.h.
        (WebCore::InspectorDOMStorageAgent::create):
        (WebCore::InspectorDOMStorageAgent::frontend):
        * inspector/InspectorDatabaseAgent.cpp: Renamed from WebCore/inspector/InspectorStorageAgent.cpp.
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        (WebCore::InspectorDatabaseAgent::executeSQL):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        (WebCore::InspectorDatabaseAgent::selectDatabase):
        (WebCore::InspectorDatabaseAgent::clearFrontend):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        * inspector/InspectorDatabaseAgent.h: Renamed from WebCore/inspector/InspectorStorageAgent.h.
        (WebCore::InspectorDatabaseAgent::create):
        (WebCore::InspectorDatabaseAgent::frontend):
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):

2010-12-29  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Assertion failure: element->inDocument() in AsyncScriptRunner::executeScriptSoon()
        https://bugs.webkit.org/show_bug.cgi?id=51067

        Typically when a script element is removed from the document, the cached script
        client is removed. However, during the before load event, the cached script client
        hasn't been created yet so it can't be removed.

        This patch handles that case by explicitly checking if the script element was
        removed during the beforeload event. Also, it avoids caching the Document references
        over the arbitrary script execution in the before load event.

        Test: fast/dom/HTMLScriptElement/move-in-beforeload.html
              fast/dom/HTMLScriptElement/remove-in-beforeload.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestScript):

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: Element highlight tooltip displays wrong element size when zoomed in
        https://bugs.webkit.org/show_bug.cgi?id=51703

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::drawElementTitle):

2010-12-29  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kent Tamura.

        [HTML5][Forms] Support for :in-range and :out-of-range CSS selectors
        https://bugs.webkit.org/show_bug.cgi?id=29071

        Use InputType::rangeUnderflow() and InputType::rangeOverflow()
        to determine if a control is in-range or out-of-range.

        Tests: fast/css/pseudo-in-range-invalid-value.html
               fast/css/pseudo-in-range.html
               fast/css/pseudo-out-of-range.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/Element.h:
        (WebCore::Element::isInRange):
        (WebCore::Element::isOutOfRange):
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::supportsRangeLimitation):
        * html/BaseDateAndTimeInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isInRange):
        (WebCore::HTMLInputElement::isOutOfRange):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::supportsRangeLimitation):
        * html/InputType.h:
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::supportsRangeLimitation):
        * html/NumberInputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::supportsRangeLimitation):
        * html/RangeInputType.h:

2010-12-29  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Eric Seidel.

        When cloning an anonymous block, make sure to set the childrenInline flag based
        on the state of the block to be cloned.
        https://bugs.webkit.org/show_bug.cgi?id=51489

        Test: fast/multicol/span/clone-anonymous-block-non-inline-child-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone): add code to handle cloning of anonymous blocks.
        (WebCore::RenderBlock::splitBlocks): remove anonymous block creation calls since it is now handled by clone().

2010-12-29  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for WinCE after r73802.

        Reapply parts from r72585:
        Port ContextMenuWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=48408

        * CMakeLists.txt:
        * platform/ContextMenu.h:
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::getContextMenuItems):
        (WebCore::ContextMenu::createNativeMenuFromItems):

2010-12-29  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with Qt in namespace
        https://bugs.webkit.org/show_bug.cgi?id=51701

        * platform/graphics/ContextShadow.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/network/NetworkingContext.h:
        * platform/network/qt/QtNAMThreadSafeProxy.h:
        * plugins/PluginView.h:

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

        Reviewed by Pavel Feldman.

        Web Inspector: A disabled style property should get enabled when edited
        https://bugs.webkit.org/show_bug.cgi?id=51679

        Test: inspector/styles-disable-then-change.html

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setText.callback):

2010-12-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Remove WebKitGenerators
        https://bugs.webkit.org/show_bug.cgi?id=50445

        * CMakeLists.txt: Pass preprocessor to generate-bindings.pl.

2010-12-28  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=51522
        Use deviceRGBColorSpaceRef() instead of calling CGColorSpaceCreateDeviceRGB()

        * page/win/FrameCGWin.cpp:
        (WebCore::imageFromRect):
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        * platform/graphics/gstreamer/ImageGStreamerCG.mm:
        (ImageGStreamer::ImageGStreamer):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::CGContextWithHDC):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContext::drawWindowsBitmap):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::create):
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/image-decoders/cg/ImageDecoderCG.cpp:
        (WebCore::createColorSpace):
        * platform/win/DragImageCGWin.cpp:
        (WebCore::allocImage):
        (WebCore::createCgContextFromBitmap):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintSliderTrack):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):

2010-12-28  Daniel Bates  <dbates@rim.com>

        Reviewed by Sam Weinig.

        Substitute // MARK: for compiler-specific #pragma mark
        https://bugs.webkit.org/show_bug.cgi?id=51657

        Fix compilation warnings about "#pragma mark" on GTK+ bots by
        substituting  "// MARK:" for "#pragma mark", which provides
        analogous code-bookmarking functionality under Xcode.

        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/mac/WebLayer.mm:

2010-12-28  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Eric Seidel.

        [Qt] GraphicsContext::getCTM() does not need to make a copy of QPainter::combinedTransform()
        https://bugs.webkit.org/show_bug.cgi?id=51687

        Use a const reference instead of a copy of QPainter::combinedTransform() 
        in GraphicsContext::getCTM()

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

2010-12-28  Takashi Toyoshima  <toyoshim@google.com>

        Reviewed by Eric Seidel.

        gcc detected 'control reaches end of non-void function' with
        -finstrument-functions option.
        https://bugs.webkit.org/show_bug.cgi?id=51669

        No new tests. These fixes are trivial.

        * dom/Element.cpp:
        (WebCore::Element::childTypeAllowed):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::cachedResourceTypeString):

2010-12-28  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Remove unused member of PendingScript
        https://bugs.webkit.org/show_bug.cgi?id=51684

        This was used when HTMLScriptRunner::runScript created a PendingScript
        for inline scripts. But now it just calls executeScript() directly.
        External scripts always have the minimum starting line number.

        No new tests because no changed functionality.

        * dom/PendingScript.cpp:
        (WebCore::PendingScript::releaseElementAndClear):
        * dom/PendingScript.h:
        (WebCore::PendingScript::PendingScript):
        (WebCore::PendingScript::operator=):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::sourceFromPendingScript):

2010-12-20  Antonio Gomes  <agomes@rim.com>

        Reviewed by Daniel Bates.

        Spatial Navigation: code clean up (Part VI)
        https://bugs.webkit.org/show_bug.cgi?id=50666

        No new tests needed.

        * page/FocusController.cpp:
        (WebCore::updatFocusCandidateIfNeeded): Assert renderer() and
        isElementNode() now that we are bailing out earlier in both the
        FocusCandidate constructor and FocusController::findFocusCandidateInContainer().
        * page/SpatialNavigation.h: Swapped the parameters order in canScrollInDirection
        and virtualRectForAreaElementAndDirection functions.
        (WebCore::FocusController::findFocusCandidateInContainer):
        (WebCore::FocusController::advanceFocusDirectionallyInContainer): Adjusted callsites
        of canScrollInDirection(), and added an early return if !isElementNode().
        (WebCore::FocusController::advanceFocusDirectionally): Adjusted callsite of
        virtualRectForAreaElementAndDirection();
        * page/SpatialNavigation.cpp:
        (WebCore::FocusCandidate::FocusCandidate): Assert if node is not a element node;
        (WebCore::isScrollableNode): Renamed from isScrollableContainerNode;
        (WebCore::scrollInDirection): Adjusted callsite after function name change;
        (WebCore::scrollableEnclosingBoxOrParentFrameForNodeInDi:rection): Assert if node is
        a documentNode.
        (WebCore::canScrollInDirection): Signature changed.
        (WebCore::canBeScrolledIntoView): Ditto.
        (WebCore::virtualRectForAreaElementAndDirection): Ditto.

2010-12-28  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Fix tiled compositor assertion after GPU process recovery.
        https://bugs.webkit.org/show_bug.cgi?id=51682

        After the GPU process recovers, the layer size is set to IntSize(),
        but IntRect::unite() has a special case for empty rects.  This
        behavior was causing the layer size to be too small, causing an
        out-of-bounds array access elsewhere.

        No new tests.

        * platform/graphics/chromium/LayerTilerChromium.cpp:
        (WebCore::LayerTilerChromium::growLayerToContain):

2010-12-23  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Initialize to 0 for undefined values in CopyTexImage2D
        https://bugs.webkit.org/show_bug.cgi?id=51421

        * html/canvas/WebGLFramebuffer.cpp: Track width/height/internalFormat of color buffer.
        (WebCore::WebGLFramebuffer::WebGLFramebuffer):
        (WebCore::WebGLFramebuffer::setAttachment):
        (WebCore::WebGLFramebuffer::getWidth):
        (WebCore::WebGLFramebuffer::getHeight):
        (WebCore::WebGLFramebuffer::getColorBufferFormat):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D): Initialize undefined pixels to 0.
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::framebufferTexture2D):
        (WebCore::WebGLRenderingContext::renderbufferStorage):
        (WebCore::WebGLRenderingContext::getBoundFramebufferWidth):
        (WebCore::WebGLRenderingContext::getBoundFramebufferHeight):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLTexture.cpp: Track width/height/internalFormat of a texture by target/level.
        (WebCore::WebGLTexture::getInternalFormat):
        (WebCore::WebGLTexture::getWidth):
        (WebCore::WebGLTexture::getHeight):
        (WebCore::WebGLTexture::mapTargetToIndex):
        (WebCore::WebGLTexture::getLevelInfo):
        * html/canvas/WebGLTexture.h:
        (WebCore::WebGLTexture::isTexture):
        * platform/graphics/GraphicsContext3D.h: Add getInternalFramebufferSize() function.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getInternalFramebufferSize):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getInternalFramebufferSize):

2010-12-23  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Map GLsizei to long instead of unsigned long in WebGLRenderingContext and GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=39855

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D): Map GLsizei to long.
        (WebCore::WebGLRenderingContext::copyTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::renderbufferStorage): Ditto.
        (WebCore::WebGLRenderingContext::scissor): Ditto.
        (WebCore::WebGLRenderingContext::texImage2DBase): Ditto.
        (WebCore::WebGLRenderingContext::texImage2D): Ditto.
        (WebCore::WebGLRenderingContext::texSubImage2DBase): Ditto.
        (WebCore::WebGLRenderingContext::texSubImage2DImpl): Ditto.
        (WebCore::WebGLRenderingContext::texSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::viewport): Ditto.
        (WebCore::WebGLRenderingContext::validateSize): Check the sizes are non-negative.
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:

2010-12-28  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Kenneth Russell.

        Fix crash with invalid font in m_fontList by not drawing text when a custom font is in the
        process of loading.
        https://bugs.webkit.org/show_bug.cgi?id=51681

        Test: canvas/philip/tests/2d.text-custom-font-load-crash.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal): bail out if a custom font is loading.
        * platform/graphics/Font.cpp:
        (WebCore::Font::operator==): Replace condition with new function loadingCustomFonts()
        (WebCore::Font::drawText): Replace condition with new function loadingCustomFonts()
        (WebCore::Font::drawEmphasisMarks): Replace condition with new function loadingCustomFonts()
        * platform/graphics/Font.h:
        (WebCore::Font::loadingCustomFonts): new function that returns if a custom font is loading.

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

        Reviewed by Eric Seidel.

        Combine setShadowRoot and clearShadowRoot into a simpler API
        https://bugs.webkit.org/show_bug.cgi?id=50971

        No change in behavior, and API is not used yet.

        * dom/Element.cpp:
        (WebCore::Element::setShadowRoot): Combined clearing and setting of
            the shadowRoot, also hooked up with setting and clearing of the
            corresponding shadowHost values.
        * dom/Element.h: renamed clearShadowRoot to removeShadowRoot and made it
            private.
        * dom/Node.h: Made shadow host-related functions public so that
            Element::setShadowRoot can access setShadowHost. It seems logical
            to make shadowHost public as well to keep the defs together.

2010-12-28  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Chromium] Expose extension API to select a node in WebInspector
        Do not request content for resources with non-numeric identifiers.
        https://bugs.webkit.org/show_bug.cgi?id=49727

        Test: http/tests/inspector/extensions-resources-redirect.html

        * inspector/front-end/NetworkManager.js:
        (WebInspector.NetworkManager.prototype._appendRedirect):

2010-12-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix for Qt.

        ResourceTreeModel.js was added.

        * inspector/front-end/WebKit.qrc:

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

        Reviewed by Pavel Feldman.

        [Chromium] Fix memory leak in Profiles tab concerned with heap profiles views.

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

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._reset):

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

        Reviewed by Pavel Feldman.

        Web Inspector: REGRESSION: Clicking image resource in style sidebar doesn't actually go to resource anymore
        https://bugs.webkit.org/show_bug.cgi?id=51663

        The base URI is now computed correctly for links from CSS property uri(...) values. Additionally,
        optional quotes/apostrophes and spaces are now allowed inside uri(...).

        Test: inspector/styles-url-linkify.html

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.linkifyURL):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle):

2010-12-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Protocol cleanup task. Introduce Network, DOMStorage and Database domains.

        Domain was changed for Resources, FileSystem etc. related methods.
        ResourcesManager was renamed to NetworkManager.
        ResourceTreeModel was extracted as separate file.
        FileSystem, Database, DOMStorage and ApplicationCache methods were
        removed from NetworkManager and added to corresponding classes.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage):
        (WebInspector.ConsoleView.prototype.clearMessages):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.ApplicationCache.updateApplicationCacheStatus):
        (WebInspector.ApplicationCache.updateNetworkState):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage.addDOMStorage):
        (WebInspector.DOMStorage.selectDOMStorage):
        (WebInspector.DOMStorage.updateDOMStorage):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.executeSql):
        (WebInspector.Database.addDatabase):
        (WebInspector.Database.selectDatabase):
        (WebInspector.Database.sqlTransactionSucceeded):
        (WebInspector.Database.sqlTransactionFailed):
        * inspector/front-end/FileSystemView.js:
        (WebInspector.FileSystem.didGetFileSystemPath):
        (WebInspector.FileSystem.didGetFileSystemError):
        (WebInspector.FileSystem.didGetFileSystemDisabled):
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        * inspector/front-end/NetworkManager.js: Added.
        (WebInspector.NetworkManager):
        (WebInspector.NetworkManager.prototype._createResource):
        (WebInspector.NetworkManager.prototype.identifierForInitialRequest):
        (WebInspector.NetworkManager.prototype.willSendRequest):
        (WebInspector.NetworkManager.prototype._updateResourceWithRequest):
        (WebInspector.NetworkManager.prototype._appendRedirect):
        (WebInspector.NetworkManager.prototype.markResourceAsCached):
        (WebInspector.NetworkManager.prototype.didReceiveResponse):
        (WebInspector.NetworkManager.prototype._updateResourceWithResponse):
        (WebInspector.NetworkManager.prototype.didReceiveContentLength):
        (WebInspector.NetworkManager.prototype.didFinishLoading):
        (WebInspector.NetworkManager.prototype.didFailLoading):
        (WebInspector.NetworkManager.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.NetworkManager.prototype._updateResourceWithCachedResource):
        (WebInspector.NetworkManager.prototype.setInitialContent):
        (WebInspector.NetworkManager.prototype.didCommitLoadForFrame):
        (WebInspector.NetworkManager.prototype.frameDetachedFromParent):
        (WebInspector.NetworkManager.prototype.didCreateWebSocket):
        (WebInspector.NetworkManager.prototype.willSendWebSocketHandshakeRequest):
        (WebInspector.NetworkManager.prototype.didReceiveWebSocketHandshakeResponse):
        (WebInspector.NetworkManager.prototype.didCloseWebSocket):
        (WebInspector.NetworkManager.prototype._processCachedResources):
        (WebInspector.NetworkManager.prototype._addFramesRecursively):
        (WebInspector.NetworkManager.requestContent):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.refreshResource):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._innerRequestContent):
        * inspector/front-end/ResourceManager.js: Removed.
        * inspector/front-end/ResourceTreeModel.js: Added.
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype.addOrUpdateFrame):
        (WebInspector.ResourceTreeModel.prototype.didCommitLoadForFrame):
        (WebInspector.ResourceTreeModel.prototype.frameDetachedFromParent):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.ResourceTreeModel.prototype.addResourceToFrame):
        (WebInspector.ResourceTreeModel.prototype._clearResources):
        (WebInspector.ResourceTreeModel.prototype.forAllResources):
        (WebInspector.ResourceTreeModel.prototype.addConsoleMessage):
        (WebInspector.ResourceTreeModel.prototype.clearConsoleMessages):
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):
        (WebInspector.ResourceTreeModel.prototype.resourceForURL):
        (WebInspector.ResourceTreeModel.prototype.bindResourceURL):
        (WebInspector.ResourceTreeModel.prototype._unbindResourceURL):
        (WebInspector.ResourceTreeModel.createResource):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.createResourceView):
        (WebInspector.ResourceView.resourceViewTypeMatchesResource):
        (WebInspector.ResourceView.resourceViewForResource):
        (WebInspector.ResourceView.recreateResourceView):
        (WebInspector.ResourceView.existingResourceViewForResource):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.canShowSourceLine):
        (WebInspector.ResourcesPanel.prototype.showSourceLine):
        (WebInspector.ResourcesPanel.prototype.showResource):
        (WebInspector.ResourcesPanel.prototype.get searchableViews.callback):
        (WebInspector.ResourcesPanel.prototype.get searchableViews):
        (WebInspector.FrameResourceTreeElement.prototype._errorsWarningsUpdated):
        (WebInspector.FrameResourceTreeElement.prototype._contentChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addScript):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForResource):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.forAllResources):
        (WebInspector.resourceForURL):

2010-12-27  Helder Correia  <helder@sencha.com>

        Reviewed by Ariya Hidayat.

        ContextShadow should use AffineTransform instead of TransformationMatrix
        https://bugs.webkit.org/show_bug.cgi?id=51661

        ContextShadow needs the CTM to make sure shadows are not affected by
        transformations when drawing on a canvas. AffineTransform is sufficient
        in this case.

        Existing tests: fast/canvas/canvas*shadow*html

        * platform/graphics/ContextShadow.cpp:
        (WebCore::ContextShadow::mustUseContextShadow):
        (WebCore::ContextShadow::adjustBlurDistance):
        (WebCore::ContextShadow::calculateLayerBoundingRect):
        * platform/graphics/ContextShadow.h:
        * platform/graphics/cairo/ContextShadowCairo.cpp:
        (WebCore::ContextShadow::getTransformationMatrixFromContext):
        * platform/graphics/qt/ContextShadowQt.cpp:
        (WebCore::ContextShadow::getTransformationMatrixFromContext):

2010-12-27  Daniel Bates  <dbates@rim.com>

        Reviewed by Antonio Gomes.

        Clean up: Rename HTMLFrameElementBase::getMarginWidth() and HTMLFrameElementBase::getMarginHeight()
        https://bugs.webkit.org/show_bug.cgi?id=51634

        Rename HTMLFrameElementBase::getMarginWidth() and HTMLFrameElementBase::getMarginHeight()
        to HTMLFrameElementBase::marginWidth() and HTMLFrameElementBase::marginHeight(), respectively.
        This will make the names of these getters consistent with the naming convention we use for
        getters.

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedIntoDocument):
        * html/HTMLFrameElementBase.h:
        (WebCore::HTMLFrameElementBase::marginWidth): Renamed; Formerly getMarginWidth().
        (WebCore::HTMLFrameElementBase::marginHeight): Renamed; Formerly getMarginHeight().
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):
        * page/FrameView.cpp:
        (WebCore::FrameView::init):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::viewCleared): Also renamed variables marginw and marginh
        to marginWidth and marginHeight, respectively. This makes the names of these variables
        consistent with the names of similar variables in SubframeLoader::loadSubframe() and FrameView::init().
        * rendering/RenderFrame.cpp:
        (WebCore::RenderFrame::viewCleared): Ditto.

2010-12-27  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [GTK] RenderThemeGtk::m_HScale and RenderThemeGtk::m_VScale are not initialized
        https://bugs.webkit.org/show_bug.cgi?id=51654

        Properly initialize slider members of RenderThemeGtk. This can lead to test crashes
        on some debug configurations.

        No new tests. This is already covered by current slider tests. It isn't crashing on
        the bots, but it does crash locally.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk): Properly initialize members.

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

        Reviewed by David Levin.

        [v8] Remove unused methods to protect/unprotect wrappers during garbage collection
        https://bugs.webkit.org/show_bug.cgi?id=51648

        * bindings/v8/ScriptController.cpp:
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::gcEpilogue):
        * bindings/v8/V8GCController.h:

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

        Unreviewed. Removed trailing spaces from a localized
        string to make it the same as the one used in the code.

        * English.lproj/localizedStrings.js:

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

        Reviewed by Eric Seidel.

        Browser is failing 16 baseline test from Selector API Test Suite
        https://bugs.webkit.org/show_bug.cgi?id=42968

        Throw an exception if there is no argument to querySelector or 
        querySelectorAll. This replaces the current behavior of passing the string
        "undefined" as the argument.

        No new tests, just updating the existing results for 
        fast/dom/SelectorAPI/resig-SelectorAPI-test.xhtml.

        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:

2010-12-26  MORITA Hajime  <morrita@google.com>

        Reviewed by Dan Bernstein.

        For box-shadow, non-primary shadows should have specified radii.
        https://bugs.webkit.org/show_bug.cgi?id=51386

        On paintBoxShadow(), the spread value accidentally accumulated accidentally
        during the loop, which should be applied individually for radius of each shadow. 
        This change makes the radii for rects computed for each shadow.
        
        Test: fast/box-shadow/spread-multiple-normal.html

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

2010-12-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Improve output of HTML parser benchmark
        https://bugs.webkit.org/show_bug.cgi?id=51611

        Calculate and show median, min and max values.

        * benchmarks/parser/html-parser.html:

2010-12-26  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Simon Fraser.

        Remove the bad assert in paintPaginatedChildLayer, hitTestPaginatedChildLayer. 
        https://bugs.webkit.org/show_bug.cgi?id=48772

        Test: fast/multicol/renderer-positioned-assert-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintPaginatedChildLayer):
        (WebCore::RenderLayer::hitTestPaginatedChildLayer):

2010-12-25  Peter Rybin  <peter.rybin@gmail.com>

        Reviewed by Adam Barth.

        Adds currentColumn (and currentLine) to SegmentedString. Switches
        HTMLTreeBuilder to HTMLDocumentParser::textPosition when it
        needs position for a <script> tag.

        SegmentedString should provide column position
        https://bugs.webkit.org/show_bug.cgi?id=51311

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::textPosition):
        * html/parser/HTMLInputStream.h:
        (WebCore::HTMLInputStream::current):
        (WebCore::InsertionPointRecord::InsertionPointRecord):
        (WebCore::InsertionPointRecord::~InsertionPointRecord):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::create):
        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::operator=):
        (WebCore::SegmentedString::numberOfCharactersConsumedSlow):
        (WebCore::SegmentedString::advanceSlowCase):
        (WebCore::SegmentedString::currentLine):
        (WebCore::SegmentedString::currentColumn):
        (WebCore::SegmentedString::setCurrentPosition):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::advancePastNewline):
        (WebCore::SegmentedString::advance):
        (WebCore::SegmentedString::numberOfCharactersConsumed):

2010-12-25  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        GraphicsContext: Don't pass StrokeStyle (enum) as const reference
        https://bugs.webkit.org/show_bug.cgi?id=51608

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::adjustLineToPixelBoundaries):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PainterOpenVG::setStrokeStyle):
        * platform/graphics/openvg/PainterOpenVG.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):

2010-12-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r74648): XHR layout test failures
        https://bugs.webkit.org/show_bug.cgi?id=51603

        Reverted r74648.

        * WebCore.exp.in:

2010-12-24  Dan Bernstein  <mitz@apple.com>

        Try to fix the Qt build after r74648.

        * WebCore.gypi:
        * WebCore.pro:
        * platform/network/qt/CredentialStorageQt.cpp: Added.
        (WebCore::CredentialStorage::getFromPersistentStorage):

2010-12-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        CSSStyleSelector cleanup
        https://bugs.webkit.org/show_bug.cgi?id=51597

        Make some methods const. Add assertion to checkOneSelector, with the
        intention of later removing the if (!e) check (this is hot code).

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::locateCousinList):
        (WebCore::CSSStyleSelector::canShareStyleWithElement):
        (WebCore::CSSStyleSelector::locateSharedStyle):
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        (WebCore::CSSStyleSelector::mmLength):
        (WebCore::CSSStyleSelector::inchLength):
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        (WebCore::CSSStyleSelector::hasSelectorForAttribute):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::fontSelector):

2010-12-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8758386> The web process uses its own credential storage
        https://bugs.webkit.org/show_bug.cgi?id=51599

        * WebCore.exp.in: Export CredentialStorage::getFromPersistentStorage(), Credential::hasPassword(),
        and Credential::isEmpty().

2010-12-24  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Darin Adler.

        [V8] Rename V8CustomEventListener.{h,cpp} to V8EventListener.{h,cpp}
        https://bugs.webkit.org/show_bug.cgi?id=51595

        * WebCore.gypi:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8EventListener.cpp: Renamed from WebCore/bindings/v8/custom/V8CustomEventListener.cpp.
        (WebCore::V8EventListener::V8EventListener):
        (WebCore::V8EventListener::getListenerFunction):
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/V8EventListener.h: Renamed from WebCore/bindings/v8/custom/V8CustomEventListener.h.
        (WebCore::V8EventListener::create):
        * bindings/v8/V8EventListenerList.h:
        * bindings/v8/V8WorkerContextEventListener.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:

2010-12-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Show current time / total in media player
        https://bugs.webkit.org/show_bug.cgi?id=51535

        * css/mediaControlsGtk.css:
        (audio::-webkit-media-controls-current-time-display, video::-webkit-media-controls-current-time-display):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::formatMediaControlsCurrentTime):
        (WebCore::RenderThemeGtk::paintMediaCurrentTime):
        * platform/gtk/RenderThemeGtk.h:

2010-12-24  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Eric Seidel.

        Clean up CSSRuleData in CSSStyleSelector.h
        https://bugs.webkit.org/show_bug.cgi?id=27753

        Move CSSRuleData and CSSRuleDataList from CSSStyleSelector.h to the .cpp file.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleData::CSSRuleData):
        (WebCore::CSSRuleData::~CSSRuleData):
        (WebCore::CSSRuleData::position):
        (WebCore::CSSRuleData::rule):
        (WebCore::CSSRuleData::selector):
        (WebCore::CSSRuleData::next):
        (WebCore::CSSRuleDataList::CSSRuleDataList):
        (WebCore::CSSRuleDataList::~CSSRuleDataList):
        (WebCore::CSSRuleDataList::first):
        (WebCore::CSSRuleDataList::last):
        (WebCore::CSSRuleDataList::append):
        * css/CSSStyleSelector.h:

2010-12-24  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix compilation on Windows.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::~InspectorStyle): added explicit empty destructor
        * inspector/InspectorStyleSheet.h:

2010-12-24  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Darin Adler.

        inspector/debugger-step-out.html crashing intermittently in the bots
        https://bugs.webkit.org/show_bug.cgi?id=50868

        Use RefPtr rather instead of raw pointers when keeping references
        to refcounted objects.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode2):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode2):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::create):
        (WebCore::InspectorStyle::InspectorStyle):
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::toggleProperty):
        (WebCore::InspectorStyle::styleText):
        (WebCore::InspectorStyle::populateAllProperties):
        (WebCore::InspectorStyle::replacePropertyInStyleText):
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorStyle::cssStyle):
        (WebCore::InspectorStyleSheet::pageStyleSheet):

2010-12-24  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nikolas Zimmermann.

        SVGElementInstance::m_useElement should be cleared when use element is removed from document
        https://bugs.webkit.org/show_bug.cgi?id=51486

        Test: svg/custom/use-instanceRoot-with-use-removed.svg

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::invalidateAllInstancesOfElement):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::clearUseElement):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::removedFromDocument):
        (WebCore::ShadowTreeUpdateBlocker::if):
        (WebCore::SVGUseElement::detachInstance):
        (WebCore::SVGUseElement::detach):
        * svg/SVGUseElement.h:

2010-12-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Missing Localized Strings
        https://bugs.webkit.org/show_bug.cgi?id=51542

        Added missing strings: "WebSocket",  "Frames", "Text", "Transfer",
        "Preserve Log upon Navigation", and "Go to Line".

        * English.lproj/localizedStrings.js:

2010-12-24  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Inline HTML style property out of sync with element.style in Sidebar
        https://bugs.webkit.org/show_bug.cgi?id=51478

        Now the element attribute modifications (including "style") are tracked, which results in the
        source offsets update (in the backend) and Styles/Metrics pane updates (in the frontend)
        on the "style" attribute modification through the Elements tree. Also, it appears that
        a complete "style" attribute removal destroys the inline style declaration
        (StyledElement::m_inlineStyleDecl), while the code used to rely on it being immutable (hence a crash).

        Test: inspector/elements-delete-inline-style.html

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didModifyDOMAttr):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        (WebCore::InspectorStyleSheetForInlineStyle::didModifyElementAttribute):
        (WebCore::InspectorStyleSheetForInlineStyle::text):
        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):

2010-12-24  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Andreas Kling.

        [chromium] Fix a style nit in the JPEG encoder
        https://bugs.webkit.org/show_bug.cgi?id=51574

        * platform/image-encoders/skia/JPEGImageEncoder.cpp: nit begone.

2010-12-23  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Maciej Stachowiak.

        Web Inspector: CSS shorthand properties expand unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=36304

        "border-radius" is a shorthand property that has a "non-standard" format and longhands, see
        http://www.w3.org/TR/css3-background/#border-radius for reference. CSSParser does not use the
        standard parseShorthand() or parse4Values() methods but instead a custom parseBorderRadius() method.
        This method didn't use to create a ShorthandScope instance and set the m_implicitShorthand value
        appropriately when adding implicit longhands, thus they were added as normal properties
        found in the CSS (neither implicit, nor longhands). This is now fixed.

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

2010-12-24  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Darin Adler.

        setTargetAttributeAnimatedValue should check for a null shadowTreeElement.
        https://bugs.webkit.org/show_bug.cgi?id=51576

        Disallowed elements may be pruned from the shadow tree, leaving a null
        shadowTreeElement. We should check for that before setting attributes.

        Test: svg/custom/animate-disallowed-use-element.svg

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):

2010-12-24  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        TextMetrics::width is an integer, but the member is a float
        https://bugs.webkit.org/show_bug.cgi?id=51566

        Change the return type to a float.

        No tests, fixing a compiler warning.
        (I was unable to produce a difference in the values exposed to pages
        with a float versus the previous conversion to an integer.)

        * html/TextMetrics.h:
        (WebCore::TextMetrics::width):

2010-12-24  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Add option to enable Touch Events.
        https://bugs.webkit.org/show_bug.cgi?id=49125

        Add files for EFL to support TOUCH_EVENTS.

        * CMakeLists.txt:
        * CMakeListsEfl.txt:
        * platform/PlatformTouchEvent.h: Add EFL related constructor.
        * platform/PlatformTouchPoint.h: ditto.
        * platform/efl/PlatformTouchEventEfl.cpp: Added.
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/efl/PlatformTouchPointEfl.cpp: Added.
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):

2010-12-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Return an empty string instead of 'application/octet-stream' in getMIMETypeForExtension()
        https://bugs.webkit.org/show_bug.cgi?id=51457

        WebKit EFL can't play html5 audio because of wrong mime type checking.
        So, 'application/octet-stream' is changed with an empty string.

        * platform/efl/MIMETypeRegistryEfl.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        Returns an empty string instead of application/octet-stream when it can't find proper mime type.

2010-12-24  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Darin Adler.

        SVGFontFaceElement::rebuildFontFace() should exit when not in document
        https://bugs.webkit.org/show_bug.cgi?id=51571

        We were hitting a NULL deref crash. Since most of the callers checked
        inDocument() anyway, I moved it into the start of rebuildFontFace.

        Test: svg/custom/use-invalid-font-face.svg

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::parseMappedAttribute):
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        (WebCore::SVGFontFaceElement::childrenChanged):

2010-12-24  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Darin Adler.

        Remove unnecessary check in CSSCanvasValue::canvasDestroyed().
        https://bugs.webkit.org/show_bug.cgi?id=51564

        This check was duplicating an ASSERT for a case fixed in r73927.
        Now that the bug is fixed the check is no longer necessary.

        Removing dead code, so no new tests needed.

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::canvasDestroyed):

2010-12-23  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        ViewportArguments.h uses an enum to intialize a bool
        https://bugs.webkit.org/show_bug.cgi?id=50982

        Initialize userScalable to true, rather than -1.
        No tests; fixes a compiler warning.

        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::ViewportArguments):

2010-12-23  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Adam Barth.

        [Qt] User name/password stripped from URLs
        https://bugs.webkit.org/show_bug.cgi?id=36232

        If a username but no password or no username but a password is present
        in a URL, QtWebKit won't send any authentication information down to Qt
        as it should.

        Tests: http/tests/xmlhttprequest/basic-auth-nopassword.html
               http/tests/xmlhttprequest/basic-auth-nouser.html

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2010-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        queryCommandValue("FormatBlock") does not respect editing boundaries
        https://bugs.webkit.org/show_bug.cgi?id=51219

        Fixed the bug by checking the element we found in elementForFormatBlockCommand
        does not contain the editable root.

        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::elementForFormatBlockCommand):

2010-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        FormatBlock doesn't preserve typing style but it should
        https://bugs.webkit.org/show_bug.cgi?id=51140

        Fixed the bug by making preserveTypingStyle return true.

        Test: editing/execCommand/format-block-typing-style.html

        * editing/FormatBlockCommand.h:
        (WebCore::FormatBlockCommand::preservesTypingStyle):

2010-12-23  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        Need WebKit2 API to create a SecurityOrigin from protocol, host, and port
        https://bugs.webkit.org/show_bug.cgi?id=51563

        Add SecurityOrigin::create(const String& protocol, const String& host, int port).

        * WebCore.exp.in:
        Export the symbols for WebCore::SecurityOrigin::create(String, String, int).

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):
        Use the constant MaxAllowedPort.
        (WebCore::SecurityOrigin::create):
        Sanitizing based off of that done in createFromDatabaseIdentifier.
        * page/SecurityOrigin.h:

2010-12-23  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for WinCE after r73802.

        Reapply r70812:
        Port ContextMenuItemWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=48407

        * platform/win/ContextMenuItemWin.cpp:

2010-12-23  Adam Barth  <abarth@webkit.org>

        Remove include of non-existant file.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:

2010-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Selection becomes stale when CharacterData is manipulated directly
        https://bugs.webkit.org/show_bug.cgi?id=51389

        The bug was caused by SelectionController's not adjusting selection when CharacterData's
        m_data is modified by its API.

        Fixed the bug by adding textWillBeReplaced to SelectionController and calling it in
        CharacterData::textWillBeReplaced. Added newLength to setDataAndUpdate, which is passed to
        textWillBeReplaced because inserting, replacing, or removing data may require moving
        the offset of the selection end points (done by shouldRemovePositionAfterAdoptingTextReplacement).

        Also fixed the condition for determining whether or not a node intersects the selection
        in respondToNodeModification, which is extracted from nodeWillBeRemoved. The old condition
        failed to recognize certain cases when selection started and ended with non-zero offsets.

        Tests: editing/selection/character-data-mutation-crash.html
               editing/selection/character-data-mutation.html

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData): Passes newLegnth to setDataAndUpdate.
        (WebCore::CharacterData::appendData): Ditto.
        (WebCore::CharacterData::insertData): Ditto.
        (WebCore::CharacterData::deleteData): Ditto.
        (WebCore::CharacterData::replaceData): Ditto.
        (WebCore::CharacterData::setDataAndUpdate): Added newLegnth to the argument list,
        and renamed lengthOfReplacedData to oldLength; calls textWillBeReplaced.
        * dom/CharacterData.h:
        * editing/SelectionController.cpp:
        (WebCore::removingNodeRemovesPosition): Removed indentations from blank lines.
        (WebCore::SelectionController::nodeWillBeRemoved): Calls nodeWillBeRemoved.
        (WebCore::SelectionController::respondToNodeModification): Extracted from nodeWillBeRemoved;
        fixed the logic to figure out whether a node is inside the range or not.
        (WebCore::shouldRemovePositionAfterAdoptingTextReplacement): Added.
        (WebCore::SelectionController::textWillBeReplaced): Added.
        * editing/SelectionController.h:

2010-12-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove unneeded V8 bindings files
        https://bugs.webkit.org/show_bug.cgi?id=51570

        * WebCore.gypi:
        * bindings/generic/BindingDOMWindow.h: Removed.
        * bindings/v8/specialization/V8BindingDOMWindow.h: Removed.

2010-12-23  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * editing/EditorCommand.cpp:
        (WebCore::enabledDismissCorrectionPanel):

2010-12-23  Darin Adler  <darin@apple.com>

        Try to fix crash seen on GTK bot.

        * editing/EditorCommand.cpp:
        (WebCore::internalCommand): Add back empty string check I accidentally deleted in r74580.

        * WebCore.xcodeproj/project.pbxproj: Let Xcode edit the file.

2010-12-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74561.
        http://trac.webkit.org/changeset/74561
        https://bugs.webkit.org/show_bug.cgi?id=51565

        "Broke Chromium UI tests on Vista" (Requested by kbr_google on
        #webkit).

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2010-12-23  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] Add WebThemeEngine for Mac to allow scrollbar rendering to be overridden for the DRT
        https://bugs.webkit.org/show_bug.cgi?id=51507
        
        Adds WebThemeEngine for the Mac (it already has parallel definitions for
        Windows and Linux) so that scrollbar thumb rendering can be overridden
        for the DRT (to be consistent with the NSScroller-based rendering
        used by the Mac port).

        No new tests since the functionality is not exposed yet. Eventually will
        result in the Chromium/Mac port being able to use the same pixel
        baselines for layout tests as the Mac port.

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::scrollbarStateToThemeState):
        (WebCore::ScrollbarThemeChromiumMac::paint):

2010-12-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WKView should not try to do asynchronous validation for selectors that are not editor commands
        https://bugs.webkit.org/show_bug.cgi?id=51555

        * WebCore.exp.in: Added commandIsSupportedFromMenuOrKeyBinding.
        * editing/Editor.h: Reordered arguments in the Editor::Command constructor
        and the data members too so the frame is last. Added
        commandIsSupportedFromMenuOrKeyBinding.

        * editing/EditorCommand.cpp:
        (WebCore::supported): Removed the EditorCommandSource argument. These
        functions are now only used when called from DOM.
        (WebCore::supportedFromMenuOrKeyBinding): Ditto.
        (WebCore::supportedCopyCut): Ditto.
        (WebCore::supportedPaste): Ditto.
        (WebCore::enabledDismissCorrectionPanel): Changed the supported function to
        an enabled function. It was incorrect to say that this is "supported" only
        when the correction panel is up. Correct to say that it is "enabled" only
        then. And also probably OK to enable it even when the selection is not in
        editable text, as long as the panel is up.
        (WebCore::createCommandMap): Moved conditional commands out of the main
        array into a separate section at the end.
        (WebCore::internalCommand): Added.
        (WebCore::Editor::command): Changed to use the new internalCommand function
        and simplified by relying on the null check in the Command constructor.
        (WebCore::Editor::commandIsSupportedFromMenuOrKeyBinding): Added.
        (WebCore::Editor::Command::Command): Removed unneeded initialization of
        m_source, which is never looked at if m_command is 0. Added feature of
        passing a null command pointer to the non-default constructor.
        (WebCore::Editor::Command::isSupported): Changed to only call the
        per-command isSupported function when the command source is DOM.
        Accordingly that function is now called isSupportedFromDOM.

2010-12-23  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Incorrect layer property used noted as changed in GraphicsLayerCA::setAcceleratesDrawing
        https://bugs.webkit.org/show_bug.cgi?id=51560

        No new tests.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setAcceleratesDrawing):

2010-12-23  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] copy and paste greek symbols to Word, TextEdit results in ?'s being shown
        https://bugs.webkit.org/show_bug.cgi?id=35635

        Explicitly set text/html data on QClipboard as UTF-8 and also include a <meta>
        tag informing the OS that the data is in UTF-8 format.

        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):

2010-12-23  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Eric Seidel.

        CSSCursorImageValue destructor should clear referenced element.
        https://bugs.webkit.org/show_bug.cgi?id=51417

        Calls correct method to clear image and renames method to avoid future confusion.

        Test: svg/css/cursor-image-replace.svg

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::cursorImageValueRemoved):
        * svg/SVGElement.h:

2010-12-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        WebKit2 needs to mirror the frame tree in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=51546

        - Add client functions to notify that a frame has been added or
          removed from the page cache.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        * history/CachedFrame.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didSaveToPageCache):
        (WebCore::EmptyFrameLoaderClient::didRestoreFromPageCache):
        * loader/FrameLoaderClient.h:

2010-12-22  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Add setNeedsStyleRecalc for getting canvas contexts that use IOSurfaces
        This patch also changes USE_IOSURFACE to instead follow USE(IOSURFACE)
        https://bugs.webkit.org/show_bug.cgi?id=51279

        * html/HTMLCanvasElement.cpp: For IOSurface, use setNeedsStyleRecalc
        * html/canvas/CanvasRenderingContext2D.cpp: Use new flag
        * platform/graphics/ImageBuffer.h: Use new flag
        * platform/graphics/cg/ImageBufferCG.cpp: Use new flag

2010-12-20  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        [chromium] Tile root layer of the compositor.
        https://bugs.webkit.org/show_bug.cgi?id=49947

        Refactor root layer update and drawing from LayerRendererChromium into
        LayerTilerChromium.  The root layer is now drawn as multiple tiles
        rather than as one single large texture.  Scrollbars are now drawn
        separately rather than as part of the root layer.

        Test: LayoutTests/compositing/

        * WebCore.gypi:
        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setClipsRepaints):
        * platform/ScrollView.h:
        (WebCore::ScrollView::clipsRepaints):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::useShader):
        (WebCore::LayerRendererChromium::verticalScrollbarRect):
        (WebCore::LayerRendererChromium::horizontalScrollbarRect):
        (WebCore::LayerRendererChromium::invalidateRootLayerRect):
        (WebCore::LayerRendererChromium::updateAndDrawRootLayer):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::setRootLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTilerChromium.cpp: Added.
        (WebCore::LayerTilerChromium::create):
        (WebCore::LayerTilerChromium::LayerTilerChromium):
        (WebCore::LayerTilerChromium::~LayerTilerChromium):
        (WebCore::LayerTilerChromium::layerRendererContext):
        (WebCore::LayerTilerChromium::setTileSize):
        (WebCore::LayerTilerChromium::reset):
        (WebCore::LayerTilerChromium::createTile):
        (WebCore::LayerTilerChromium::invalidateTiles):
        (WebCore::LayerTilerChromium::contentRectToTileIndices):
        (WebCore::LayerTilerChromium::contentRectToLayerRect):
        (WebCore::LayerTilerChromium::layerRectToContentRect):
        (WebCore::LayerTilerChromium::tileIndex):
        (WebCore::LayerTilerChromium::tileContentRect):
        (WebCore::LayerTilerChromium::tileLayerRect):
        (WebCore::LayerTilerChromium::invalidateRect):
        (WebCore::LayerTilerChromium::invalidateEntireLayer):
        (WebCore::LayerTilerChromium::update):
        (WebCore::LayerTilerChromium::setLayerPosition):
        (WebCore::LayerTilerChromium::draw):
        (WebCore::LayerTilerChromium::resizeLayer):
        (WebCore::LayerTilerChromium::growLayerToContain):
        (WebCore::LayerTilerChromium::Tile::~Tile):
        (WebCore::LayerTilerChromium::Tile::releaseTextureId):
        * platform/graphics/chromium/LayerTilerChromium.h: Added.
        (WebCore::LayerTilerChromium::Tile::Tile):
        (WebCore::LayerTilerChromium::Tile::textureId):
        (WebCore::LayerTilerChromium::Tile::dirty):
        (WebCore::LayerTilerChromium::Tile::clearDirty):
        (WebCore::LayerTilerChromium::layerRenderer):

2010-12-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Editor.h doesn't need to include SelectionController.h
        https://bugs.webkit.org/show_bug.cgi?id=51441

        Removed #include <Selection.h> from Editor.h.
        Also extracted WritingDirection.h from EditingStyle.h and renamed SelectionController::EDirection
        to SelectionDirection and moved its declaration from SelectionController.h to VisibleSelection.h

        * WebCore.exp.in: Signature changes.
        * WebCore.xcodeproj/project.pbxproj: Added WritingDirection.h
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine): Change due to SelectionDirection.
        * editing/EditingStyle.h: Removed WritingDirection and included WritingDirection.h
        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection): Change due to SelectionDirection.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Ditto.
        (WebCore::Editor::markMisspellingsAfterTypingToWord): Ditto.
        * editing/Editor.h: Removed SelectionController.h; added DocumentMarker.h, Timer.h, VisibleSelection.h
        and WritingDirection.h; forward declared CSSMutableStyleDeclaration.
        * editing/EditorCommand.cpp:
        (WebCore::executeDeleteBackward): Change due to SelectionDirection.
        (WebCore::executeDeleteBackwardByDecomposingPreviousCharacter): Ditto.
        (WebCore::executeDeleteForward): Ditto.
        (WebCore::executeDeleteToBeginningOfLine): Ditto.
        (WebCore::executeDeleteToBeginningOfParagraph): Ditto.
        (WebCore::executeDeleteToEndOfLine): Ditto.
        (WebCore::executeDeleteToEndOfParagraph): Ditto.
        (WebCore::executeDeleteWordBackward): Ditto.
        (WebCore::executeDeleteWordForward): Ditto.
        (WebCore::executeForwardDelete): Ditto.
        (WebCore::executeMoveBackward): Ditto.
        (WebCore::executeMoveBackwardAndModifySelection): Ditto.
        (WebCore::executeMoveDown): Ditto.
        (WebCore::executeMoveDownAndModifySelection): Ditto.
        (WebCore::executeMoveForward): Ditto.
        (WebCore::executeMoveForwardAndModifySelection): Ditto.
        (WebCore::executeMoveLeft): Ditto.
        (WebCore::executeMoveLeftAndModifySelection): Ditto.
        (WebCore::executeMoveRight): Ditto.
        (WebCore::executeMoveRightAndModifySelection): Ditto.
        (WebCore::executeMoveToBeginningOfDocument): Ditto.
        (WebCore::executeMoveToBeginningOfDocumentAndModifySelection): Ditto.
        (WebCore::executeMoveToBeginningOfLine): Ditto.
        (WebCore::executeMoveToBeginningOfLineAndModifySelection): Ditto.
        (WebCore::executeMoveToBeginningOfParagraph): Ditto.
        (WebCore::executeMoveToBeginningOfParagraphAndModifySelection): Ditto.
        (WebCore::executeMoveToBeginningOfSentence): Ditto.
        (WebCore::executeMoveToBeginningOfSentenceAndModifySelection): Ditto.
        (WebCore::executeMoveToEndOfDocument): Ditto.
        (WebCore::executeMoveToEndOfDocumentAndModifySelection): Ditto.
        (WebCore::executeMoveToEndOfSentence): Ditto.
        (WebCore::executeMoveToEndOfSentenceAndModifySelection): Ditto.
        (WebCore::executeMoveToEndOfLine): Ditto.
        (WebCore::executeMoveToEndOfLineAndModifySelection): Ditto.
        (WebCore::executeMoveToEndOfParagraph): Ditto.
        (WebCore::executeMoveToEndOfParagraphAndModifySelection): Ditto.
        (WebCore::executeMoveParagraphBackwardAndModifySelection): Ditto.
        (WebCore::executeMoveParagraphForwardAndModifySelection): Ditto.
        (WebCore::executeMoveUp): Ditto.
        (WebCore::executeMoveUpAndModifySelection): Ditto.
        (WebCore::executeMoveWordBackward): Ditto.
        (WebCore::executeMoveWordBackwardAndModifySelection): Ditto.
        (WebCore::executeMoveWordForward): Ditto.
        (WebCore::executeMoveWordForwardAndModifySelection): Ditto.
        (WebCore::executeMoveWordLeft): Ditto.
        (WebCore::executeMoveWordLeftAndModifySelection): Ditto.
        (WebCore::executeMoveWordRight): Ditto.
        (WebCore::executeMoveWordRightAndModifySelection): Ditto.
        (WebCore::executeMoveToLeftEndOfLine): Ditto.
        (WebCore::executeMoveToLeftEndOfLineAndModifySelection): Ditto.
        (WebCore::executeMoveToRightEndOfLine): Ditto.
        (WebCore::executeMoveToRightEndOfLineAndModifySelection): Ditto.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::willBeModified): Takes SelectionDirection instead of EDirection.
        (WebCore::SelectionController::modify): Ditto.
        * editing/SelectionController.h: Change due to SelectionDirection.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Ditto.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.
        * editing/VisibleSelection.h: Added SelectionDirection, renamed and moved from EDirection
        in SelectionController.h
        * editing/WritingDirection.h: Added.
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::modify): Change due to SelectionDirection.
        (WebCore::DOMSelection::deleteFromDocument): Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleKeyboardSelectionMovement): Ditto.
        * page/Frame.h: Includes SelectionController.h.

2010-12-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Move V8 to WebCore's implementation of showModalDialog
        https://bugs.webkit.org/show_bug.cgi?id=51527

        This code is basically verbatim translation from the JavaScriptCore
        bindings.  The only intentional difference is in the world selection
        for the dialog's frame.  I suspect JavaScriptCore's bindings have a
        subtle bug there.

        In this patch, I also remove a bunch of now-unneeded code in the
        generic bindings.

        * bindings/generic/BindingDOMWindow.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::DialogHandler::dialogCreated):
        (WebCore::setUpDialog):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::DialogHandler::DialogHandler):
        (WebCore::DialogHandler::dialogCreated):
        (WebCore::DialogHandler::returnValue):
        (WebCore::setUpDialog):
        (WebCore::V8DOMWindow::showModalDialogCallback):
        (WebCore::V8DOMWindow::openCallback):
        * bindings/v8/specialization/V8BindingDOMWindow.h:

2010-12-23  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: Can't backspace from CSS value to CSS key field
        https://bugs.webkit.org/show_bug.cgi?id=51476

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

2010-12-23  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Add asserts to test for contiguous-pixel Skia bitmaps.
        https://bugs.webkit.org/show_bug.cgi?id=51186

        No new tests. Behaviour not changed, but need the asserts to detect when assumptions violated.

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2010-12-23  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Fix check by undefined macro
        https://bugs.webkit.org/show_bug.cgi?id=51531

        Fix check by undefined macro

        When building EFL port with libsoup, BUILDING_GTK__ is not defined,
        leading to warnings during compile. We actually have to use an #ifdef
        instead of an #if.

        No change in functionality so no new tests.

        * platform/network/soup/cache/webkit/soup-cache.h:

2010-12-23  Jonathan Dixon  <joth@chromium.org>

        Reviewed by Steve Block.

        TouchEvents does not support multi-touch on a page with multiple touch targets
        https://bugs.webkit.org/show_bug.cgi?id=51258

        Test: fast/events/touch/multi-touch-grouped-targets.html

        * page/EventHandler.cpp:
        (WebCore::eventNameForTouchPointState):
        (WebCore::EventHandler::handleTouchEvent):
        Redesigned event handler to ensure all event targets involved in a given
        multitouch event get the appropriate event(s) fired.

        * platform/PlatformTouchPoint.h: Added end-stop marker for State enum.

2010-12-23  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] media/audio-data-url.html fails since r75504
        https://bugs.webkit.org/show_bug.cgi?id=51525

        Make the GStreamer media-player advertize 3gpp mime-types as
        supported if the 3gp caps are in the typefind factories.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2010-12-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Refactor HTMLInputElement: Move a part of HTMLInputElement::defaultEventHandler()
        to InputTypes.
        https://bugs.webkit.org/show_bug.cgi?id=51093

        Move BeforeTextInserted and Wheel event handling, event forwarding to
        renderers, and the isindex form submission quirk code to InputTypes.
        Also, change the return types of InputType event handlers from 'bool'
        to 'void'. We use Event::defaultHandled() to decide whether event
        handling should be stopped.

        No new tests because this is just a refactoring.

        * html/BaseButtonInputType.cpp: bool->void changes
        (WebCore::BaseButtonInputType::handleKeydownEvent):
        (WebCore::BaseButtonInputType::handleKeypressEvent):
        (WebCore::BaseButtonInputType::handleKeyupEvent):
        * html/BaseButtonInputType.h: ditto.
        * html/BaseCheckableInputType.cpp: ditto.
        (WebCore::BaseCheckableInputType::handleKeydownEvent):
        (WebCore::BaseCheckableInputType::handleKeypressEvent):
        * html/BaseCheckableInputType.h: ditto.
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::handleKeydownEvent): ditto.
        (WebCore::BaseDateAndTimeInputType::handleWheelEvent): Just calls handleWheelEventForSpinButton().
        * html/BaseDateAndTimeInputType.h: bool->void change and handleWhellEvent() addition.
        * html/CheckboxInputType.cpp: bool->void change
        (WebCore::CheckboxInputType::handleKeyupEvent):
        * html/CheckboxInputType.h: ditto.
        * html/FileInputType.cpp: ditto.
        (WebCore::FileInputType::handleDOMActivateEvent):
        * html/FileInputType.h: ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
         - Change return-value handling of InputType event handlers
         - Move out beforeTextInserted/wheel event handling and isindex form quirk.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::handleBeforeTextInsertedEvent):
         Added so that InputType can call InputElement::handleBeforeTextInsertedEvent().
        * html/ImageInputType.cpp: bool->void change
        (WebCore::ImageInputType::handleDOMActivateEvent):
        * html/ImageInputType.h: ditto.
        * html/InputType.cpp: ditto.
        (WebCore::InputType::handleClickEvent):
        (WebCore::InputType::handleDOMActivateEvent):
        (WebCore::InputType::handleKeydownEvent):
        (WebCore::InputType::handleKeypressEvent):
        (WebCore::InputType::handleKeyupEvent):
        (WebCore::InputType::handleBeforeTextInsertedEvent):
        (WebCore::InputType::handleWheelEvent): Added default implementation.
        (WebCore::InputType::forwardEvent): ditto.
        (WebCore::InputType::formForSubmission): ditto.
        * html/InputType.h:
        * html/IsIndexInputType.cpp:
        (WebCore::IsIndexInputType::formForSubmission): Moved from HTMLInputElement.cpp.
        * html/IsIndexInputType.h:
        * html/NumberInputType.cpp:
        (WebCore::isNumberCharacter): Moved from HTMLInputElement.cpp.
        (WebCore::NumberInputType::handleKeydownEvent): bool->void change.
        (WebCore::NumberInputType::handleBeforeTextInsertedEvent): Moved from HTMInputElement.cpp.
        (WebCore::NumberInputType::handleWheelEvent): Added. Just calls handleWheelEventForSpinButton().
        * html/NumberInputType.h:
        * html/RadioInputType.cpp: bool->void changes.
        (WebCore::RadioInputType::handleClickEvent):
        (WebCore::RadioInputType::handleKeydownEvent):
        (WebCore::RadioInputType::handleKeyupEvent):
        * html/RadioInputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent): ditto.
        (WebCore::RangeInputType::forwardEvent): Moved from HTMLInputElement.cpp.
        * html/RangeInputType.h:
        * html/ResetInputType.cpp: bool->void change.
        (WebCore::ResetInputType::handleDOMActivateEvent):
        * html/ResetInputType.h: ditto.
        * html/SubmitInputType.cpp: ditto.
        (WebCore::SubmitInputType::handleDOMActivateEvent):
        * html/SubmitInputType.h: ditto.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleKeydownEvent): bool->void change.
        (WebCore::TextFieldInputType::handleKeydownEventForSpinButton): ditto.
        (WebCore::TextFieldInputType::handleWheelEventForSpinButton): Moved from HTMLInputElement.cpp.
        (WebCore::TextFieldInputType::forwardEvent): ditto.
        * html/TextFieldInputType.h:

2010-12-23  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: After scrolling new property value and cancelling, removed property remains active in page style
        https://bugs.webkit.org/show_bug.cgi?id=51390

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

2010-12-23  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Adam Barth.

        [chromium] Reduce canvas.toDataURL("image/png") run-time costs 300%
        https://bugs.webkit.org/show_bug.cgi?id=51455

        Chromium uses the libpng compression defaults.  Good compression results,
        but at much larger run-time cost compared to other browsers.  Chrome is 2
        times slower than Mozilla 3.6.12 and 3-4 times slower than Safari 5.0.3.

        libpng has supported alternative compression methods for some time, they
        better meet the dual goals of good compression and run-time cost for the
        on-line case, and are well-documented.  Here use Huffman encoding.  It's
        2-20% faster than other encodings (Z_RLE, Z_FILTERED) and the compressed
        size is within 1% of the Safari 5.0.3 result independent of image size.

        No change in behaviour, so no new tests.

        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::PNGImageEncoder::encode): Apply Huffman image encoding.

2010-12-22  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Darin Fisher.

        [chromium] Optimize canvas.toDataURL("image/png") unpremultiplication loop
        https://bugs.webkit.org/show_bug.cgi?id=51321

        Follow on from r73890, unroll the SkUnPreMultiply::PMColorToColor() call for
        the "image/png" encoder case viz., compute the unpremultiplication in-place.
        See https://bugs.webkit.org/show_bug.cgi?id=50804 for reference.

        No new tests: canvas.toDataURL() is covered by existing tests.

        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::preMultipliedBGRAtoRGBA):

2010-12-22  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Simon Fraser.

        Implement skewX() and skewY() for CSSMatrix.
        https://bugs.webkit.org/show_bug.cgi?id=38335

        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::skew): Implemented skewX() and skewY().
        * css/WebKitCSSMatrix.h: Added skewX() and skewY().
        * css/WebKitCSSMatrix.idl: Added skewX() and skewY().

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

        Reviewed by Dan Bernstein.

        Support unprefixed box-shadow property
        https://bugs.webkit.org/show_bug.cgi?id=51448
        
        Add support for the box-shadow CSS property. We'll currently render this
        similarly to -webkit-box-shadow, but a later fix will adjust the blur radius
        handling to match the spec.

        Test: fast/css/box-shadow.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Implement getComputedStyle
        for box-shadow
        
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::ShadowParseContext::ShadowParseContext):
        (WebCore::ShadowParseContext::commitValue):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::ShadowParseContext::commitColor): Support CSSPropertyBoxShadow

        * css/CSSPropertyNames.in: add box-shadow

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Add CSSPropertyBoxShadow, and
        store in the ShadowData if this is -webkit-box-shadow or not. We'll use this
        to adjust radii later.

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty): Add CSSPropertyBoxShadow.
        
        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperShadow::blend):
        (WebCore::AnimationBase::ensurePropertyMap): Support animations of box-shadow.
        
        * rendering/style/ShadowData.cpp: Store a flag to say if this is a -webkit-box-shadow.
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::operator==):
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::isWebkitBoxShadow):

2010-12-22  Michael Saboff  <msaboff@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION: Can't shadow/overwrite window.constructor 
        (causes TypeError exception)
        https://bugs.webkit.org/show_bug.cgi?id=48953

        Added code in the javascript code generator to create a setter for
        a constructor if the new extended attribute ReplaceableConstructor
        is present for the interface.

        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:

2010-12-22  Steve Lacey  <sjl@chromium.org>

        Reviewed by David Levin.

        Change css for chromium media controls to deal with the timeline
        not expanding when the current time disappears. This happens when
        the width of the control drops below 240px.

        This change results in a minor pixel difference - the timebar now
        aligns better with the time and when the time is not displayed is
        now perfectly centered. Disabling the affected tests for now
        and will rebaseline.

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

        * css/mediaControlsChromium.css:
        (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):

2010-12-22  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Simon Fraser.

        the shadow direction is negated in canvas context shadowOffsetY.
        https://bugs.webkit.org/show_bug.cgi?id=25619
        
        Invert shadow offset Y direction in 0-blur path in FontMac::drawGlyps
        if we're not transforming shadows (i.e. are rendering in a canvas). Also
        use CG shadows if there's a non-translate/flip transform applied
        (shadow offsets are supposed to ignore transforms, but the naive/simple
        implementation was taking them into account).
        
        Also does the equivalent changes to FontCGWin.

        Test: fast/canvas/fillText-shadow.html

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::shadowsIgnoreTransforms):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):

2010-12-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74503.
        http://trac.webkit.org/changeset/74503
        https://bugs.webkit.org/show_bug.cgi?id=51513

        breaks chromium mac debug compile (Requested by tonyg-cr on
        #webkit).

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

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

        Reviewed by Darin Adler.

        Replace runtime checks for hyphenation API availability with compile-time checks.

        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::::createValueForNullKey): Changed to use CFLocaleCopyCurrent() instead of using the
        search locale, which is empty on Windows. On Mac, this is equivalent to using the search locale.
        (WebCore::canHyphenate): Added this implementation for when the hyphenation API is not available.
        It is identical to the implementation in Hyphenation.cpp.
        (WebCore::lastHyphenLocation): Ditto.

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

        Reviewed by Darin Adler.

        Cache snapshots of plug-ins before painting, to avoid script running during painting
        https://bugs.webkit.org/show_bug.cgi?id=51493
        
        When FrameView is asked to do a flattening paint (e.g. when Safari snapshots,
        or when printing), plug-ins which otherwise use the CA rendering model
        are sent a paint event. Some plug-ins may run script while handling this event,
        or out of process plug-ins may process queued requests at this time. Running
        script while inside layout or painting can have bad consequences, because it
        can result in arbitrary changes to the render tree.
        
        This patch avoids sending plug-ins paint events inside of painting. Instead,
        we ask the plug-ins to cache a snapshot before we paint, and then the software
        paint simply draws that snapshot.
        
        Requires manual test, because the bug happens when Safari does
        a page snapshot. It's not possible to tell the Test Netscape Plug-in
        to paint without laying out, making an automated test impossible.

        * manual-tests/plugins/plugin-paint-causes-layout.html: Added.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents): Notify all enclosed widgets
        that a flattening paint is going to happen.
        (WebCore::FrameView::notifyWidgetsInAllFrames): Utility method 
        that tells the RenderView in all subframes to notify their widgets.

        * platform/Widget.h:
        (WebCore::Widget::notifyWidget): Generic method that can be used
        to send messages to widgets. Current messages are just 'before flattening paint'
        and 'after flattening paint'. Message has no payload.

        * rendering/RenderView.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::getRetainedWidgets):
        (WebCore::RenderView::releaseWidgets): Factor code out of updateWidgetPositions(),
        since we use it in two places now.
        
        (WebCore::RenderView::updateWidgetPositions): Use getRetainedWidgets() etc.
        (WebCore::RenderView::notifyWidgets): Retain all the widgets, then send
        them all the message.

        * rendering/RenderWidget.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::notifyWidget): Pass the message to the widget.

2010-12-22  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        Fix null pointer deref when restoring a lost WebGL context.
        https://bugs.webkit.org/show_bug.cgi?id=51494

        No new tests, as context restored events are not currently testable.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::restoreContext):

2010-12-22  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Martin Robinson.

        [GTK] Building with Blob support fails again
        https://bugs.webkit.org/show_bug.cgi?id=51392

        Build fix.

        * GNUmakefile.am:

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

        Reviewed by Anders Carlsson.

        canHyphenate() always returns true for the default locale
        https://bugs.webkit.org/show_bug.cgi?id=51506

        No test, since this change only affects performance.

        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::::createValueForNullKey): Return 0 if hyphenation is not supported for the default locale.
        (WebCore::::createValueForKey): Removed whitespace.

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

        Reviewed by Joseph Pecoraro.

        Web Inspector: script name gets parsed as HTML in Call stack panel
        https://bugs.webkit.org/show_bug.cgi?id=51468

        * inspector/front-end/Placard.js:
        (WebInspector.Placard.prototype.set subtitle):

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

        Reviewed by Darin Adler.

        MediaPlayer should look for MIME type in data: URL
        https://bugs.webkit.org/show_bug.cgi?id=51195

        If no MIME type is passed from the media element for a data: URL, try to get it from
        the URL itself.

        No new tests are possible because the MIME type is just passed to the media engine.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):

2010-12-22  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Add asserts to test for contiguous-pixel Skia bitmaps.
        https://bugs.webkit.org/show_bug.cgi?id=51186

        No new tests. Behaviour not changed, but need the asserts to detect when assumptions violated.

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2010-12-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WAI-ARIA menubar role mapped to AXGroup, should be AXMenuBar
        https://bugs.webkit.org/show_bug.cgi?id=51488

        Test: platform/mac/accessibility/aria-menubar.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::createARIARoleMap):

2010-12-22  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        CopyTex{Sub}Image2D check always if the bound fbo's internal color format is compatible
        https://bugs.webkit.org/show_bug.cgi?id=51423

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D): Remove the isGLES2Compliant flag around format compatibility checking.
        (WebCore::WebGLRenderingContext::copyTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::getBoundFramebufferColorFormat): Helper function to get bound framebuffer's color format; deal with the case of webgl's internal fbo.
        * html/canvas/WebGLRenderingContext.h:

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

        Reviewed by Gustavo Noronha.

        [GTK] Compilation fixes with GTK+ 2.91.7
        https://bugs.webkit.org/show_bug.cgi?id=51487

        * platform/gtk/GtkVersioning.h: do not define GDK_DISPLAY for
        backwards compatibility, it's now defined again in GTK+ 3.x.
        * platform/gtk/PasteboardHelper.cpp: do not call GDK functions to
        initialize global static variables (!). These are called when the
        .so is loaded, and they now require GType to be initialized and
        will crash. Initialize them once from the ctor, which is a more
        common pattern anyway.
        (WebCore::initGdkAtoms): new method to initialize static variables.
        (WebCore::PasteboardHelper::PasteboardHelper): call it.
        * plugins/gtk/PluginViewGtk.cpp: do not include gdkconfig.h when
        using GTK+ 3.x, since it's no longer installed.

2010-12-22  Dirk Schulze  <krit@wbekit.org>

        Reviewed by Nikolas Zimmermann.

        Cleanup SVG code according to the webkit style rules 2
        https://bugs.webkit.org/show_bug.cgi?id=51461

        Second patch to fix indention and other style issues according to the WebKit style rules in the SVG code.

        No changes of functionality, so no new tests. 

        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::stringToChannel):
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMorphologyElement.cpp:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::findLights):
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        (WebCore::SVGFitToViewBox::isKnownAttribute):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::cssPropertyIdForSVGAttributeName):
        * svg/SVGFontFaceElement.h:
        (WebCore::SVGFontFaceElement::associatedFontElement):
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.cpp:
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGlyphElement.cpp:
        (WebCore::parseArabicForm):
        (WebCore::parseOrientation):
        * svg/SVGGlyphElement.h:
        (WebCore::SVGGlyphIdentifier::SVGGlyphIdentifier):
        (WebCore::SVGGlyphIdentifier::inheritedValue):
        (WebCore::SVGGlyphIdentifier::operator==):
        (WebCore::SVGGlyphElement::rendererIsNeeded):
        * svg/SVGGlyphMap.h:
        (WebCore::GlyphMapNode::GlyphMapNode):
        (WebCore::GlyphMapNode::create):
        (WebCore::SVGGlyphMap::SVGGlyphMap):
        (WebCore::SVGGlyphMap::add):
        (WebCore::SVGGlyphMap::compareGlyphPriority):
        (WebCore::SVGGlyphMap::get):
        (WebCore::SVGGlyphMap::clear):
        * svg/SVGGradientElement.cpp:
        * svg/SVGHKernElement.cpp:
        * svg/SVGHKernElement.h:
        (WebCore::SVGHKernElement::rendererIsNeeded):
        * svg/SVGImageElement.h:
        * svg/SVGImageLoader.cpp:
        * svg/SVGImageLoader.h:
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::parseMappedAttribute):
        (WebCore::SVGLangSpace::isKnownAttribute):
        * svg/SVGLangSpace.h:
        (WebCore::SVGLangSpace::xmllang):
        * svg/SVGMetadataElement.h:
        * svg/SVGMissingGlyphElement.h:
        (WebCore::SVGMissingGlyphElement::rendererIsNeeded):
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::cssText):
        * svg/SVGPaint.h:
        (WebCore::SVGPaint::create):
        (WebCore::SVGPaint::paintType):
        (WebCore::SVGPaint::isSVGPaint):
        * svg/SVGParserUtilities.cpp:
        * svg/SVGParserUtilities.h:
        (WebCore::isWhitespace):
        (WebCore::skipOptionalSpaces):
        (WebCore::skipOptionalSpacesOrDelimiter):
        * svg/SVGPathElement.cpp:
        * svg/SVGPathParserFactory.h:
        * svg/SVGPathSegList.h:

2010-12-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        AX: WAI-ARIA textbox role needs different AXRole, depending on value of aria-multiline property
        https://bugs.webkit.org/show_bug.cgi?id=51481

        Support aria-multiline and use it to change the role of an ARIA "textbox" 
        from AXTextArea to AXTextField.

        Test: platform/mac/accessibility/aria-multiline.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::ariaIsMultiline):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isPasswordField):
        (WebCore::AccessibilityObject::isTextControl):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
        * accessibility/AccessibilityRenderObject.h:
        * html/HTMLAttributeNames.in:

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

        Reviewed by Dan Bernstein.

        CSS 2.1 failure: counter-increment-013 fails
        https://bugs.webkit.org/show_bug.cgi?id=51483
        
        Clamp the counter-increment property to the valid range of signed
        integers.

        Test: fast/css/counters/counter-increment-overflow.html

        * css/CSSParser.cpp:
        (WebCore::clampToSignedInteger):
        (WebCore::CSSParser::parseCounter):

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

        Rubber-stamped by Mark Rowe.

        Changed WebKitTools to Tools in script build phases.

        * WebCore.xcodeproj/project.pbxproj:

2010-12-21  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Fixing crash with empty render surfaces.
        https://bugs.webkit.org/show_bug.cgi?id=51432

        Test: platform/chromium/compositing/empty-render-surface-crasher.html

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

2010-12-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: persist JavaScript breakpoints in frontend settings.
        https://bugs.webkit.org/show_bug.cgi?id=48434

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::setStickyBreakpoints):
        (WebCore::InspectorController::restoreStickyBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::setStickyBreakpoint):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::restoreBreakpoint):
        (WebCore::InspectorDebuggerAgent::clearForPageNavigation):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.remove):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.DOMBreakpoint.prototype._serializeToJSON):
        (WebInspector.JavaScriptBreakpoint):
        (WebInspector.XHRBreakpoint.prototype._serializeToJSON):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        * inspector/front-end/SourceFrame.js:

2010-12-20  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=51354
        Don't block rendering and script execution on deferred stylesheets
        
        - Don't add low priority stylesheets to the document pending sheet count.
        - Resolve media attribute fully for the link element stylesheet load.

        Test: http/tests/local/stylesheet-and-script-load-order-media-print.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::setDisabledState):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::sheetLoaded):
        (WebCore::HTMLLinkElement::addPendingSheet):
        (WebCore::HTMLLinkElement::removePendingSheet):
        * html/HTMLLinkElement.h:

2010-12-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74473.
        http://trac.webkit.org/changeset/74473
        https://bugs.webkit.org/show_bug.cgi?id=51463

        broke compilation on leopard intel release (Requested by
        podivilov on #webkit).

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::setStickyBreakpoints):
        (WebCore::InspectorController::restoreStickyBreakpoint):
        (WebCore::InspectorController::breakpointsSettingKey):
        (WebCore::InspectorController::loadBreakpoints):
        (WebCore::InspectorController::saveBreakpoints):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::formatBreakpointId):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::clearForPageNavigation):
        (WebCore::InspectorDebuggerAgent::md5Base16):
        (WebCore::InspectorDebuggerAgent::loadBreakpoints):
        (WebCore::InspectorDebuggerAgent::saveBreakpoints):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.jsBreakpointId):
        (WebInspector.Breakpoint.prototype.set enabled):
        (WebInspector.Breakpoint.prototype.get id):
        (WebInspector.Breakpoint.prototype.set condition):
        (WebInspector.Breakpoint.prototype.remove):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype._createDOMBreakpoint):
        (WebInspector.BreakpointManager.prototype._createEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype._createXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype._setNativeBreakpoint):
        (WebInspector.BreakpointManager.prototype._setNativeBreakpointEnabled):
        (WebInspector.BreakpointManager.prototype._removeNativeBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._projectChanged):
        (WebInspector.BreakpointManager.prototype.restoreDOMBreakpoints):
        (WebInspector.BreakpointManager.prototype._saveBreakpoints):
        (WebInspector.BreakpointManager.prototype._validateBreakpoints):
        (WebInspector.DOMBreakpoint.prototype._serializeToJSON):
        (WebInspector.EventListenerBreakpoint.prototype._serializeToJSON):
        (WebInspector.XHRBreakpoint.prototype._serializeToJSON):
        (WebInspector.NativeBreakpointView.prototype.set enabled):
        (WebInspector.NativeBreakpointView.prototype.remove):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.setOneTimeBreakpoint):
        (WebInspector.DebuggerModel.prototype.removeOneTimeBreakpoint):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype.findBreakpoint):
        (WebInspector.DebuggerModel.prototype.reset):
        (WebInspector.DebuggerModel.prototype._setBreakpoint):
        (WebInspector.DebuggerModel.prototype._breakpointRemoved):
        (WebInspector.DebuggerModel.prototype._setBreakpointOnBackend):
        (WebInspector.DebuggerModel.prototype.breakpointRestored):
        (WebInspector.DebuggerModel.prototype.pausedScript):
        (WebInspector.DebuggerModel.prototype.resumedScript):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.continueToLine):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint):
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._mouseDown):
        (WebInspector.SourceFrame.prototype._continueToLine):
        (WebInspector.SourceFrame.prototype._setBreakpoint):

2010-12-21  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: persist JavaScript breakpoints in frontend settings.
        https://bugs.webkit.org/show_bug.cgi?id=48434

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/DebuggerScript.js:
        ():
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::setStickyBreakpoints):
        (WebCore::InspectorController::restoreStickyBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::setStickyBreakpoint):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::restoreBreakpoint):
        (WebCore::InspectorDebuggerAgent::clearForPageNavigation):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.remove):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.DOMBreakpoint.prototype._serializeToJSON):
        (WebInspector.JavaScriptBreakpoint):
        (WebInspector.XHRBreakpoint.prototype._serializeToJSON):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        * inspector/front-end/SourceFrame.js:

2010-12-22  Dirk Schulze  <krit@wbekit.org>

        Reviewed by Nikolas Zimmermann.

        Cleanup SVG code according to the webkit style rules 1
        https://bugs.webkit.org/show_bug.cgi?id=51411

        First patch to fix indention and other style issues according to the WebKit style rules in the SVG code.

        No change of functionality. 

        * svg/ColorDistance.cpp:
        (WebCore::ColorDistance::isZero):
        * svg/ColorDistance.h:
        * svg/ElementTimeControl.h:
        (WebCore::ElementTimeControl::~ElementTimeControl):
        * svg/LinearGradientAttributes.h:
        (WebCore::LinearGradientAttributes::LinearGradientAttributes):
        (WebCore::LinearGradientAttributes::x1):
        (WebCore::LinearGradientAttributes::y1):
        (WebCore::LinearGradientAttributes::x2):
        (WebCore::LinearGradientAttributes::y2):
        (WebCore::LinearGradientAttributes::setX1):
        (WebCore::LinearGradientAttributes::setY1):
        (WebCore::LinearGradientAttributes::setX2):
        (WebCore::LinearGradientAttributes::setY2):
        (WebCore::LinearGradientAttributes::hasX1):
        (WebCore::LinearGradientAttributes::hasY1):
        (WebCore::LinearGradientAttributes::hasX2):
        (WebCore::LinearGradientAttributes::hasY2):
        * svg/RadialGradientAttributes.h:
        (WebCore::RadialGradientAttributes::RadialGradientAttributes):
        (WebCore::RadialGradientAttributes::cx):
        (WebCore::RadialGradientAttributes::cy):
        (WebCore::RadialGradientAttributes::r):
        (WebCore::RadialGradientAttributes::fx):
        (WebCore::RadialGradientAttributes::fy):
        (WebCore::RadialGradientAttributes::setCx):
        (WebCore::RadialGradientAttributes::setCy):
        (WebCore::RadialGradientAttributes::setR):
        (WebCore::RadialGradientAttributes::setFx):
        (WebCore::RadialGradientAttributes::setFy):
        (WebCore::RadialGradientAttributes::hasCx):
        (WebCore::RadialGradientAttributes::hasCy):
        (WebCore::RadialGradientAttributes::hasR):
        (WebCore::RadialGradientAttributes::hasFx):
        (WebCore::RadialGradientAttributes::hasFy):
        * svg/SVGAngle.cpp:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::calculateDistance):
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.cpp:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeyTimes):
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::updateAnimation):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::svgAttributeChanged):
        * svg/SVGColor.h:
        (WebCore::SVGColor::create):
        (WebCore::SVGColor::createCurrentColor):
        (WebCore::SVGColor::colorType):
        (WebCore::SVGColor::setRGBColor):
        (WebCore::SVGColor::color):
        (WebCore::SVGColor::isSVGColor):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::svgAttributeChanged):
        * svg/SVGCursorElement.h:
        * svg/SVGDescElement.h:
        (WebCore::SVGDescElement::rendererIsNeeded):
        * svg/SVGDocument.cpp:
        * svg/SVGDocument.h:
        (WebCore::SVGDocument::create):
        (WebCore::SVGDocument::isSVGDocument):
        * svg/SVGElement.h:
        (WebCore::SVGElement::isStyled):
        (WebCore::SVGElement::isStyledTransformable):
        (WebCore::SVGElement::isStyledLocatable):
        (WebCore::SVGElement::isSVG):
        (WebCore::SVGElement::isFilterEffect):
        (WebCore::SVGElement::isGradientStop):
        (WebCore::SVGElement::isTextContent):
        (WebCore::SVGElement::isValid):
        (WebCore::SVGElement::svgAttributeChanged):
        (WebCore::SVGElement::synchronizeProperty):
        (WebCore::SVGElement::supplementalTransform):
        (WebCore::SVGElement::invalidateSVGAttributes):
        (WebCore::SVGElement::rendererIsNeeded):
        (WebCore::SVGElement::needsPendingResourceHandling):
        (WebCore::SVGElement::buildPendingResource):
        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::create):
        (WebCore::SVGElementInstance::correspondingElement):
        (WebCore::SVGElementInstance::correspondingUseElement):
        (WebCore::SVGElementInstance::shadowTreeElement):
        (WebCore::SVGElementInstance::parentNode):
        (WebCore::SVGElementInstance::previousSibling):
        (WebCore::SVGElementInstance::nextSibling):
        (WebCore::SVGElementInstance::firstChild):
        (WebCore::SVGElementInstance::lastChild):
        (WebCore::SVGElementInstance::ownerDocument):
        (WebCore::SVGElementInstance::toNode):
        (WebCore::SVGElementInstance::toSVGElementInstance):
        (WebCore::SVGElementInstance::hasChildNodes):
        (WebCore::SVGElementInstance::setFirstChild):
        (WebCore::SVGElementInstance::setLastChild):
        (WebCore::SVGElementInstance::setNextSibling):
        (WebCore::SVGElementInstance::setPreviousSibling):
        (WebCore::SVGElementInstance::refEventTarget):
        (WebCore::SVGElementInstance::derefEventTarget):
        * svg/SVGElementInstanceList.h:
        (WebCore::SVGElementInstanceList::create):
        * svg/SVGException.h:
        (WebCore::SVGException::create):
        (WebCore::SVGException::SVGException):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::parseMappedAttribute):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::findLights):
        * svg/SVGFont.cpp:
        (WebCore::convertEmUnitToPixel):
        * svg/SVGUseElement.cpp:
        (WebCore::isDirectReference):

2010-12-22  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        https://bugs.webkit.org/show_bug.cgi?id=51289
        Initial state of checkValidity() and :invalid are incorrect with <select required>

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::childrenChanged): setNeedsValidityCheck() after <select>'s children change.

2010-12-22  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: Styles pane fails to display properties from a broken CSS rule correctly
        https://bugs.webkit.org/show_bug.cgi?id=51405

        Invoke markPropertyStart() after the parser has restored after an error.

        * css/CSSGrammar.y:

2010-12-22  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        Assertion failure with <select multiple required>
        https://bugs.webkit.org/show_bug.cgi?id=51260

        Test: fast/css/pseudo-valid-select-click.html

        * dom/SelectElement.cpp: updateValidity() after selecting some options of ListBox-typed <select> elements to update valid() cache.
        (WebCore::SelectElement::updateListBoxSelection):

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

        Unreviewed correction to unreviewed build fix for r74447.

        Inappropriate code was left behind in sourceURI function for non-Dashboard platforms.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::sourceURI): Change the logic so all the bug-workaround
        logic is inside the #ifdef.

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

        Reviewed by Darin Adler.

        Include the shadow color space as part of the GraphicsContext state
        https://bugs.webkit.org/show_bug.cgi?id=51420
        
        Include the ColorSpace for the shadow color as part of the graphics
        state. This will be used later for a shadow implementation that
        does not rely on platform shadow code.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::getShadow):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleDrawTextShadow):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawText):

2010-12-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8668230> REGRESSION (r71884): Returning alternate requests from willSendRequest can prevent other requests from ever being sent
        https://bugs.webkit.org/show_bug.cgi?id=51413

        71884 was wrong in moving willSendRequest to ResourceLoader::start(). It’s wrong to do all the
        scheduling, which is host-dependent, before calling willSendRequest, because the latter can
        change the host.

        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::create): Check the return value from ResourceLoader::init()
        and return 0 if it is false.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init): Made this function return a boolean. Moved the call to willSendRequest()
        from start() into here. Return false if willSendRequest() canceled the request.
        (WebCore::ResourceLoader::start): Moved the call to willSendRequest() from here to init().
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): Check the return value from ResourceLoader::init()
        and return 0 if it is false.

2010-12-21  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Darin Adler.

        Shift-End does not select to the end of the line
        https://bugs.webkit.org/show_bug.cgi?id=50610

        Let the VisiblePosition affinity for end of line selection to be set by
        visibleEnd/visibleStart rather than using end/start and always using UPSTREAM.

        Test: editing/selection/extend-to-line-boundary.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::positionForPlatform): Use visibleStart/visibleEnd rather than
        start/end.
        (WebCore::SelectionController::modifyExtendingForward): Don't explicitly use UPSTREAM affinity.

2010-12-21  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Simon Fraser.

        matrix3d() must take the zoom factor into account
        https://bugs.webkit.org/show_bug.cgi?id=51408

        Test: transforms/3d/general/matrix-with-zoom-3d.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createTransformOperations):

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

        Reviewed by Darin Adler.

        Move V8 to common implementation of window.open
        https://bugs.webkit.org/show_bug.cgi?id=51385

        I also changed some function names to match WebKit style.  There's a
        bunch of code we can remove in the generic bindings now.  I'll do that
        in the next patch.

        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::open):
        * bindings/generic/BindingFrame.h:
        (WebCore::::navigateIfAllowed):
        * bindings/generic/BindingSecurity.h:
        (WebCore::::canAccessWindow):
        (WebCore::::allowPopUp):
        (WebCore::::shouldAllowNavigation):
        * bindings/generic/GenericBinding.h:
        (WebCore::completeURL):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::toLexicalFrame):
        (WebCore::toDynamicFrame):
        * bindings/js/specialization/JSBindingState.cpp:
        (WebCore::::activeFrame):
        (WebCore::::firstFrame):
        * bindings/js/specialization/JSBindingState.h:
        * bindings/v8/V8Utilities.cpp:
        (WebCore::callingOrEnteredFrame):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::locationAccessorSetter):
        (WebCore::V8DOMWindow::openCallback):
        * bindings/v8/specialization/V8BindingState.cpp:
        (WebCore::::activeWindow):
        (WebCore::::firstWindow):
        (WebCore::::activeFrame):
        (WebCore::::firstFrame):
        * bindings/v8/specialization/V8BindingState.h:

2010-12-21  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix for r74447.

        Call usesDashboardBackwardCompatibilityMode() only if DASHBOARD_SUPPORT is enabled.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::sourceURI):

2010-12-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/8725702> REGRESSION (r68854): Broken image icon seen in the Address Book Dashboard widget

        Test: platform/mac/fast/dom/HTMLImageElement/dashboard-src-quirk.html

        The Address Book widget sets the src attribute of an img element to a string that looks like a CSS
        URL value. This used to work prior to r68854, because some DOM attribute parsing functions were using
        the wrong function to parse URL attributes (last named deprecatedParseURL).

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::sourceURI): In Dashboard, check if the src attribute begins with 'url("'
        and ends with '")', and if so, strip those away.

2010-12-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        CharacterData needs cleanup
        https://bugs.webkit.org/show_bug.cgi?id=51426

        Extracted CharacterData::setDataAndNotify and CharacterData::updateRenderer.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData): Calls setDataAndUpdate.
        (WebCore::CharacterData::parserAppendData): Ditto.
        (WebCore::CharacterData::appendData): Ditto.
        (WebCore::CharacterData::insertData): Ditto.
        (WebCore::CharacterData::deleteData): Ditto.
        (WebCore::CharacterData::replaceData): Ditto.
        (WebCore::CharacterData::setDataAndUpdate): Added.
        (WebCore::CharacterData::updateRenderer): Added.
        (WebCore::CharacterData::dispatchModifiedEvent): Renamed prevValue to oldData.
        * dom/CharacterData.h:

2010-12-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74420.
        http://trac.webkit.org/changeset/74420
        https://bugs.webkit.org/show_bug.cgi?id=51436

        causes editing/pasteboard/paste-noscript-xhtml.xhtml to crash
        (Requested by tonyg-cr on #webkit).

        * dom/DocumentParser.cpp:
        * dom/DocumentParser.h:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::isScheduledForResume):
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2010-12-21  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Enable extensions used in accelerated 2D canvas implementation
        https://bugs.webkit.org/show_bug.cgi?id=51433

        Call Extensions3D::ensureEnabled() for all supported extensions
        the accelerated 2D Canvas implementation uses. Tested with a few
        layout tests previously failing when run in Chromium due to OpenGL
        INVALID_ENUM and other errors.

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::create):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::supportsBGRA):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:

2010-12-21  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        WebGLRenderingContext needs to zero textures and renderbuffers
        https://bugs.webkit.org/show_bug.cgi?id=49355

        Test: fast/canvas/webgl/uninitialized-test.html

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::onAccess): Use a parameter to decide if renderbuffer initialization is needed.
        (WebCore::WebGLFramebuffer::initializeRenderbuffers): Don't return false if color buffer doesn't exist.
        * html/canvas/WebGLFramebuffer.h: Modify onAccess with an added parameter.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::clear): Call onAccess with an added parameter.
        (WebCore::WebGLRenderingContext::copyTexImage2D): Ditto.
        (WebCore::WebGLRenderingContext::copyTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::drawArrays): Ditto.
        (WebCore::WebGLRenderingContext::drawElements): Ditto.
        (WebCore::WebGLRenderingContext::readPixels): Ditto.
        (WebCore::WebGLRenderingContext::texImage2DBase): Create buffer data of 0s if input is null to initialize textures.
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::texImage2DResourceSafe): Helper function that initialize all pixels to 0.
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateContentsIfDirty): Use texImage2DResourceSafe.
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::generateColorTexture): Ditto.
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::prepareToDrawLayers): Ditto.
        * platform/graphics/chromium/TextureManager.cpp:
        (WebCore::TextureManager::requestTexture): Ditto.
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::allocateTexture): Ditto.
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::reset): Use texImage2DResourceSafe; also, only initialize depth/stencil buffer.
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::texImage2D): Use texImage2DResourceSafe.
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create): Ditto.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::texImage2D): Generate an INVALID_VALUE if pixels==null is passed in.

2010-12-21  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioBusChromium for decoding audio file data
        https://bugs.webkit.org/show_bug.cgi?id=51430

        No new tests since audio API is not yet implemented.

        * platform/audio/chromium: Added.
        * platform/audio/chromium/AudioBusChromium.cpp: Added.
        (WebCore::createBusFromInMemoryAudioFile):

2010-12-21  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add web audio spatialization resource files
        https://bugs.webkit.org/show_bug.cgi?id=50998

        No new tests since audio API is not yet implemented.

        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        * platform/audio/mac/AudioBusMac.mm:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/audio/resources: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T000_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T000_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T000_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T000_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T000_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T000_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T000_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T000_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T000_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T000_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T015_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T015_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T015_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T015_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T015_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T015_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T015_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T015_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T015_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T015_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T030_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T030_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T030_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T030_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T030_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T030_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T030_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T030_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T030_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T030_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T045_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T045_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T045_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T045_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T045_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T045_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T045_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T045_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T045_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T045_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T060_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T060_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T060_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T060_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T060_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T060_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T060_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T060_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T060_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T060_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T075_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T075_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T075_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T075_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T075_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T075_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T075_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T075_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T075_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T075_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T090_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T090_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T090_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T090_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T090_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T090_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T090_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T090_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T090_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T090_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T105_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T105_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T105_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T105_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T105_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T105_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T105_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T105_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T105_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T105_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T120_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T120_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T120_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T120_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T120_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T120_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T120_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T120_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T120_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T120_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T135_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T135_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T135_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T135_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T135_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T135_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T135_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T135_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T135_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T135_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T150_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T150_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T150_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T150_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T150_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T150_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T150_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T150_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T150_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T150_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T165_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T165_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T165_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T165_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T165_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T165_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T165_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T165_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T165_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T165_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T180_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T180_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T180_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T180_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T180_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T180_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T180_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T180_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T180_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T180_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T195_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T195_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T195_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T195_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T195_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T195_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T195_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T195_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T195_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T195_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T210_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T210_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T210_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T210_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T210_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T210_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T210_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T210_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T210_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T210_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T225_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T225_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T225_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T225_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T225_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T225_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T225_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T225_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T225_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T225_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T240_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T240_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T240_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T240_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T240_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T240_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T240_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T240_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T240_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T240_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T255_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T255_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T255_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T255_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T255_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T255_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T255_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T255_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T255_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T255_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T270_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T270_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T270_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T270_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T270_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T270_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T270_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T270_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T270_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T270_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T285_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T285_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T285_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T285_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T285_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T285_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T285_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T285_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T285_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T285_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T300_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T300_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T300_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T300_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T300_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T300_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T300_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T300_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T300_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T300_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T315_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T315_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T315_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T315_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T315_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T315_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T315_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T315_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T315_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T315_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T330_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T330_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T330_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T330_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T330_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T330_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T330_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T330_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T330_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T330_P345.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T345_P000.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T345_P015.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T345_P030.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T345_P045.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T345_P060.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T345_P075.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T345_P090.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T345_P315.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T345_P330.wav: Added.
        * platform/audio/resources/IRC_Composite_C_R0195_T345_P345.wav: Added.

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

        Reviewed by Gavin Barraclough & Oliver Hunt.

        Added PageAllocationAligned, a cross-platform abstraction for memory allocations with arbitrary alignment requirements
        https://bugs.webkit.org/show_bug.cgi?id=51359

        * ForwardingHeaders/wtf/PageAllocationAligned.h: Added.

2010-12-21  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=49774
        Need to scale translation values in matrix() by the zoom factor.

        Test: fast/transforms/matrix-with-zoom.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::createTransformOperations):

2010-12-21  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        Fix bug 51366: REGRESSION (r66452): Form data no longer contains
        'Content-Type' header for files with unrecognized extensions
        https://bugs.webkit.org/show_bug.cgi?id=51366

        Test: http/tests/local/formdata/form-data-with-unknown-file-extension.html

        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems):

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

        Reviewed by Sam Weinig.

        Mac WebKit delivers an extra didCommit when loading web archives
        https://bugs.webkit.org/show_bug.cgi?id=51419

        Could not find a simple way to test this in WebKit1, but in WebKit2
        it leads to an immediate failure when loading a web archive. Tested
        that making the Mac share the same code path with other platforms
        works fine in WebKit1.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument): Removed special case for
        the Mac platform. Also removed the call to isArchiveMimeType since we
        get a 0 from ArchiveFactory::create in that case.

        * loader/archive/ArchiveFactory.cpp:
        (WebCore::ArchiveFactory::isArchiveMimeType): Hardened slightly by
        adding a special case for null and empty strings, since hash tables can't
        handle null strings.
        (WebCore::ArchiveFactory::create): Ditto.

2010-12-21  Yong Li  <yoli@rim.com>

        Reviewed by Adam Barth.

        Suspend HTMLParserScheduler when page load is deferred to
        avoid potential JS re-entrancy. Otherwise, when JS execution is triggered
        from an external script or by events, and is blocked by a modal dialog,
        WebKit can parse more HTML source and also start another JS execution.
        
        https://bugs.webkit.org/show_bug.cgi?id=48077

        Test case: WebCore/manual-tests/bugzilla-48077.html.

        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::suspendParsing):
        (WebCore::DocumentParser::resumeParsing):
        * dom/DocumentParser.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::suspendParsing):
        (WebCore::HTMLDocumentParser::resumeParsing):
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        (WebCore::HTMLParserScheduler::suspend):
        (WebCore::HTMLParserScheduler::resume):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::isScheduledForResume):
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2010-12-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Clicking missing plug-in text does not show a sheet
        https://bugs.webkit.org/show_bug.cgi?id=51403

        * WebCore.exp.in:
        Export symbols needed by WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        Make HTMLPlugInImageElement.h a private header.

        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::serviceType):
        (WebCore::HTMLPlugInImageElement::url):
        Make these member functions public.

2010-12-21  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Fix the build with USE_GSTREAMER=1

        No new tests needed.

        * WebCore.pro: remove nonexisting DataSourceGStreamer sources.

2010-12-21  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QtWebKit doesn't build in debug on Windows
        https://bugs.webkit.org/show_bug.cgi?id=41930

        Disable incremental linking in windows 32bit debug version as webkit is so 
        big it fails to link incremental. 

        Build fix. No new test cases added. 

        * WebCore.pro:

2010-12-21  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Barth.

        Rename Node::isShadowNode to isShadowRoot
        https://bugs.webkit.org/show_bug.cgi?id=51060

        The method gets whether the node is the root of a shadow tree;
        renamed to reflect intent.

        A simple rename--no new tests needed.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        * dom/Node.cpp:
        (WebCore::Node::shadowTreeRootNode):
        (WebCore::Node::isInShadowTree):
        (WebCore::eventTargetRespectingSVGTargetRules):
        (WebCore::Node::getEventAncestors):
        * dom/Node.h:
        (WebCore::Node::isShadowRoot):
        * dom/Range.cpp:
        (WebCore::Range::checkNodeBA):
        * page/DragController.cpp:
        (WebCore::asFileInput):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::dispatchMouseEvent):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hasLineIfEmpty):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title):
        * svg/SVGUseElement.cpp:
        (WebCore::ShadowTreeUpdateBlocker::while):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedIntoDocument):

2010-12-20  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Andreas Kling.

        Qt port of geolocation, geoposition objects timestamp was in seconds
        instead of miliseconds as per HTML5 Geolocation standards.
        Ref: http://dev.w3.org/geo/api/spec-source.html#position_interface 
        http://www.w3.org/TR/DOM-Level-3-Core/core.html#Core-DOMTimeStamp 

        Implemented by Asheesh Srivastava.

        [QT] QtWebkit geolocation's position.timestamp is not in miliseconds
        https://bugs.webkit.org/show_bug.cgi?id=51100

        Porting code not covered in layout testing. No new tests added.

        * platform/qt/GeolocationServiceQt.cpp:
        (WebCore::GeolocationServiceQt::positionUpdated):

2010-12-20  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        Fix for Bug 26183 - [@font-face] font-family descriptor with multiple names should be discarded
        https://bugs.webkit.org/show_bug.cgi?id=26183

        Test: fast/css/font-face-font-family-descriptor.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::createFontFaceRule): Consider @font-face rule
        invalid if its font-family descriptor has multiple (or zero) families.

2010-12-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fall back to object formatting in case dom is not yet loaded.
        https://bugs.webkit.org/show_bug.cgi?id=44273

        Sometimes DOM is loaded after the inline message is being formatted, so we get
        no nodeId for it. Let us fall back to object formatting in such cases.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatnode):
        (WebInspector.ConsoleMessage):

2010-12-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: cycle through tag name / attributes / new attribute on Tab.

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

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.moveToNextAttributeIfNeeded):

2010-12-20  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket errors should be logged to console
        https://bugs.webkit.org/show_bug.cgi?id=40945

        Test: http/tests/inspector/console-websocket-error.html

        * platform/network/SocketStreamErrorBase.cpp:
        (WebCore::SocketStreamErrorBase::compare):
        * platform/network/SocketStreamErrorBase.h:
        (WebCore::SocketStreamErrorBase::failingURL):
        (WebCore::SocketStreamErrorBase::localizedDescription):
        (WebCore::SocketStreamErrorBase::SocketStreamErrorBase):
        * platform/network/cf/SocketStreamError.h:
        (WebCore::SocketStreamError::SocketStreamError):
        * platform/network/cf/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::readStreamCallback):
        (WebCore::SocketStreamHandle::writeStreamCallback):
        (WebCore::SocketStreamHandle::reportErrorToClient):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didFail):

2010-12-17  MORITA Hajime  <morrita@google.com>

        Reviewed by James Robinson.

        https://bugs.webkit.org/show_bug.cgi?id=51240
        [Chromium][Skia] Border with a color with alpha != 1 breaks webkit gradient on skia.

        Even after a shader was set, old color value had been remaining and passed to Skia.
        Then Skia refered an alpha component of that color to make pixels transparent.
        This change invalidates existing color value when a shader is given, 
        which means the renderer will paint shapes with gradients or patterns.
        
        Test: fast/gradients/gradient-after-transparent-border.html

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setStrokeShader):
        (WebCore::PlatformContextSkia::setFillShader):

2010-12-20  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Fix move left/right by character hang.
        https://bugs.webkit.org/show_bug.cgi?id=51344

        Test: editing/selection/51344.html

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):

2010-12-20  Steve Lacey  <sjl@chromium.org>

        Reviewed by David Levin.

        Add missing default styles in mediaControlsChromium.css to prevent
        user overrides.
        https://bugs.webkit.org/show_bug.cgi?id=51360

        No new tests needed as functionality is covered by existing layout
        tests.


        * css/mediaControlsChromium.css:
        (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):

2010-12-20  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Add lastModifiedDate attribute to File interface per File API spec
        https://bugs.webkit.org/show_bug.cgi?id=49895

        lastModifiedDate is not supported for GObject bindings because Date is
        not support in code generation.

        Test: http/tests/local/fileapi/file-last-modified.html

        * fileapi/File.cpp:
        (WebCore::File::lastModifiedDate):
        * fileapi/File.h:
        * fileapi/File.idl:

2010-12-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8757601> Don't install header files in to the Resources directory.

        * WebCore.xcodeproj/project.pbxproj:

2010-12-20  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        [Chromium] v8/SerializedScriptValue::readUint32 treats incoming raw values as signed instead of unsigned
        https://bugs.webkit.org/show_bug.cgi?id=51338

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Reader::readUint32):

2010-12-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Ada Chan.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=51355 Crash in 
        RenderMathMLSubSup::layout() because of null base
        -and corresponding-
        <rdar://problem/8712200>

        Only use base inside if(base) block.
        * mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::layout):

2010-12-20  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Crash at WebCore::SplitElementCommand::SplitElementCommand
        https://bugs.webkit.org/show_bug.cgi?id=51278
        <rdar://problem/7347139> 

        Executing outdent command on an inline blockquote that is
        not the first element in a block causes a crash.
        The fix consists in chaging the was the start of block is
        calculated in case of the inline blockquote.
        
        Test: editing/execCommand/outdent-inline-blockquote.html
              editing/execCommand/outdent-inline-list.html

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

2010-12-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Need to support serialisation of cyclic graphs in the internal structured cloning algorithm
        https://bugs.webkit.org/show_bug.cgi?id=51353

        The Internal Structured Clone algorithm has been changed to allow (and
        correctly clone) cyclic graphs.  This patch updates our implementation
        to provide that functionality.

        I've bumped the serialization version number, and added ObjectReferenceTag
        to represent references to objects that have already been seen.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::startObjectInternal):
          Now that we have something a bit more complex than cycle checking
          I've replaced the duplicate code in startObject and startArray with
          a shared function that implements that logic to plant an object
          reference
        (WebCore::CloneSerializer::startObject):
        (WebCore::CloneSerializer::startArray):
          Lift out duplicate code
        (WebCore::CloneSerializer::endObject):
          Can't remove objects from the gcbuffer now as they need to remain live
          so we can identify graphs
        (WebCore::CloneSerializer::writeStringIndex):
        (WebCore::CloneSerializer::writeObjectIndex):
        (WebCore::CloneSerializer::writeConstantPoolIndex):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneDeserializer::readStringIndex):
        (WebCore::CloneDeserializer::readConstantPoolIndex):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::CloneDeserializer::deserialize):

2010-12-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        * GNUmakefile.am: add missing files.

2010-12-20  Abhishek Arya  <inferno@chromium.org>

        Reviewed by James Robinson.

        Pass the correct beforeChild value when adding a child to an anonymous table part.
        https://bugs.webkit.org/show_bug.cgi?id=50932

        When a "before" content child was added to an anonymous table part, it was added
        after the last child. This patch fixes the behavior by adding it properly before
        the first child.

        Test: fast/css-generated-content/table-before-child-add.html

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

2010-12-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 26276 - Need a mechanism to determine stack extent

        Add forwarding header for StackBounds.h.

        * ForwardingHeaders/wtf/StackBounds.h: Added.

2010-12-20  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r74278.
        http://trac.webkit.org/changeset/74278
        https://bugs.webkit.org/show_bug.cgi?id=50833

        [chromium] Causes many layout tests to crash

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::prepareToDrawLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::setScissorToRect):
        * platform/graphics/chromium/LayerRendererChromium.h:

2010-12-20  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Factored common page set management into a new PageBlock base class
        https://bugs.webkit.org/show_bug.cgi?id=51285

        * ForwardingHeaders/wtf/PageBlock.h: Added.

2010-12-20  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        GeolocationPositionCache should do database access on background thread
        https://bugs.webkit.org/show_bug.cgi?id=50825

        Covered by existing Geolocation tests.

        * page/Coordinates.h:
        (WebCore::Coordinates::threadSafeCopy):
        * page/GeolocationPositionCache.cpp:
        (WebCore::GeolocationPositionCache::GeolocationPositionCache):
        (WebCore::GeolocationPositionCache::addUser):
        (WebCore::GeolocationPositionCache::removeUser):
        (WebCore::GeolocationPositionCache::setDatabasePath):
        (WebCore::GeolocationPositionCache::setCachedPosition):
        (WebCore::GeolocationPositionCache::cachedPosition):
        (WebCore::GeolocationPositionCache::startBackgroundThread):
        (WebCore::GeolocationPositionCache::threadEntryPoint):
        (WebCore::GeolocationPositionCache::threadEntryPointImpl):
        (WebCore::GeolocationPositionCache::triggerReadFromDatabase):
        (WebCore::GeolocationPositionCache::readFromDatabase):
        (WebCore::GeolocationPositionCache::readFromDatabaseImpl):
        (WebCore::GeolocationPositionCache::triggerWriteToDatabase):
        (WebCore::GeolocationPositionCache::writeToDatabase):
        (WebCore::GeolocationPositionCache::writeToDatabaseImpl):
        * page/GeolocationPositionCache.h:
        * page/Geoposition.h:
        (WebCore::Geoposition::threadSafeCopy):
        (WebCore::Geoposition::Geoposition):

2010-12-20  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt][V8] Add  missing sources to the pro file and remove duplications to fix linking.

        No new tests needed.

        * WebCore.pro:

2010-12-20  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Make CSSCompletions a real class rather than singleton
        https://bugs.webkit.org/show_bug.cgi?id=51332

        Drive-by: make use of keywords from re2js in the CSS tokenizer
        (apparently, various authors have presumed that re2js is processed at build time).

        No new tests, as this is a refactoring.

        * inspector/front-end/CSSCompletions.js:
        (WebInspector.CSSCompletions):
        (WebInspector.CSSCompletions.prototype.startsWith):
        (WebInspector.CSSCompletions.prototype.firstStartsWith):
        (WebInspector.CSSCompletions.prototype._firstIndexOfPrefix):
        (WebInspector.CSSCompletions.prototype.keySet):
        (WebInspector.CSSCompletions.prototype.next):
        (WebInspector.CSSCompletions.prototype.previous):
        (WebInspector.CSSCompletions.prototype._closest):
        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer):
        * inspector/front-end/SourceCSSTokenizer.re2js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone.propertyNamesCallback):
        (WebInspector.doLoadedDone):

2010-12-10  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: "Add conditional breakpoint" - create breakpoint only after condition is provided.
        https://bugs.webkit.org/show_bug.cgi?id=50813

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._addBreakpoint):
        (WebInspector.SourceFrame.prototype._breakpointRemoved):
        (WebInspector.SourceFrame.prototype._breakpointChanged):
        (WebInspector.SourceFrame.prototype._setBreakpointDecoration):
        (WebInspector.SourceFrame.prototype._removeBreakpointDecoration):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint):
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition.didEditBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu.else.editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.finishEditing):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._continueToLine):
        (WebInspector.SourceFrame.prototype._setBreakpoint):

2010-12-20  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBTransactionBackedImpl instances can be accidentally deleted during calls to abort/commit.
        https://bugs.webkit.org/show_bug.cgi?id=51112

        Makes IDBTransactionBackendImpl objects take a self reference while executing commit and abort.

        Test: storage/indexeddb/transaction-crash-on-abort.html

        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):

2010-12-20  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBCursor::delete is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=51110

        Implement IDBCursor::delete.
        See http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBCursor-delete

        Tests: storage/indexeddb/cursor-delete.html
               storage/indexeddb/cursor-index-delete.html

        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::deleteFunction):
        * storage/IDBCursor.h:
        * storage/IDBCursor.idl:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::deleteFunction):
        (WebCore::IDBCursorBackendImpl::loadCurrentRow):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::fromQuery):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):

2010-12-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: After a multiline command execution Console does not show the command prompt
        https://bugs.webkit.org/show_bug.cgi?id=51257

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._moveBackInHistory):
        (WebInspector.TextPrompt.prototype._moveForwardInHistory):

2010-12-19  Helder Correia  <helder@sencha.com>

        Reviewed by Ariya Hidayat.

        [Qt] Blur distance should not be affected by transformations
        https://bugs.webkit.org/show_bug.cgi?id=51161

        From the spec at http://dev.w3.org/html5/2dcontext/#dom-context-2d-shadowblur:
        "The shadowBlur attribute specifies the level of the blurring effect.
        (The units do not map to coordinate space units, and are not affected
        by the current transformation matrix.)"

        Test: fast/canvas/canvas-scale-shadowBlur.html

        * platform/graphics/ContextShadow.cpp:
        (WebCore::ContextShadow::adjustBlurDistance):
        * platform/graphics/ContextShadow.h:
        * platform/graphics/cairo/ContextShadowCairo.cpp:
        (WebCore::ContextShadow::beginShadowLayer):
        * platform/graphics/qt/ContextShadowQt.cpp:
        (WebCore::ContextShadow::beginShadowLayer):

2010-12-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Cameron Zwarich.

        Text emphasis marks are not repainted correctly in flipped writing modes
        https://bugs.webkit.org/show_bug.cgi?id=51307

        Tests: fast/repaint/text-emphasis-h.html
               fast/repaint/text-emphasis-v.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow): Added flippedness check.

2010-12-19  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Andreas Kling.

        Remove m_drawsContents from RenderSVGContainer.h
        https://bugs.webkit.org/show_bug.cgi?id=51305

        Remove m_drawsContents, its getter and setter and the call
        sites, since it has no effect anymore.

        * WebCore.order:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGResourceContainer.h:
        * rendering/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::renderSubtreeToImageBuffer):

2010-12-19  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        WebKit does not build with worker but without the javascript debugger
        https://bugs.webkit.org/show_bug.cgi?id=51293

        Add missing guard for calls depending on the debugger.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::postWorkerNotificationToFrontend):

2010-12-18  Tom Sepez  <tsepez@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=51055
        Fix a null de-reference when an XML file contains a malformed entity
        of the form "&:;".

        Test: fast/parser/xml-colon-entity.html

        * html/parser/HTMLEntitySearch.cpp:
        (WebCore::HTMLEntitySearch::advance):

2010-12-18  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by David Levin.

        [chromium] Simplify the PNG encoder.
        https://bugs.webkit.org/show_bug.cgi?id=50905

        Remove PNGEncoderState class - it was a proxy for the encoder output, and
        that is a Vector<>, so just write into it directly using append() to make
        use of Vector<>'s resize() smarts. Simplify the preMultipliedBGRAtoRGBA()
        and encode() routines, replace the OwnArrayPtr<> with a Vector<>.
        
        canvas.toDataURL("image/png") is covered by existing tests.

        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::writeOutput): Use a Vector<>, append() the encoded data to it.
        (WebCore::preMultipliedBGRAtoRGBA): simplified.
        (WebCore::PNGImageEncoder::encode): ditto.

2010-12-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Cameron Zwarich.

        Text emphasis marks are not always included in the selection highlight
        https://bugs.webkit.org/show_bug.cgi?id=51299

        Affects pixel results of fast/text/emphasis.html

        Account for annotations in selectionTop() and selectionBottom().

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTop):
        (WebCore::RootInlineBox::selectionBottom):

2010-12-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Cameron Zwarich.

        In flipped writing modes, opposite text emphasis marks from adjacent lines overlap
        https://bugs.webkit.org/show_bug.cgi?id=51298

        Test: fast/text/emphasis-overlap.html

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment): Changed + to -.

2010-12-18  Helder Correia  <helder@sencha.com> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Canvas shadow offset should not be affected by any transformation
        https://bugs.webkit.org/show_bug.cgi?id=50422

        On a canvas context, shadows are currently affected by all
        transformations except scaling. According to the spec:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#shadows

        "The shadowOffsetX and shadowOffsetY attributes specify the distance
        that the shadow will be offset in the positive horizontal and positive
        vertical distance respectively. Their values are in coordinate space
        units. They are not affected by the current transformation matrix."

        NOTE: this applies only to canvas, not to box shadows.

        Test: fast/canvas/canvas-transforms-fillRect-shadow.html

        * platform/graphics/ContextShadow.cpp:
        (WebCore::ContextShadow::ContextShadow):
        (WebCore::ContextShadow::calculateLayerBoundingRect):
        * platform/graphics/ContextShadow.h:
        (WebCore::ContextShadow::setShadowsIgnoreTransforms):
        (WebCore::ContextShadow::shadowsIgnoreTransforms):
        (WebCore::ContextShadow::offset):
        * platform/graphics/qt/ContextShadowQt.cpp:
        (WebCore::ContextShadow::beginShadowLayer):
        (WebCore::ContextShadow::endShadowLayer):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::mustUseContextShadow):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformShadow):

2010-12-18  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] TransparencyLayer should inherit its container render hints
        https://bugs.webkit.org/show_bug.cgi?id=51283

        * platform/graphics/qt/TransparencyLayer.h:
        (WebCore::TransparencyLayer::TransparencyLayer):

2010-12-18  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Laszlo Gombos.

        [Web Timing] Rename domContentLoaded{Start,End}->domContentLoadedEvent{Start,End}
        https://bugs.webkit.org/show_bug.cgi?id=50943

        See: http://test.w3.org/webperf/specs/NavigationTiming/#nt-dom-content-event-start

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):
        * dom/DocumentTiming.h:
        (WebCore::DocumentTiming::DocumentTiming):
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::domContentLoadedEventStart):
        (WebCore::PerformanceTiming::domContentLoadedEventEnd):
        * page/PerformanceTiming.h:
        * page/PerformanceTiming.idl:

2010-12-17  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Andreas Kling.

        Style fix for r73927
        https://bugs.webkit.org/show_bug.cgi?id=51194

        No functionality change. No new tests needed.

        * html/HTMLCanvasElement.h:

2010-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Buttons rendering was broken in r74129
        https://bugs.webkit.org/show_bug.cgi?id=51173

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintRenderObject):

2010-12-17  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        Improve 'arithmetic' operator on feComposite
        https://bugs.webkit.org/show_bug.cgi?id=51105

        Fixing style errors and bug description for r74177.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::arithmetic):

2010-12-17  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        Updated for the renaming of WebKitTools to Tools

        * WebCore.vcproj/build-generated-files.sh:
        * WebCore.vcproj/migrate-scripts.sh:

2010-12-17  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        A corrupted counter tree is created when renderers are added to the
        tree bypassing RenderObject::addChild
        https://bugs.webkit.org/show_bug.cgi?id=51270

        This patch replaces the hack introduced for fixing bug 43812
        with code that addresses the underlying problem for that bug.
        No new layout tests provided as there is no identified scenario when
        visible behavior would be different, the internal datastructures
        are maintained properly through this fix so the previous hack
        introduced for bug 43812 is now removed. The fact that the 
        layout test introduced for 43812 continues to pass is proof that the
        code works.

        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):
          Removed hack.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild):
          Moved call to counter nodes updater to lower level
          functions to avoid bypass.
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::appendChildNode):
        (WebCore::RenderObjectChildList::insertChildNode):
          Changed to update the values of the counters that
          may be inserted in the tree.

2010-12-17  Shimeng (Simon) Wang  <swang@google.com>

        Reviewed by Steve Block.

        Fix V8 JNI binding.
        https://bugs.webkit.org/show_bug.cgi?id=51156

        There're LayoutTests in:
        http://trac.webkit.org/browser/trunk/LayoutTests/java/lc3/JSNumber
        to exercise these code paths.
        Though Chromium don't run them.
        Tested on Android fast/events/touch tests.

        * bridge/jni/v8/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertNPVariantToJValue):

2010-12-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Interrupted accelerated animation can break later transitions
        <rdar://problem/8767714>
        https://bugs.webkit.org/show_bug.cgi?id=51264
        
        If we're still waiting for the 'animationDidStart' callback when renderers
        get destroyed, then the m_waitingForStartTimeResponse flag could be left
        set to 'true', which causes later transitions to never start.
        
        Fix by clearing the m_waitingForStartTimeResponse flag when the m_startTimeResponseWaiters
        becomes empty.

        Test: transitions/interrupted-accelerated-transition.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::removeFromStartTimeResponseWaitList):

2010-12-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Interrupted accelerated animation can break later transitions
        https://bugs.webkit.org/show_bug.cgi?id=51264

        Step 1: code cleanup.
        Rename "responseWait" variables to "startTimeResponseWait", to make it clear
        the kind of response that is being waited for.
        
        Make a couple of methods private.
        
        No behavioral changes, so no tests.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::endAnimationUpdate):
        (WebCore::AnimationControllerPrivate::receivedStartTimeResponse):
        (WebCore::AnimationControllerPrivate::addToStartTimeResponseWaitList):
        (WebCore::AnimationControllerPrivate::removeFromStartTimeResponseWaitList):
        (WebCore::AnimationControllerPrivate::startTimeResponse):
        * page/animation/AnimationControllerPrivate.h:

2010-12-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Layout and rendering of CSS text-emphasis
        Final part of <rdar://problem/7720300> Support the CSS3 text-emphasis property
        https://bugs.webkit.org/show_bug.cgi?id=48539

        Tests: fast/text/emphasis-vertical.html
               fast/text/emphasis.html

        Emphasis marks behave like they are stuck just above the ascender (or just below the
        descender). They occupy space in the leading and in padding, and only grow the line space
        if they cannot fit.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection): Renamed the containsRuby parameter to
        hasAnnotationsBefore, and added hasAnnotationsAfter. Line annotations include ruby and text emphasis
        marks.
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow): Added overflow from emphasis marks.
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment): Remaned computeBlockDirectionRubyAdjustment()
        to this and added adjustment for text emphasis marks.
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment): Added. Similar to the previous function,
        but for annotations under the glyphs. These can only be text emphasis marks.
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::paintTextWithShadows): Paint emphasis marks.
        (WebCore::InlineTextBox::paint): Ditto.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Generalized the code that adjusts the last line for
        ruby in flipped writing mode to also adjust the last line for emphasis marks under the line in non-
        flipped writing mode.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionColor): Added this helper method which generalizes selectionForegroundColor().
        (WebCore::RenderObject::selectionForegroundColor): Moved most of the code to selectionColor().
        (WebCore::RenderObject::selectionEmphasisMarkColor): Added.
        * rendering/RenderObject.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox): Updated initialization for new members.
        (WebCore::RootInlineBox::alignBoxesInBlockDirection): Update new members.
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment): Renamed blockDirectionRubyAdjustment() to this
        and extended to deal with annotations over and under the line and the previous line. If both lines have
        annotations into the space between the lines, maintain separation so that the annotations do not overlap.
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::hasAnnotationsBefore): Added this accessor.
        (WebCore::RootInlineBox::hasAnnotationsAfter): Ditto.

2010-12-17  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by James Robinson.

        [chromium] Add support to compositor to composite to offscreen texture.
        https://bugs.webkit.org/show_bug.cgi?id=50833

        A patch to extend compositor to be able to composite into an offscreen texture instead
        of just directly to the display buffer. Builds on RenderSurfaceChromium support.

        External behaviour not changed, so no tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::prepareToDrawLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::setCompositeOffscreen):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::setScissorToRect):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::isCompositingOffscreen):
        (WebCore::LayerRendererChromium::getOffscreenLayerTexture):

2010-12-17  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] Default image interpolation should reset the render hint
        https://bugs.webkit.org/show_bug.cgi?id=51233

        Save initial SmoothPixmapTransform render hint so that it can be used
        with default image interpolation quality to reset back the render hints.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::setImageInterpolationQuality):

2010-12-17  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Support Date objects as keys.
        https://bugs.webkit.org/show_bug.cgi?id=51193

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        Use the new IDBKey factory functions, and support Date objects.
        * bindings/v8/custom/V8IDBKeyCustom.cpp:
        (WebCore::toV8):
        Create Date objects from DateType keys.
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::fromQuery):
        (WebCore::IDBKey::isEqual):
        (WebCore::IDBKey::whereSyntax):
        (WebCore::IDBKey::lowerCursorWhereFragment):
        (WebCore::IDBKey::upperCursorWhereFragment):
        (WebCore::IDBKey::bind):
        (WebCore::IDBKey::bindWithNulls):
        Update all SQL related functions to handle Date keys.
        * storage/IDBKey.h:
        (WebCore::IDBKey::createNull):
        (WebCore::IDBKey::createNumber):
        (WebCore::IDBKey::createString):
        (WebCore::IDBKey::createDate):
        Rename the create factories; since both number and date is just a
        double, function overloading can't be used to discriminate between
        the factories.
        (WebCore::IDBKey::date):
        Add getter for the date value.

2010-12-17  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add scripts parsed after resource load to SourceFrame.
        https://bugs.webkit.org/show_bug.cgi?id=51243

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addScript):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.addScript):

2010-12-17  Anton Muhin  <antonm@chromium.org>

        Reviewed by Yury Semikhatsky.

        [v8] The last portion of CSS GC work: fixing fast/dom/StyleSheet/gc-stylesheet-wrapper.html
        https://bugs.webkit.org/show_bug.cgi?id=51121

        Properly group style elements of HTML links, style elements and processing instructions.

        * bindings/v8/V8GCController.cpp:
        (WebCore::NodeGrouperVisitor::visitDOMWrapper):
        (WebCore::NodeGrouperVisitor::addDOMObjectToGroup):

2010-12-17  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] scripts in scripts panel are not updated on reload.
        https://bugs.webkit.org/show_bug.cgi?id=51101

        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceTreeModel.prototype.didCommitLoadForFrame):

2010-12-17  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Laszlo Gombos.

        The inspector does not compile without JAVASCRIPT_DEBUGGER
        https://bugs.webkit.org/show_bug.cgi?id=51246

        Fix the build, m_extraHeaders does not depend on JAVASCRIPT_DEBUGGER.

        * inspector/InspectorController.h:

2010-12-17  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: clear extra/override headers when front-end is closed
        https://bugs.webkit.org/show_bug.cgi?id=51244

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::willSendRequest):

2010-12-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [REGRESSION] Cmd (Ctrl) + G does not search next in Scripts panel.
        https://bugs.webkit.org/show_bug.cgi?id=50893

        Now Mac shortcuts are:
        - Cmd F/G = find / next
        - Cmd L = go to line

        Win/Linux:
        - Ctrl+G = go to line

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._registerShortcuts):
        * inspector/front-end/inspector.js:
        (WebInspector._registerShortcuts):

2010-12-16  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        Wrong check in ResourceHandleSoup in error cases
        https://bugs.webkit.org/show_bug.cgi?id=51171

        Calling didReceiveData with no data causes a crash in debug
        builds. Checking for soupMsg->response_body->data is not correct as libsoup
        always creates a buffer for that. Instead we should check for
        soupMsg->response_body->length

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback):

2010-12-17  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Avoid unnecessary calls to GraphicsContextPlatformPrivate::p()
        https://bugs.webkit.org/show_bug.cgi?id=49954

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::pushTransparencyLayerInternal):
        (WebCore::GraphicsContext::beginTransparencyLayer):

2010-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Compile warning introduced in r74129
        https://bugs.webkit.org/show_bug.cgi?id=51181

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::gtkContainer):

2010-12-17  James Simonsen  <simonjam@chromium.org>

        Reviewed by Darin Fisher.

        [Web Timing] Add sslHandshakeStart to interface

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

        Test: http/tests/misc/webtiming-ssl.php

        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::connectStart): Update comment.
        (WebCore::PerformanceTiming::connectEnd): Remove SSL time.
        (WebCore::PerformanceTiming::sslHandshakeStart): Added.
        * page/PerformanceTiming.h: Added sslHandshakeStart.
        * page/PerformanceTiming.idl: Ditto.

2010-12-17  James Simonsen  <simonjam@chromium.org>

        Reviewed by Darin Fisher.

        [Web Timing] Navigation type enums should begin with TYPE_
        https://bugs.webkit.org/show_bug.cgi?id=51200

        * page/PerformanceNavigation.cpp:
        (WebCore::PerformanceNavigation::type): Added TYPE_ to navigation types.
        * page/PerformanceNavigation.h: Ditto and added TYPE_RESERVED.
        * page/PerformanceNavigation.idl: Ditto.

2010-12-17  Steve Block  <steveblock@google.com>

        Unreviewed build fix.

        Fix build when Geolocation is disabled.

        No new tests, build fix only.

        * page/Geolocation.h:

2010-12-17  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. WinCE build fix.

        * platform/graphics/GraphicsContext.h:

2010-12-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove unnecessary dependencies from InspectorBackendStub.

        InspectorBackendStub is a transport-only thing but it has dependencies with
        Callback.js and WebInspector namespace. Callback can be integrated into
        InspectorBackendStub because it is the only client.
        Without these dependencies InspectorBackendStub can be used as an API
        wrapper for Inspector Protocol.

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

        * WebCore.gypi:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/Callback.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-12-15  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extension API] add support for adding/overriding HTTP request headers
        https://bugs.webkit.org/show_bug.cgi?id=50493

        Test: http/tests/inspector/extensions-headers.html

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest): Apply extra headers.
        (WebCore::InspectorController::setExtraHeaders):
        * inspector/InspectorController.h:
        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.Resources.prototype.getHAR):
        (WebInspector.injectedExtensionAPI.Resources.prototype.addRequestHeaders):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype._onAddRequestHeaders):

2010-12-16  Koan-Sin Tan  <koansin.tan@gmail.com>

        Reviewed by Kent Tamura.

        Glyphs in vertical text tests are rotated 90 degrees clockwise on Chromium Linux
        https://bugs.webkit.org/show_bug.cgi?id=50365

        No new tests. But this makes Chromimium Linux show
        fast/blockflow/japanese-*-text.html and other vertical
        writing text correctly as on WebKit and Chromimum for Mac.

        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::hash):
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::orientation):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/GlyphPageTreeNodeSkia.cpp:
        (WebCore::substituteWithVerticalGlyphs):
        (WebCore::GlyphPage::fill):

2010-12-16  Yi Shen  <yi.4.shen@nokia.com>, Tor Arne Vestbo <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Carlson.

        Provide an interface to require using fullscreen mediaplayer
        https://bugs.webkit.org/show_bug.cgi?id=51133

        Add ChromeClient::requiresFullscreenForVideoPlayback to require webkit
        to launch fullscreen video player for playing the html5 video. The 
        idea is that a browser vendor can specify this behavior through the
        platform plugin or something else by using this interface.

        No new tests because no client implements requiresFullscreenForVideoPlayback yet.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::exitFullscreen):
        * page/Chrome.cpp:
        (WebCore::Chrome::requiresFullscreenForVideoPlayback):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::requiresFullscreenForVideoPlayback):

2010-12-16  Steve Block  <steveblock@google.com>

        Reviewed by Steve Block.

        GeolocationPositionCache needs refactoring
        https://bugs.webkit.org/show_bug.cgi?id=50826

        No new tests, refactoring only.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::makeCachedPositionCallbacks):
        (WebCore::Geolocation::haveSuitableCachedPosition):
        (WebCore::Geolocation::positionChangedInternal):
        * page/Geolocation.h:
        * page/GeolocationPositionCache.cpp:
        (WebCore::GeolocationPositionCache::instance):
        (WebCore::GeolocationPositionCache::GeolocationPositionCache):
        (WebCore::GeolocationPositionCache::addUser):
        (WebCore::GeolocationPositionCache::removeUser):
        (WebCore::GeolocationPositionCache::setDatabasePath):
        (WebCore::GeolocationPositionCache::setCachedPosition):
        (WebCore::GeolocationPositionCache::cachedPosition):
        (WebCore::GeolocationPositionCache::readFromDatabase):
        (WebCore::GeolocationPositionCache::writeToDatabase):
        * page/GeolocationPositionCache.h:
        (WebCore::GeolocationPositionCacheWrapper::GeolocationPositionCacheWrapper):
        (WebCore::GeolocationPositionCacheWrapper::~GeolocationPositionCacheWrapper):
        (WebCore::GeolocationPositionCacheWrapper::setCachedPosition):
        (WebCore::GeolocationPositionCacheWrapper::cachedPosition):

2010-12-16  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] GraphicsContext should respect QWebView render hints
        https://bugs.webkit.org/show_bug.cgi?id=51208

        GraphicsContext does not override SmoothPixmapTransform (see also
        r62762). To keep the same behavior, canvas default image interpolation
        quality is set to medium and QWebView's render hints by default also
        include SmoothPixmapTransform.

        * html/HTMLCanvasElement.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):

2010-12-16  Daniel Bates  <dbates@rim.com>

        Formatting fix; un-indent one level all lines in [2793, 2808] (with respect to r74217)
        so as to be consistent with the formatting of the rest of this file.

        Also, add an empty line between the win32* and wince* conditional include blocks.

        * WebCore.pro:

2010-12-16  Daniel Bates  <dbates@rim.com>

        Reviewed by Antonio Gomes.

        [Qt] Only include ScrollAnimatorWin.h and compile ScrollAnimatorWin.cpp
        on Windows if ENABLE_SMOOTH_SCROLLING=1
        https://bugs.webkit.org/show_bug.cgi?id=51215

        Conditionally include the files ScrollAnimatorWin.h and ScrollAnimatorWin.cpp when building
        the Qt Windows with smooth scrolling enabled.

        No change in functionality since these files are guarded by ENABLE(SMOOTH_SCROLLING).

        * WebCore.pro:

2010-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        execCommand('JustifyCenter') adds extra BR
        https://bugs.webkit.org/show_bug.cgi?id=51082

        The bug was caused by moveParagraphContentsToNewBlockIfNecessary's adding a placeholder br
        to new block and not removing it later. Fixed the bug by removing it when the paragraph
        moved into the block didn't have a br at the end.

        Test: editing/execCommand/justify.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary):

2010-12-16  Jian Li  <jianli@chromium.org>

        Unreviewed. Fixed chromium build break caused by r74207.

        * platform/ContextMenuItem.h:

2010-12-16  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed build fix.

        Disable ContextMenu support for now while support for
        CROSS_PLATFORM_MENUS is written.

        * CMakeListsEfl.txt:
        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:
        * platform/efl/ContextMenuEfl.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::getContextMenuItems):
        (WebCore::ContextMenu::createNativeMenuFromItems):
        (WebCore::ContextMenu::nativeMenu):
        * platform/efl/ContextMenuItemEfl.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::nativeMenuItem):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::checked):
        (WebCore::ContextMenuItem::setEnabled):
        (WebCore::ContextMenuItem::enabled):
        (WebCore::ContextMenuItem::setSubMenu):

2010-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        execCommand('styleWithCSS') is ignored when selection isn't inside a contenteditable area
        https://bugs.webkit.org/show_bug.cgi?id=51164

        Fixed the bug by always enabling the StyleWithCSS command.

        Test: editing/style/stylewithcss-without-selection.html

        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap): StyleWithCSS is enabled rather than enabledInRichlyEditableText.

2010-12-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Save the manual plug-in stream data and redeliver it when the plug-in is initialized
        https://bugs.webkit.org/show_bug.cgi?id=51201

        Export SharedBuffer related symbols.

        * WebCore.exp.in:

2010-12-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: timeline records should only operate WebCore time.
        https://bugs.webkit.org/show_bug.cgi?id=51127

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createResourceFinishData):
        * inspector/TimelineRecordFactory.h:

2010-12-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=50996
        <rdar://problem/8098862> Consider disabling DNS prefetch when proxy is used

        No new tests, cannot test DNS.

        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::proxyIsEnabledInSystemPreferences): Check if accessing example.com is going to use
        a proxy. This is only an estimate - even with a proxy is configured in system preferences, an
        actual request can go directly to the host if a PAC script says so.
        (WebCore::DNSResolveQueue::add): Check if proxy is enabled when sending immediate requests.
        (WebCore::DNSResolveQueue::fired): Ditto when sending queued ones.

2010-12-16  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Console always scroll to the bottom on new events
        https://bugs.webkit.org/show_bug.cgi?id=51189

        When new messages are added to the console it will auto scroll
        only if it was already scrolled down to the last record.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._scheduleScrollIntoView.scrollIntoView):
        (WebInspector.ConsoleView.prototype._scheduleScrollIntoView):
        (WebInspector.ConsoleView.prototype._isScrolledToLastMessage):
        (WebInspector.ConsoleView.prototype.addMessage):

2010-12-16  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: update CallStackSidebarPane placards and status message in the same event handler.
        https://bugs.webkit.org/show_bug.cgi?id=51174

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.breakpointViewForEventData):
        (WebInspector.BreakpointManager.prototype._debuggerPaused):
        (WebInspector.BreakpointManager.prototype._debuggerResumed):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.update):
        (WebInspector.CallStackSidebarPane.prototype.registerShortcuts):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.pausedScript):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):

2010-12-16  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Fix IDBDatabaseError code offset bug
        https://bugs.webkit.org/show_bug.cgi?id=51177

        IDBDatabaseError::code() needs to return the error code without
        offset. But when the IDBDatabaseError is created, the code comes with
        an offset (it gets passed a IDBDatabaseException::IDBDatabaseExceptionCode).

        However, in Chromium, IDBDatabaseErrors are sometimes also created via
        WebIDBDatabaseError when they are sent across IPC, and then the error
        code comes *without* offset. Provide a second create() function for
        this case.

        * storage/IDBDatabaseError.h:
        (WebCore::IDBDatabaseError::create):
        (WebCore::IDBDatabaseError::createWithoutOffset):
        (WebCore::IDBDatabaseError::code):

2010-12-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74162.
        http://trac.webkit.org/changeset/74162
        https://bugs.webkit.org/show_bug.cgi?id=51185

        More breakage in GTK+ (Requested by xan_ on #webkit).

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::registerEncodingNames):

2010-12-16  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Up/Down/PageUp/PageDown on a CSS property numeric value commit the value editor
        https://bugs.webkit.org/show_bug.cgi?id=51114

        The r74038 regressed the behaviour. This patch additionally ensures that both Metrics and Styles panes
        are updated once a stylesheet is reverted.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._stylesPaneEdited):
        (WebInspector.ElementsPanel.prototype._metricsPaneEdited):
        (WebInspector.ElementsPanel.prototype._styleSheetChanged):

2010-12-16  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Chromium Mac Debug Clang compilation.

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText):

2010-12-16  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed. Fix GTK3 compilation after 74129.

        * platform/gtk/WidgetRenderingContextGtk3.cpp:

2010-12-16  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Chromium Debug compilation after r74177 

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::arithmetic):

2010-12-16  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix.

        Fix a warning on 32-bit Mac.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::emphasisMarkFontData): 0.5 -> 0.5f

2010-12-16  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        Improve feArithmeticFilter
        https://bugs.webkit.org/show_bug.cgi?id=51105

        In case of the arithmetic operator on feComposite filter, we could use
        different result passing modes depend on its type. Furthermore, the
        number of executed multiplications is reduced if k1 or k4 argument is zero.

        2% speedup on WebCore/manual-tests/svg-filter-animation.svg

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::computeArithmeticPixels):
        (WebCore::arithmetic):
        (WebCore::FEComposite::apply):

2010-12-15  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        WebKit2 should exit auto scrolling mode when losing focus
        https://bugs.webkit.org/show_bug.cgi?id=49209
        
        When a page loses focus, make sure that we stop the autoscroll timer, which exits pan scrolling mode. We
        don't want to automatically scroll when a page doesn't have focus.

        Updated manual-tests/autoscroll.html with instructions to test this bug.

        * manual-tests/autoscroll.html:
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocused):

2010-12-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Font support for the text-emphasis CSS property
        Part of <rdar://problem/7720300> Support the CSS3 text-emphasis property
        https://bugs.webkit.org/show_bug.cgi?id=48539

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawEmphasisMarks): Added. Calls through to drawEmphasisMarksFor{Simple,Complex}Text.
        (WebCore::Font::canReceiveTextEmphasis): Added. For simple text, checks if the character should
        have an emphasis mark.

        * platform/graphics/Font.h:

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter): Replaced the forceSmallCaps boolean with a FontDataVariant
        parameter and made this function work with other variants.
        (WebCore::Font::getEmphasisMarkGlyphData): Added. Returns glyph data for the first character of
        the emphasis mark. This function may not work if the emphasis mark uses a complex script, but none
        of the standard emphasis marks do so.
        (WebCore::Font::emphasisMarkAscent): Added.
        (WebCore::Font::emphasisMarkDescent): Added.
        (WebCore::Font::emphasisMarkHeight): Added.
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText): Moved much of the logic from drawSimpleText()
        into this new function, which also has a ForTextEmphasis parameter, which is passed along to the
        WidthIterator.
        (WebCore::Font::drawSimpleText): Left the drawing part here.
        (WebCore::Font::drawEmphasisMarksForSimpleText): Added.
        (WebCore::Font::drawGlyphBuffer): Removed the unused TextRun parameter.
        (WebCore::offsetToMiddleOfGlyph): Added this helper.
        (WebCore::offsetToMiddleOfGlyphAtIndex): Added this other helper.
        (WebCore::Font::drawEmphasisMarks): Added. Draws emphasis marks for a given glyph buffer by placing
        one mark centered above each glyph. Zero glyphs in the buffer indicate that no mark should be drawn.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawEmphasisMarks): Added. Calls through to Font::drawEmphasisMarks().

        * platform/graphics/GraphicsContext.h:

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData): Removed initialization of deleted members.
        (WebCore::SimpleFontData::~SimpleFontData): Removed derived font data cleanup, which now happens
        in ~DerivedFontData.
        (WebCore::SimpleFontData::brokenIdeographFontData): Changed to use m_derivedFontData.
        (WebCore::SimpleFontData::DerivedFontData::DerivedFontData): Added. This lazily-allocated struct
        contains the SimpleFontData for small caps, broken ideograph and emphasis mark.
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData): Added.

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::variantFontData): Added. This is used by Font::glyphDataForCharacter().

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Added forTextEmphasis parameter.
        (WebCore::WidthIterator::advance): When used for text emphasis, replace glyphs with the zero glyph
        if they should not receive an emphasis mark.

        * platform/graphics/WidthIterator.h:

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawEmphasisMarksForComplexText): Added stub.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::nextScriptRun): Updated for change to Font::glyphDataForCharacter().
        (WebCore::TextRunWalker::setupFontForScriptRun): Ditto.
        (WebCore::Font::drawEmphasisMarksForComplexText): Added stub.

        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::scaledFontData): Moved code from smallCapsFontData() here and generalized.
        (WebCore::SimpleFontData::smallCapsFontData): Adopted m_derivedFontData and scaledFontData().
        (WebCore::SimpleFontData::emphasisMarkFontData): Added.

        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::scaledFontData): Moved code from smallCapsFontData() here and generalized.
        (WebCore::SimpleFontData::smallCapsFontData): Adopted m_derivedFontData and scaledFontData().
        (WebCore::SimpleFontData::emphasisMarkFontData): Added.

        * platform/graphics/efl/FontEfl.cpp:
        (WebCore::Font::drawEmphasisMarksForComplexText): Added stub.

        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::scaledFontData): Moved code from smallCapsFontData() here and generalized.
        (WebCore::SimpleFontData::smallCapsFontData): Adopted m_derivedFontData and scaledFontData().
        (WebCore::SimpleFontData::emphasisMarkFontData): Added.

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::drawEmphasisMarksForComplexText): Added stub.

        * platform/graphics/haiku/FontHaiku.cpp:
        (WebCore::Font::drawEmphasisMarksForComplexText): Added stub.

        * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
        (WebCore::SimpleFontData::scaledFontData): Moved code from smallCapsFontData() here and generalized.
        (WebCore::SimpleFontData::smallCapsFontData): Adopted m_derivedFontData and scaledFontData().
        (WebCore::SimpleFontData::emphasisMarkFontData): Added.

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController): Added forTextEmphasis parameter.
        (WebCore::ComplexTextController::collectComplexTextRuns): Updated for change to Font::glyphDataForCharacter().
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): When used for text emphasis, replace glyphs with the zero glyph
        if they should not receive an emphasis mark.

        * platform/graphics/mac/ComplexTextController.h:

        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForComplexText): Moved much of the logic from drawComplexText()
        into this new function, which also has a ForTextEmphasis parameter, which is passed along to the
        ComplexTextController.
        (WebCore::Font::drawComplexText): Left the drawing part here.
        (WebCore::Font::drawEmphasisMarksForComplexText): Added.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformDestroy): Adopted m_derivedFontData.
        (WebCore::SimpleFontData::scaledFontData): Moved code from smallCapsFontData() here and generalized.
        (WebCore::SimpleFontData::smallCapsFontData): Adopted m_derivedFontData and scaledFontData().
        (WebCore::SimpleFontData::emphasisMarkFontData): Added.

        * platform/graphics/pango/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformDestroy): Removed redundant clearing of derived font.
        (WebCore::SimpleFontData::scaledFontData): Moved code from smallCapsFontData() here and generalized.
        (WebCore::SimpleFontData::smallCapsFontData): Adopted m_derivedFontData and scaledFontData().
        (WebCore::SimpleFontData::emphasisMarkFontData): Added.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::emphasisMarkAscent): Added stub.
        (WebCore::Font::emphasisMarkDescent): Ditto.
        (WebCore::Font::emphasisMarkHeight): Ditto.
        (WebCore::Font::drawEmphasisMarksForSimpleText): Ditto.
        (WebCore::Font::drawEmphasisMarksForComplexText): Ditto.

        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForComplexText): Moved much of the logic from drawComplexText()
        into this new function, which also has a ForTextEmphasis parameter. Currently returns an empty
        glyph buffer for text emphasis.
        (WebCore::Font::drawComplexText): Left the drawing part here.
        (WebCore::Font::drawEmphasisMarksForComplexText): Added.

        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::scaledFontData): Moved code from smallCapsFontData() here and generalized.
        (WebCore::SimpleFontData::smallCapsFontData): Adopted m_derivedFontData and scaledFontData().
        (WebCore::SimpleFontData::emphasisMarkFontData): Added.

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::advance): Updated for change to Font::glyphDataForCharacter().

        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::Font::drawEmphasisMarksForComplexText): Added stub.

        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        (WebCore::SimpleFontData::platformDestroy): Removed redundant clearing of derived font.
        (WebCore::SimpleFontData::scaledFontData): Moved code from smallCapsFontData() here and generalized.
        (WebCore::SimpleFontData::smallCapsFontData): Adopted m_derivedFontData and scaledFontData().
        (WebCore::SimpleFontData::emphasisMarkFontData): Added.

        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForComplexText): Added stub.
        (WebCore::Font::drawComplexText): Updated for removal of unused TextRun parameter to drawGlyphBuffer().
        (WebCore::Font::drawEmphasisMarksForComplexText): Added.

        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::scaledFontData): Moved code from smallCapsFontData() here and generalized.
        (WebCore::SimpleFontData::smallCapsFontData): Adopted m_derivedFontData and scaledFontData().
        (WebCore::SimpleFontData::emphasisMarkFontData): Added.

        * platform/text/CharacterNames.h: Added characters used in Font::canReceiveTextEmphasis().

2010-12-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=51150 WebView's 
        _scaleWebView SPI doesn't work on pages with compositing layers
        -and corresponding-
        <rdar://problem/8604713>

        paintingGoesToWindow() should return false if the owning layer has 
        a transform.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintingGoesToWindow):

        Use docWidth() and docHeight() instead of rightLayoutOverflow() and 
        bottomLayoutOverflow() since docWidth/Height are now the preferred 
        way to query physical dimensions of the document.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):

2010-12-15  Alex Bredariol Grilo  <abgrilo@profusion.mobi>

        Reviewed by Eric Seidel.

        [EFL] Fix timer calling time in SharedTimerEfl

        No new features, so no tests added.

        The usage of ecore_timer_loop_add instead of ecore_timer_add corrects
        the problem that the timer is not called at the correct time. Since this
        code runs in a single thread, all multiple thread operations were
        removed.

        * platform/efl/SharedTimerEfl.cpp:
        (WebCore::stopSharedTimer):
        (WebCore::addNewTimer):

2010-12-15  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] StillImage::draw() shouldn't call setCompositionMode() unless the QPaintEngine has Porter-Duff composition
        https://bugs.webkit.org/show_bug.cgi?id=49918

        Go through GraphicsContext::setCompositeOperation() which does the check for us.

        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):

2010-12-15  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        UTF-16 and its variants should be treated as Big Endian when BOM
        is absent.
        https://bugs.webkit.org/show_bug.cgi?id=51035

        Test: fast/encoding/char-decoding.html (changed)

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::registerEncodingNames):

2010-12-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Percentage Z values in 3d transform functions and transform-origin should cause the property to be invalid
        https://bugs.webkit.org/show_bug.cgi?id=51070
        
        Treat as inavlid -webkit-transform values that include a percentage value in translateZ()
        or in the third parameter to translate3d().

        Test: transforms/3d/general/3dtransform-values.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTransform):
        (WebCore::CSSParser::parseTransformOrigin): Whitespace change.

2010-12-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Reflection does not render properly when -webkit-transform is toggled, untoggled, and retoggled
        https://bugs.webkit.org/show_bug.cgi?id=50967
        
        If a reflection on a compositied, transformed element is toggled on, off and on,
        then we pick up a cached layer clone that has the wrong transform set on it.
        
        The fix is to reset those properties on the layer clones that get changed
        when the GraphicsLayer gains a structural layer (for reflection flattening).

        Test: compositing/reflections/remove-add-reflection.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):

2010-12-15  Timothy Hatcher  <timothy@apple.com>

        Fix a regression where the Web Inspector console would be empty
        if the Inspector is localized.

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

        Reviewed by Joseph Pecoraro.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.createFilterElement): Add a label argument so the UI string
        is separate from the classname. Code clean up.
        (WebInspector.ConsoleView.prototype.filter): Remove toLowerCase and use string compare.
        (WebInspector.ConsoleView): Pass separate classnames and labels to createFilterElement.

2010-12-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        WebKit2 in compositing mode no longer has font smoothing
        https://bugs.webkit.org/show_bug.cgi?id=50733

        Only turn off font smoothing for layers whose contents are
        not opaque. This allows the root GraphicsLayer in WebKit2 to
        set the opaque flag, and get smoothed text.

        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2010-12-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Allow disabling of font smoothing in compositing layers to be overridden by style
        https://bugs.webkit.org/show_bug.cgi?id=50732

        Add methods to GraphicsContext to get and set font smoothing,
        and have them be part of the graphics state.
        
        Fix Font::drawGlyphs() to allow the font's smoothing mode (from style)
        to override the current smoothing mode of the context. The global
        shouldUseSmoothing() still has final say.
        
        Turn off smoothing in compositing layers with this, rather than
        the non-stateful 'allow' method.
        
        * manual-tests/compositing/font-smoothing.html: Added.
        Manual test because DRT disables font smoothing.
        
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setShouldSmoothFonts):
        (WebCore::GraphicsContext::shouldSmoothFonts):
        (WebCore::GraphicsContext::setPlatformShouldSmoothFonts):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShouldSmoothFonts):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2010-12-15  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        IOSurface bounds checks on bytesPerRow and allocSize are incorrect
        https://bugs.webkit.org/show_bug.cgi?id=51137

        No new tests added. For those using this new functionality, many current canvas layout tests will now pass.

        * platform/graphics/cg/ImageBufferCG.cpp:

2010-12-15  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Web Audio API: port FFTFrame to MKL
        https://bugs.webkit.org/show_bug.cgi?id=50986

        Ported FFTFrame to Intel's MKL. This patch contains the port and
        initial, though not complete, build system changes. Tested so far
        with a unit test by Chris Rogers (which requires code changes to
        AudioContext.cpp and is not being checked in). Further testing to
        follow once layout tests are available for the Web Audio API.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/audio/FFTFrame.h:
        * platform/audio/mkl: Added.
        * platform/audio/mkl/FFTFrameMKL.cpp: Added.
        (WebCore::FFTFrame::FFTFrame):
        (WebCore::FFTFrame::~FFTFrame):
        (WebCore::FFTFrame::multiply):
        (WebCore::FFTFrame::doFFT):
        (WebCore::FFTFrame::doInverseFFT):
        (WebCore::FFTFrame::cleanup):
        (WebCore::FFTFrame::realData):
        (WebCore::FFTFrame::imagData):
        (WebCore::FFTFrame::getUpToDateComplexData):
        (WebCore::FFTFrame::descriptorHandleForSize):

2010-12-15  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Fix stack overflow when there are too many sibling inline boxes by using
        a loop to traverse children instead of calling each sibling from the first child.
        https://bugs.webkit.org/show_bug.cgi?id=48255

        Test: fast/overflow/lots-of-sibling-inline-boxes.html

        * rendering/InlineBox.h:
        (WebCore::InlineBox::setConstructed):
        (WebCore::InlineBox::next):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::setConstructed):

2010-12-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Can't add files to an <input type=file>
        https://bugs.webkit.org/show_bug.cgi?id=51087

        Add exported function.

        * WebCore.exp.in:

2010-12-15  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] screenIsMonochrome() is broken
        https://bugs.webkit.org/show_bug.cgi?id=49957

        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenIsMonochrome):

2010-12-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Move button rendering from gtk{2,3}drawing.cpp to RenderThemeGtk
        https://bugs.webkit.org/show_bug.cgi?id=48486

        Implement button rendering in RenderThemeGtk. The implementation
        from gtk{2,3}drawing.cpp will be removed once menu list button rendering
        is implemented in RenderThemeGtk as well.

        No new tests, as this should not change functionality.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintButton): Add an implementation of button
        rendering that uses WidgetRenderingContext.

2010-10-18  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Move input type=range rendering to RenderThemeGtk
        https://bugs.webkit.org/show_bug.cgi?id=47836

        Begin moving widget rendering out of the old Mozilla theme drawing code,
        which should remove many lines of code when completed. WidgetRenderingContext
        now hides the GTK+ 2 vs. 3 API differences, so that RenderThemeGtk can stay
        version agnostic.

        No new tests as this patch does not change functionality.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk): gtkContainer() now returns a
        GtkWidget, so update the cast here.
        (WebCore::RenderThemeGtk::getGtkStateType): Added this helper which
        converts a RenderObject state into a GtkStateType.
        (WebCore::RenderThemeGtk::paintRenderObject): Removed work-arounds for
        scale painting, as it's not handled by this method any longer.
        (WebCore::RenderThemeGtk::paintSliderTrack): Updated to use
        WidgetRenderingContext.
        (WebCore::RenderThemeGtk::paintSliderThumb): Ditto.
        (WebCore::RenderThemeGtk::adjustSliderThumbSize): Get the size
        properties directly from the widget now instead of asking the Mozilla code.
        (WebCore::RenderThemeGtk::setupWidgetAndAddToContainer): Added this
        helper which reduces the amount of code quite a bit.
        (WebCore::RenderThemeGtk::gtkContainer): Updated to use helper.
        (WebCore::RenderThemeGtk::gtkButton): Ditto.
        (WebCore::RenderThemeGtk::gtkEntry): Ditto.
        (WebCore::RenderThemeGtk::gtkTreeView): Ditto.
        (WebCore::RenderThemeGtk::gtkVScale): Added.
        (WebCore::RenderThemeGtk::gtkHScale): Added.
        (WebCore::RenderThemeGtk::platformColorsDidChange): Removed
        GTK_CONTAINER cast.
        * platform/gtk/RenderThemeGtk.h: Updated to add new GtkHScale and
         GtkVScale members.
        * platform/gtk/WidgetRenderingContext.h: Aded new methods to proxy
        gtk_paint_box, gtk_paint_focus and gtk_paint_slider.
        * platform/gtk/WidgetRenderingContextGtk2.cpp:
        (WebCore::WidgetRenderingContext::gtkPaintBox): Added.
        (WebCore::WidgetRenderingContext::gtkPaintFocus): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintSlider): Ditto.
        * platform/gtk/WidgetRenderingContextGtk3.cpp:
        (WebCore::WidgetRenderingContext::gtkPaintBox): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintFocus): Ditto.
        (WebCore::WidgetRenderingContext::gtkPaintSlider): Ditto.
        * platform/gtk/gtk2drawing.c: Removed defunct code!
        (moz_gtk_get_widget_border):
        (moz_gtk_widget_paint):
        * platform/gtk/gtk3drawing.c: Ditto.
        (moz_gtk_get_widget_border):
        (moz_gtk_widget_paint):
        * platform/gtk/gtkdrawing.h:

2010-12-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74117.
        http://trac.webkit.org/changeset/74117
        https://bugs.webkit.org/show_bug.cgi?id=51113

        This broke the GTK1 build. (Requested by mrobinson on
        #webkit).

        * GNUmakefile.am:
        * platform/network/soup/cache/webkit/soup-cache.h:

2010-12-15  Jian Li  <jianli@chromium.org>

        Unreviewed. Fixed a clang compiling error by making the forward
        declaration of MediaPlayerFactory be consistent with the definition.

        * platform/graphics/MediaPlayer.h:

2010-12-15  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Rename pageY to pageLogicalOffset, since for vertical writing modes it is an x-position rather than a
        y-position.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::pageLogicalOffset):
        (WebCore::LayoutState::addForcedColumnBreak):
        * rendering/LayoutState.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::setPageLogicalOffset):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::pageLogicalOffset):
        (WebCore::RenderBlock::RenderBlockRareData::RenderBlockRareData):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2010-12-13  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move scripts storage from ScriptsPanel to DebuggerModel.
        https://bugs.webkit.org/show_bug.cgi?id=50908

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype._debuggerPaused):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.update):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.setBreakpoint):
        (WebInspector.DebuggerModel.prototype._setBreakpoint):
        (WebInspector.DebuggerModel.prototype.scriptForSourceID):
        (WebInspector.DebuggerModel.prototype.scriptsForURL):
        (WebInspector.DebuggerModel.prototype.queryScripts):
        (WebInspector.DebuggerModel.prototype.parsedScriptSource):
        (WebInspector.DebuggerModel.prototype.failedToParseScriptSource):
        (WebInspector.DebuggerModel.prototype.breakpointRestored):
        (WebInspector.DebuggerModel.prototype.debuggerPaused):
        (WebInspector.DebuggerModel.prototype.debuggerResumed):
        * inspector/front-end/Resource.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel): eliminate sourceIDMap
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        (WebInspector.SourceFrame.prototype._setBreakpoint):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        * inspector/front-end/inspector.js:
        (WebInspector.createJSBreakpointsSidebarPane):
        (WebInspector.parsedScriptSource):
        (WebInspector.failedToParseScriptSource):

2010-12-15  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        MediaPlayer should try all installed media engines
        https://bugs.webkit.org/show_bug.cgi?id=50209

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::bestMediaEngineForTypeAndCodecs): Rename from chooseBestEngineForTypeAndCodecs. Take optional
        parameter for current engine. 
        (WebCore::nextMediaEngine): New, return the next media engine in the list.
        (WebCore::MediaPlayer::MediaPlayer): Initialize reload timer.
        (WebCore::MediaPlayer::load): Store url, mime type, and codecs parameter in member variables.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): New, initiate loading with the next media engine.
        (WebCore::MediaPlayer::supportsType): Make contentType parameter const.
        (WebCore::MediaPlayer::reloadTimerFired): New, call loadWithNextMediaEngine.
        (WebCore::MediaPlayer::networkStateChanged): If network state signals a failure and the file's
        metadata has not loaded, give the next installed engine a try.
        * platform/graphics/MediaPlayer.h:

2010-12-15  Amruth Raj  <amruthraj@motorola.com> and Ravi Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        Changes to enable building WebKit2 for Gtk port
        (https://bugs.webkit.org/show_bug.cgi?id=37369)

        No new functionality added or deleted. Only makefile change. Hence, no tests added.

        * GNUmakefile.am: Removed bindings/gobject from webcore_sources & webcore_cppflags and added them to WebKit/gtk/GNUmakefile.am
        * platform/network/soup/cache/webkit/soup-cache.h: Remove include <webkit/webkitdefines.h> and declare WEBKIT_API directly

2010-12-15  Jarred Nicholls  <jarred@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] Implement the File API spec
        https://bugs.webkit.org/show_bug.cgi?id=49839

        No new tests. fast/files tests work when manually operated.
        They do not automatically work due to Qt's inability to handle multi-file
        inputs (https://bugs.webkit.org/show_bug.cgi?id=22048) as well as Qt's DRT
        is missing an eventSender.beginDragWithFiles implementation.

        * WebCore.pri:
        * WebCore.pro:
        * features.pri:
        * platform/qt/FileSystemQt.cpp:
        (WebCore::directoryName):
        (WebCore::readFromFile):
        (WebCore::seekFile):

2010-12-14  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=49548
        WebCore cache stores duplicate copies of subresources with URL fragments
        
        - Strip fragment identifiers from HTTP and file URLs for the memory cache.
        - Changed some CachedResourceLoader and MemoryCache interfaces to use KURLs
          instead of strings to reduce repeated URL parsing.

        Test: http/tests/cache/subresource-fragment-identifier.html

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::cachedResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::tellClientAboutPastMemoryCacheLoads):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::~CachedResource):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::cachedResource):
        (WebCore::CachedResourceLoader::checkForReload):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::requestResource):
        (WebCore::MemoryCache::requestUserCSSStyleSheet):
        (WebCore::MemoryCache::removeFragmentIdentifierIfNeeded):
        (WebCore::MemoryCache::resourceForURL):
        * loader/cache/MemoryCache.h:

2010-12-15  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        [v8] Next round of CSS GC story: proper grouping of CSSStyleDeclarations
        https://bugs.webkit.org/show_bug.cgi?id=50965

        * bindings/v8/V8GCController.cpp:
        (WebCore::DOMObjectGrouperVisitor::visitDOMWrapper):
        (WebCore::DOMObjectGrouperVisitor::addAllItems):

2010-12-13  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: push persistent breakpoints into backend state cookie so they hit on navigation.
        https://bugs.webkit.org/show_bug.cgi?id=48858

        BreakpointManager pushes all persistent breakpoints to backend when loaded.
        InspectorController restores sticky breakpoints from cookie on navigation.

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::setStickyBreakpoints):
        (WebCore::InspectorController::restoreStickyBreakpoints):
        (WebCore::InspectorController::restoreStickyBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        (WebCore::InspectorState::getObject):
        (WebCore::InspectorState::setObject):
        (WebCore::InspectorState::registerObject):
        * inspector/InspectorState.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane):
        (WebInspector.BreakpointsSidebarPane.prototype._removeListElement):
        (WebInspector.BreakpointsSidebarPane.prototype._projectChanged):
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointAdded):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._projectChanged):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings.prototype.inspectedURLChanged):
        (WebInspector.Settings.prototype.get projectId):
        (WebInspector.Settings.prototype.findSettingForAllProjects):
        (WebInspector.Settings.prototype._formatProjectKey):
        * inspector/front-end/inspector.js:
        (WebInspector.createDOMBreakpointsSidebarPane):
        (WebInspector.createXHRBreakpointsSidebarPane):
        (WebInspector.reset):
        (WebInspector.inspectedURLChanged):

2010-12-15  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed, fix compilation warnings after r74066.

        * rendering/RenderBox.cpp:
        (WebCore::layersUseImage): Place this static function between the
        same if-def region used in the only place where it's called from.

2010-12-15  Emil Eklund  <eae@chromium.org>

        Reviewed by Adam Barth.

        Change ContainerNode::willRemoveChildren to not fire mutation events for children
        added as a result of a mutation event, thereby avoiding an infinite loop.
        https://bugs.webkit.org/show_bug.cgi?id=51079

        Test: fast/dom/containerNode.html

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChildren): Don't fire mutation events for children added during a mutation event.

2010-12-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/8767193> REGRESSION (r60822): caps-lock-indicator is accepted as a -webkit-appearance value
        https://bugs.webkit.org/show_bug.cgi?id=51096

        Test: fast/css/appearance-caps-lock-indicator.html

        * css/CSSValueKeywords.in: Moved caps-lock-indicator outside the range of values that should be
        accepted by the parser, and added comments about maintaining the list of appearance values.
        * platform/ThemeTypes.h: Moved CapsLockIndicatorPart to the end of the ControlPart enum.

2010-12-14  takano takumi  <takano@apple.com>

        Reviewed by Dan Bernstein.

        text-combine value names have been changed in the css3 proposal.
        https://bugs.webkit.org/show_bug.cgi?id=51089

        Changed text-combine's value names from "none|cluster|upright" to "none|horizontal".

        * css/CSSParser.cpp: Changed value name.
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h: Changed value name.
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextCombine):
        * css/CSSValueKeywords.in: No more text-combine specific values needed since
        "horizontal" is already there.
        * rendering/style/RenderStyleConstants.h: Changed value name.
        * rendering/style/StyleRareNonInheritedData.h: Changed textCombine field size.

2010-12-14  Koan-Sin Tan  <koansin.tan@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Kana should be part of CJK Ideographs in WebCore/platform/graphics/Font.cpp
        https://bugs.webkit.org/show_bug.cgi?id=51012

        Kana should be displayed correctly in vertical text with broken font.

        Test: fast/blockflow/japanese-rl-text-with-broken-font.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::isCJKIdeographOrSymbol): add katakana, hiraganna, and Halfwidth and Fullwidth Forms

2010-12-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Additional RenderStyle support for the text-emphasis CSS property
        Part of <rdar://problem/7720300> Support the CSS3 text-emphasis property
        https://bugs.webkit.org/show_bug.cgi?id=48539

        No test possible, since this is just adding a function to be used by upcoming patches.

        * platform/text/CharacterNames.h: Added characters used as emphasis marks.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::textEmphasisMarkString): Added. Returns a string containing the
        emphasis mark, or the null AtomicString if there is none.
        * rendering/style/RenderStyle.h:

2010-12-14  Anton D'Auria  <adauria@apple.com>

        Reviewed by Darin Adler.

        Do not allow access to existing HTML5 databases in private browsing
        mode https://bugs.webkit.org/show_bug.cgi?id=49332

        Test: storage/private-browsing-noread-nowrite.html

        Previously, read-only transactions and private browsing mode were
        represented by the same SQLStatement and DatabaseAuthorizer states.
        This patch removes the m_readOnly member variable from SQLStatement and
        DatabaseAuthorizer, and replaces it with m_permissions whose bit fields
        are initialized by a DatabaseAuthorizer enum Permissions (ReadWrite,
        ReadOnly, NoAccess). A read-only transaction sets permissions to
        ReadOnly, and if !m_database->scriptExecutionContext()->allowDatabaseAccess(),
        then permissions also set to NoAccess.

        * dom/Document.cpp:
        (WebCore::Document::allowDatabaseAccess): this method was previously
        called isDatabaseReadOnly. It checks if private browsing preference is
        set. This method is renamed because it is used to check if private
        browsing restricts access to databases.
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * storage/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::setAuthorizerPermissions):
        * storage/AbstractDatabase.h:
        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::reset):
        (WebCore::DatabaseAuthorizer::createTable):
        (WebCore::DatabaseAuthorizer::createTempTable):
        (WebCore::DatabaseAuthorizer::dropTable):
        (WebCore::DatabaseAuthorizer::dropTempTable):
        (WebCore::DatabaseAuthorizer::allowAlterTable):
        (WebCore::DatabaseAuthorizer::createIndex):
        (WebCore::DatabaseAuthorizer::createTempIndex):
        (WebCore::DatabaseAuthorizer::dropIndex):
        (WebCore::DatabaseAuthorizer::dropTempIndex):
        (WebCore::DatabaseAuthorizer::createTrigger):
        (WebCore::DatabaseAuthorizer::createTempTrigger):
        (WebCore::DatabaseAuthorizer::dropTrigger):
        (WebCore::DatabaseAuthorizer::dropTempTrigger):
        (WebCore::DatabaseAuthorizer::createView):
        (WebCore::DatabaseAuthorizer::createTempView):
        (WebCore::DatabaseAuthorizer::dropView):
        (WebCore::DatabaseAuthorizer::dropTempView):
        (WebCore::DatabaseAuthorizer::createVTable):
        (WebCore::DatabaseAuthorizer::dropVTable):
        (WebCore::DatabaseAuthorizer::allowDelete):
        (WebCore::DatabaseAuthorizer::allowInsert):
        (WebCore::DatabaseAuthorizer::allowUpdate):
        (WebCore::DatabaseAuthorizer::allowRead):
        (WebCore::DatabaseAuthorizer::allowReindex):
        (WebCore::DatabaseAuthorizer::allowWrite): a new private method that
        checks if DatabaseAuthorizer is enabled and if it is in ReadOnly or
        NoAccess mode.
        (WebCore::DatabaseAuthorizer::setReadOnly):
        (WebCore::DatabaseAuthorizer::setPermissions):
        * storage/DatabaseAuthorizer.h:
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::create):
        (WebCore::SQLStatement::SQLStatement):
        (WebCore::SQLStatement::execute):
        * storage/SQLStatement.h:
        * storage/SQLStatementSync.cpp:
        (WebCore::SQLStatementSync::SQLStatementSync):
        (WebCore::SQLStatementSync::execute):
        * storage/SQLStatementSync.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL):
        * storage/SQLTransactionSync.cpp:
        (WebCore::SQLTransactionSync::executeSQL):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::allowDatabaseAccess):

2010-12-02  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        [chromium] Fix drawing of inset box shadows
        https://bugs.webkit.org/show_bug.cgi?id=41576

        When clearing outside clipped path, the context contains unexpected transform.
        Fixed to restore original state before the clear.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::clipPathAntiAliased):
        (WebCore::PlatformContextSkia::applyAntiAliasedClipPaths):

2010-12-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Mouse Events Not Received in Run Applet in their Own Process Mode
        https://bugs.webkit.org/show_bug.cgi?id=51078
        <rdar://problem/8333491>

        Make sure that Widget::handleEvent is called for applets as well.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::defaultEventHandler):
        * html/HTMLAppletElement.h:

2010-12-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Parts of page disappear
        https://bugs.webkit.org/show_bug.cgi?id=41701
        
        The page has text-indent: -1000000px on an element that becomes
        compositing, causing a huge tiled layer to get created.
        
        r63452 aimed to fix this by clamping layer bounds to the viewport,
        but did not do so for pages running accelerated animations (since
        we don't want to clamp for transform animations). However, this
        page only has an opacity animation.
        
        So refine the logic added for r63452 to only call setCompositingConsultsOverlap(false)
        for transform animations.

        Test: compositing/geometry/limit-layer-bounds-opacity-transition.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation): call didStartAcceleratedAnimation()
        with the appropriate properties, and clean up confusing logic that was used to
        compute the return value. We want to return true if either property is accelerated.

        (WebCore::RenderLayerBacking::startTransition): Call didStartAcceleratedAnimation()
        with the appropriate property.
        
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didStartAcceleratedAnimation): Pass the property in,
        and only turn off overlap testing if we see a transform animation.

2010-12-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/8225016> and https://bugs.webkit.org/show_bug.cgi?id=40138
        Authorization header is sent from an HTTP Auth protected site on redirect
        Test: http/tests/misc/authentication-sent-to-redirect.html

        Add helper to clear the Auth headers from a resource request:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::clearHTTPAuthorization):
        * platform/network/ResourceRequestBase.h:

        Only Mac and Windows CFNetwork ports seem to have this problem, so plug it for them:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willSendRequest):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willSendRequest):

2010-12-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Crash in WebCore::GraphicsLayer::paintGraphicsLayerContents() loading this URL
        https://bugs.webkit.org/show_bug.cgi?id=51072

        Fix a crash when painting a layer whose PlatformCALayer has been deleted,
        by clearing the PlatformCALayer value on the CALayer when the PlatformCALayer
        is destroyed.
        
        I was not able to reduce the page to a simple testcase.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::~PlatformCALayer):

2010-12-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, build fix.

        [Qt] Fix the list of header files in WebCore.pro after r74049.

        No new tests as there is no new functionality.

        * WebCore.pro:

2010-12-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Focus rings are ugly, rects should be united instead of drawn individually
        https://bugs.webkit.org/show_bug.cgi?id=49953

        Create a QPainterPath and add to it the focus rects, one at a time.
        Combine the 2 drawFocusRing functions into one function drawFocusRingForPath.

        Tests: fast/css/focus-ring-detached.html
               fast/css/focus-ring-multiline.html

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::drawFocusRingForPath):
        (WebCore::GraphicsContext::drawFocusRing):

2010-12-14  Mark Rowe  <mrowe@apple.com>

        Fix the Qt build.

        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTProcessor::transformToString): Make the conversion to QString explicit
        since QVariant can be constructed from either a QString or a bool.

2010-12-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        compositing/masks/simple-composited-mask.html failure
        https://bugs.webkit.org/show_bug.cgi?id=49746

        Geometry of composited layers with a mask depends on the loading
        of the mask image, since maskClipRect() is used for the layer bounds.
        
        So when RenderBox::imageChanged() is called for an image used by
        a mask on a layer with a composited mask, call the newly-renamed
        layer->contentsChanged() method. This percolates down into RenderLayerBacking,
        ending in a layer geometry update.
        
        Renamed RenderLayer::rendereContentsChanged() to contentsChanged() and added
        an enum to say what changed, for somewhat more efficient updating.
        
        Also, when the mask layer gets resized, make sure we mark it as needing
        display.
        
        Tested by pixel result of compositing/masks/simple-composited-mask.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::didDraw):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged):
        (WebCore::WebGLRenderingContext::reshape):
        * rendering/RenderBox.cpp:
        (WebCore::layersUseImage):
        (WebCore::RenderBox::imageChanged):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageDimensionsChanged):
        (WebCore::RenderImage::notifyFinished):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::contentChanged):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::contentChanged):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):

2010-12-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <http://webkit.org/b/51064> Reproducible crash inside WebCore::MediaPlayerPrivateQTKit::createQTMovie when loading <video>

        We were crashing inside MediaPlayerPrivateQTKit::createQTMovie as we were passing a null URL in
        to CFNetworkCopyProxiesForURL. This happened because we were null-checking the URL incorrectly.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::resumeLoad): Explicitly test for a null string.

2010-12-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=50970
        
        It's arguably a bug, but we don't let inline flow layers paint floating
        descendants.  The containing block of the inline flow paints them instead.
        However our shouldPaint logic has always been flawed and has turned off propagation
        of painting when an inline flow layer is enclosing the float.
        
        Change enclosingSelfPaintingLayer to enclosingFloatPaintingLayer to be more precise
        and for now limit it to RenderBoxes. 
        
        Added fast/block/float/floatstack.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverhangingFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::enclosingFloatPaintingLayer):
        * rendering/RenderBox.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:

2010-12-14  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Dimitri Glazkov.

        Move asynchronous event dispatching out of Document
        https://bugs.webkit.org/show_bug.cgi?id=49785
        
        Move asynchonous event code out of Document and into a standalone
        EventQueue class (which supports async events for both regular nodes
        and the window object).

        No new tests necessary, since no new functionality is exposed (existing
        layout tests pass).

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::enqueueWindowEvent):
        (WebCore::Document::enqueueHashchangeEvent):
        * dom/DOMAllInOne.cpp:
        (WebCore::Document::eventQueue):
        * dom/Document.h:
        * dom/EventQueue.cpp: Added.
        (WebCore::EventQueue::EventQueue):
        (WebCore::EventQueue::enqueueEvent):
        (WebCore::EventQueue::pendingEventTimerFired):
        (WebCore::EventQueue::dispatchEvent):
        * dom/EventQueue.h: Added.
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch):

2010-12-14  Kyounga Ra  <kyounga.ra@gmail.com>

        Reviewed by Adam Barth.

        <noscript> is rendered with enabled XHTMLMP.
        https://bugs.webkit.org/show_bug.cgi?id=48493

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::rendererIsNeeded):

2010-12-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] [Symbian] Do not use pkg-config on Symbian as it is not supported
        https://bugs.webkit.org/show_bug.cgi?id=50231

        No new tests as there is no new functionality.

        Guard CONFIG+=link_pkgconfig with !symbian.

        * WebCore.pro:

2010-12-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74040.
        http://trac.webkit.org/changeset/74040
        https://bugs.webkit.org/show_bug.cgi?id=51050

        Breaks 2d.shadow.canvas.transparent.2 and
        2d.shadow.image.transparent.2 (Requested by helder on
        #webkit).

        * platform/graphics/ContextShadow.cpp:
        (WebCore::ContextShadow::ContextShadow):
        (WebCore::ContextShadow::calculateLayerBoundingRect):
        * platform/graphics/ContextShadow.h:
        (WebCore::ContextShadow::offset):
        * platform/graphics/qt/ContextShadowQt.cpp:
        (WebCore::ContextShadow::beginShadowLayer):
        (WebCore::ContextShadow::endShadowLayer):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformShadow):

2010-12-14  Nate Chapin  <japhet@chromium.org>

        Unreviewed, fixing qt (hopefully for real this time).

        Remove a couple more references to loader.h.

        * xml/XSLStyleSheetQt.cpp:
        * xml/XSLTProcessorQt.cpp:

2010-12-14  Nate Chapin  <japhet@chromium.org>

        Unreviewed, fix mac and qt builds.

        Missed a couple of references to loader.h and
        improperly added CachedResourceRequest.h to
        WebCore.xcodeproj.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/android/TemporaryLinkStubs.cpp:
        * platform/qt/TemporaryLinkStubsQt.cpp:

2010-12-14  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Rename Loader to CachedResourceRequest.
        https://bugs.webkit.org/show_bug.cgi?id=50848

        No new tests, rename only.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        * loader/cache/CachedCSSStyleSheet.cpp:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setRequest):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::load):
        (WebCore::CachedResourceLoader::loadDone):
        (WebCore::CachedResourceLoader::cancelRequests):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp: Copied from WebCore/loader/loader.cpp.
        * loader/cache/CachedResourceRequest.h: Copied from WebCore/loader/loader.h.
        * loader/loader.cpp: Removed.
        * loader/loader.h: Removed.
        * xml/XSLStyleSheetLibxslt.cpp:
        * xml/XSLTProcessor.cpp:
        * xml/XSLTProcessorLibxslt.cpp:

2010-12-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Tim Hatcher.

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

        Rename pageHeight variables and members in WebCore to pageLogicalHeight in preparation for
        making printing and pagination work with vertical writing modes.

        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::clearPaginationInformation):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::isPaginated):
        (WebCore::LayoutState::pageLogicalHeight):
        (WebCore::LayoutState::pageLogicalHeightChanged):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::nextPageTop):
        (WebCore::RenderBlock::applyBeforeBreak):
        (WebCore::RenderBlock::applyAfterBreak):
        (WebCore::RenderBlock::adjustForUnsplittableChild):
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        (WebCore::RenderView::pageLogicalHeight):
        (WebCore::RenderView::setPageLogicalHeight):

2010-12-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix GTK build by adding source files that were accidentally skipped in
        r74044. Sorry!

        * GNUmakefile.am: Added SliderThumbElement.

2010-12-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=50974 
        getComputedStyle() returns wrong values for zoomed elements when 
        display is none
        -and corresponding-
        <rdar://problem/8522731>

        If there is no renderer but the RenderStyle's value is a fixed 
        length, send it through zoomAdjustedPixelValue(). There's not much 
        we can do for other length types without a renderer.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::zoomAdjustedPixelValueForLength):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2010-12-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        Move SliderThumbElement into its own file.
        https://bugs.webkit.org/show_bug.cgi?id=50973

        No change in behavior, so no tests.

        * Android.mk: Added SliderThumbElement.
        * CMakeLists.txt: Ditto.
        * WebCore.gyp/WebCore.gyp: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto,
        * html/shadow/SliderThumbElement.cpp: Added.
        * html/shadow/SliderThumbElement.h: Added.
        * rendering/RenderSlider.cpp: Removed code that was moved into
            SliderThumbElement.

2010-12-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=50953
        DNS Prefetch should be an opt-in feature

        No new tests, can't test DNS.

        * dom/Document.h: Made initDNSPrefetch public, since Page now calls it.

        * page/Page.cpp: (WebCore::Page::dnsPrefetchingStateChanged):
        * page/Page.h:
        Documents cache the value of this setting, so they need to be notified of changes. In particular,
        the first document in a page is created before settings are applied.

        * page/Settings.cpp:
        (WebCore::Settings::Settings): Changed default to false.
        (WebCore::Settings::setDNSPrefetchingEnabled): Notify the page about the change.

2010-12-14  Helder Correia  <helder@sencha.com>

        Reviewed by Ariya Hidayat.

        [Qt] Canvas shadow offset should not be affected by any transformation
        https://bugs.webkit.org/show_bug.cgi?id=50422

        On a canvas context, shadows are currently affected by all
        transformations except scaling. According to the spec:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#shadows

        "The shadowOffsetX and shadowOffsetY attributes specify the distance
        that the shadow will be offset in the positive horizontal and positive
        vertical distance respectively. Their values are in coordinate space
        units. They are not affected by the current transformation matrix."

        NOTE: this applies only to canvas, not to box shadows.

        Test: fast/canvas/canvas-transforms-fillRect-shadow.html

        * platform/graphics/ContextShadow.cpp:
        (WebCore::ContextShadow::ContextShadow):
        (WebCore::ContextShadow::calculateLayerBoundingRect):
        * platform/graphics/ContextShadow.h:
        (WebCore::ContextShadow::setShadowsIgnoreTransforms):
        (WebCore::ContextShadow::shadowsIgnoreTransforms):
        (WebCore::ContextShadow::offset):
        * platform/graphics/qt/ContextShadowQt.cpp:
        (WebCore::ContextShadow::beginShadowLayer):
        (WebCore::ContextShadow::endShadowLayer):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::mustUseContextShadow):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformShadow):

2010-12-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Rule data not updated in Styles pane after stylesheet gets reverted
        https://bugs.webkit.org/show_bug.cgi?id=51034

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._onRevert):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._metricsPaneEdited):
        (WebInspector.ElementsPanel.prototype._stylesPaneEdited):
        (WebInspector.ElementsPanel.prototype._styleSheetChanged):

2010-12-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Avoid GraphicsContext save/restore in Image::drawPattern()
        https://bugs.webkit.org/show_bug.cgi?id=51037

        It's enough to restore the CompositeOperator after drawing.

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):

2010-12-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8763862>
        r72017 used incorrect compiler conditional.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):

2010-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Simplify context-menu handling code
        https://bugs.webkit.org/show_bug.cgi?id=49658

        * platform/ContextMenuItem.h:
        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::appendItem):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):

2010-12-14  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Implement STATE_FOCUSED, STATE_FOCUSABLE, and corresponding events for text objects
        https://bugs.webkit.org/show_bug.cgi?id=27048

        Handle focus change for text objects based in caret changes.

        As text objects (such as paragraphs) seem not to accept focus in
        WebCore in the same way other objects (text controls) do, a
        Gtk-specific workaround is needed to expose this states and the
        related events to ATK-based assistive technologies.

        Test: platform/gtk/accessibility/caret-browsing-text-focus.html

        Ensure that text objects are exposed with the ATK_STATE_FOCUSABLE
        state, and that the ATK_STATE_FOCUSED state is added to those
        text objects containing the currently active caret selection.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (selectionBelongsToObject): Moved upwards to use it from
        the new isTextWithCaret() function.
        (isTextWithCaret): New, checks whether an accessibility object
        represents a text object with the current caret selection on it.
        (setAtkStateSetFromCoreObject): Add the ATK_STATE_FOCUSED state
        when also when isTextWithCaret(coreObject) returns true.
        (webkit_accessible_ref_state_set): Add the ATK_STATE_FOCUSABLE
        state to text objects and those with the ATK_ROLE_PARAGRAPH role.
        (webkit_accessible_text_get_n_selections): Optimize return expression.

        Make sure the proper events associated to a change of focus are
        emitted, based on caret changes across different accessibility
        objects. Also, refactored the code in more manageable and
        understandable helper functions.

        * editing/gtk/SelectionControllerGtk.cpp:
        (WebCore::emitTextSelectionChange): New, includes the specific
        code formerly placed in notifyAccessibilityForSelectionChange() to
        emit the 'text-caret-moved' and 'text-selection-change' signals.
        (WebCore::maybeEmitTextFocusChange): New, takes care of emitting
        the 'focus-event' and 'state-changed::focused' signals when
        needed, that is, when a change in the selection happens across
        different accessible objects.
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        Refactored some code here, by using the new helper functions.

2010-12-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: regroup Inspector.idl entries.
        Just for better visibility.

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

        * inspector/Inspector.idl:

2010-12-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Reverted stylesheet breaks style data
        https://bugs.webkit.org/show_bug.cgi?id=51030

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::reparseStyleSheet):

2010-12-14  Mads Ager  <ager@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] Reflected unsigned attributes should be in the range [0, 2^31)
        https://bugs.webkit.org/show_bug.cgi?id=51023

        Follow the changes made to CodeGeneratorJS.pm to return 0 for
        reflected unsigned attributes that are outside the allowed range.
        See https://bugs.webkit.org/show_bug.cgi?id=50472

        * bindings/scripts/CodeGeneratorV8.pm:

2010-12-14  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Adler.

        Remove stale include of Document.h in V8DOMWrapper.h
        https://bugs.webkit.org/show_bug.cgi?id=50607

        We no longer need to include Document.h or V8DOMMap.h in
        V8DOMWrapper.  Removing them to avoid dependencies.

        * bindings/v8/V8DOMWrapper.h:

2010-12-14  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Darin Adler.

        Test for: EventSource fails to connect if Content-Type header has a charset attribute
        https://bugs.webkit.org/show_bug.cgi?id=45372

        Tests: http/tests/eventsource/eventsource-content-type-charset.html
               http/tests/eventsource/eventsource-content-type-text-event-stream-foobar.html

        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveResponse): Use the mimeType instead of the Content-Type
        header directly. This makes the detection of the "text/stream" mimeType more accurate.

2010-12-14  Pieter Senster  <psenster@google.com>

        Reviewed by Dirk Schulze.

        Incorporate the channel offsets from the ColorMatrix filter in the filter calculation
        https://bugs.webkit.org/show_bug.cgi?id=50682

        Test: svg/filters/feColorMatrix-offset.svg

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::matrix):

2010-12-14  Jarred Nicholls  <jarred@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        Qt's Clipboard::files() implementation for HTML5 Drag/Drop (DataTransfer)

        No new tests. Run tests manually until DRT is updated w/ beginDragWithFiles.

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

2010-12-13  Antonio Gomes  <agomes@rim.com>

        Rubber stamped by Daniel Bates.

        Spatial Navigation: code clean up (part V)
        https://bugs.webkit.org/show_bug.cgi?id=50666

        No new tests needed.

        * page/SpatialNavigation.cpp:
        (WebCore::distanceDataForNode): Made 'FocusCandidate current' const since it is not
        supposed to change within this function.
        * page/SpatialNavigation.h: Ditto.

2010-12-13  takano takumi  <takano@apple.com>

        Reviewed by Dan Bernstein.

        GlyphPage::fill() is slow on vertical writing (Mac)
        https://bugs.webkit.org/show_bug.cgi?id=50865

        No test. Just a performance improvement.

        * platform/graphics/Font.cpp:
        (WebCore::Font::isCJKIdeograph): Now this only checks pure ideographs (Hanji).
        (WebCore::Font::isCJKIdeographOrSymbol): Added this for Hanji and Hanji related symbols.
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter): Changed to call isCJKIdeographOrSymbol() instead of isCJKIdeograph().
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::shouldUseCoreText): This tests if GlyphPage::fill() should use CoreText or not.
        For vertical writing, if the current page contains only ideographs, we go CG path.
        (WebCore::GlyphPage::fill): Made to call shouldUseCoreText() and switch code path.

2010-12-13  Antonio Gomes  <agomes@rim.com>

        Reviewed by Daniel Bates.

        Spatial Navigation: code clean up (part IV)
        https://bugs.webkit.org/show_bug.cgi?id=50666

        Avoid calling canScrollInDirection more than necessary.

        No new tests needed.

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionallyInContainer): Moved the call to canScrollInDirection()
        to within the scrollInDirection().
        * page/SpatialNavigation.cpp: Removed the assertion to canScrollingDirection function.
        (WebCore::scrollInDirection):

2010-12-13  Antonio Gomes  <agomes@rim.com>

        Reviewed by Daniel Bates.

        Spatial Navigation: code clean up (part III)
        https://bugs.webkit.org/show_bug.cgi?id=50666

        No new tests needed.

        * page/SpatialNavigation.h: Added FocusCandidate::isFrameOwnerElement and
        WebCore::frameOwnerElement helper functions.
        (WebCore::FocusCandidate::isFrameOwnerElement): Returns true if the Node pointer
        wrapped by FocusCandidate is an instance of HTMLFrameOwnerElement. Returns false
        otherwise.
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement): Returns the HTMLFrameOwnerElement associated with
        the FocusCandidate if appropriate.
        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfNeeded): Make use of newly added frameOwnerElement() helper.
        (WebCore::FocusController::advanceFocusDirectionallyInContainer): Ditto.

2010-12-13  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by Daniel Bates.

        [skia] ignore transform for canvas shadows
        https://bugs.webkit.org/show_bug.cgi?id=50437

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

2010-12-13  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        ValidityState's exposed functions should check if willValidate() is true before all
        https://bugs.webkit.org/show_bug.cgi?id=50617

        Added checking willValidate() to exposed functions. And modified willValidate() behavior
        for <button type="submit"> and <input type="submit"> to return true if not disabled and
        not readonly.

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::parseMappedAttribute): Added calling setNeedsWillValidateCheck() to refresh willValidate() after changing its type.
        (WebCore::HTMLButtonElement::recalcWillValidate): Added to return true if not disabled and not readonly when type="submit". It's to be compliant to the spec.
        * html/HTMLButtonElement.h:
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::supportsValidation): Removed it to enable willValidate() for <input> when type="submit". It's to be compliant to the spec.
        (WebCore::SubmitInputType::supportsRequired): Added it to reject required attributes though validation is available.
        * html/SubmitInputType.h:
        * html/ValidityState.cpp: Added checking willValidate().
        (WebCore::ValidityState::typeMismatch):
        (WebCore::ValidityState::patternMismatch):
        (WebCore::ValidityState::tooLong):
        (WebCore::ValidityState::rangeUnderflow):
        (WebCore::ValidityState::rangeOverflow):
        (WebCore::ValidityState::stepMismatch):
        (WebCore::ValidityState::customError):
        * html/ValidityState.h:

2010-12-13  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by David Levin.

        [chromium] Upstream skia/ImageBuffer.cpp routine mulDiv255Ceil()
        https://bugs.webkit.org/show_bug.cgi?id=50545

        Skia has rolled, replace uses of mulDiv255Ceil with SkMulDiv255Ceiling.

        No new tests, no change in behaviour.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::putImageData):

2010-12-13  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        Re land Purpose after bad merge
        https://bugs.webkit.org/show_bug.cgi?id=51000

        * loader/loader.cpp:
        (WebCore::Loader::load):

2010-12-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/8763696> REGRESSION (r72173): Fallback fonts’ vertical metrics aren’t accounted for even when line-height is unspecified
        https://bugs.webkit.org/show_bug.cgi?id=50979

        Many test results updated.

        * rendering/InlineFlowBox.cpp: Reinstated the code that updates affectsAscent and
        affectsDescent in the used-fonts code path. Renamed variables for clarity. Added
        a check whether usedFonts is empty (which it might be if there is glyph overflow
        but no fallback) as an optimization.

2010-12-13  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Jon Honeycutt.

        Remove unnecessary include of Switch module.

        There are no switch statements in this file.

        * dom/make_names.pl:

2010-12-13  Emil Eklund  <eae@chromium.org>

        Reviewed by Dimitri Glazkov.

        Change SelectionController::setFocusedNodeIfNeeded to traverse the DOM
        tree instead of the render tree.
        https://bugs.webkit.org/show_bug.cgi?id=50989

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setFocusedNodeIfNeeded):
        Walk up DOM/hosted tree rather than render tree and remove FIXME comment
        that does't apply (SelectionController and EventHandler needs different
        checks).

2010-12-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: aria-invalid should be supported.
        https://bugs.webkit.org/show_bug.cgi?id=50573

        Test: platform/mac/accessibility/aria-invalid.html

        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::invalidStatus):
        * accessibility/AccessibilityObject.h:
        * accessibility/chromium/AXObjectCacheChromium.cpp
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):
        * html/HTMLAttributeNames.in:

2010-12-13  Joone Hur  <joone@kldp.org>

        Reviewed by Eric Seidel.

        WebKit fails to compile when building with WML support enabled
        https://bugs.webkit.org/show_bug.cgi?id=42943

        Use TextPosition instead of lineNumber() and columNumber().

        No new tests are added, because this is just a build fix.

        * dom/XMLDocumentParser.h: Make lineNumber() private.
        * wml/WMLErrorHandling.cpp:
        (WebCore::reportWMLError): Use TextPosition instead of lineNumber() and columnNumber().

2010-12-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: lists and list boxes need different attributes
        https://bugs.webkit.org/show_bug.cgi?id=50978

        Separate out the attributes being returned for lists (<ul>) and listboxes (<select multiple>).

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):

2010-12-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        REGRESSION: Scrolling nested iframes is messed up on platforms that use the cross-platform ScrollView.
       
        The selfClipRect and childrenClipRect methods of RenderLayer were incorrectly relying on the bounding box
        of the root layer.  This bounding box was only coincidentally incorporating overflow as part of the 
        RenderLayer's bounds.  Since I fixed the RenderLayer bounds to not include layout overflow any longer,
        this check is now exposed as incorrect.  Use the entire document size  when computing layer clip
        rects.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::childrenClipRect):
        (WebCore::RenderLayer::selfClipRect):
        * rendering/RenderView.h:
        (WebCore::RenderView::documentRect):

2010-12-13  Simon Fraser  <simon.fraser@apple.com>

        GraphicsContextPrivate.h was removed. Nuke it from the project.
        
        * WebCore.xcodeproj/project.pbxproj:

2010-12-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        HTMLMediaElement::endedPlayback should not return true if duration is zero
        https://bugs.webkit.org/show_bug.cgi?id=50962

        (WebCore::HTMLMediaElement::endedPlayback): Don't return true when duration is zero because a 
        media file can't play if it has no duration, therefore it can't have ended playback.

2010-12-13  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix after r73840.

        * WebCore.vcproj/WebCoreGeneratedCairo.vsprops: Update property file
        to pass three arguments to build-generated-files.sh, just like
        the official Apple port.

2010-12-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Make sure the defaultSpaceEventHandler does logical scrolling.

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

2010-12-13  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=50591 Adopt new CG API for canvas

        No new tests necessary.

        * Configurations/WebCore.xcconfig: Added IOSurface framework link.
        * html/canvas/CanvasRenderingContext2D.cpp: Used IOSurface def. instead.
        * platform/graphics/ImageBuffer.h: Pushed renderingMode down into ctor.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/haiku/ImageBufferHaiku.cpp:
        * platform/graphics/qt/ImageBufferQt.cpp:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        * platform/graphics/wx/ImageBufferWx.cpp:

2010-12-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73923.
        http://trac.webkit.org/changeset/73923
        https://bugs.webkit.org/show_bug.cgi?id=50944

        Broke editing/selection/extend-selection-home-end.html on non-
        mac platforms. Looks like a real bug. (Requested by ojan on
        #webkit).

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::positionForPlatform):
        (WebCore::SelectionController::modifyExtendingForward):

2010-12-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=48545, Home/End, PageUp/PageDwn should respect writing-mode. 

        Add logical scrolling to WebCore.  It basically mirrors physical scrolling but works in abstract logical
        directions and only converts to physical when it's time to attempt the scroll.
        
        Also fixed bugs in scrollRecursively and logicalScrollRecursively where overflow sections in containing
        frames got skipped over.
        
        Made the resetting of the inline axis scroll position on Home/End Mac-specific for overflow sections.
        
        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::logicalScrollOverflow):
        (WebCore::EventHandler::scrollRecursively):
        (WebCore::EventHandler::logicalScrollRecursively):
        * page/EventHandler.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::isVerticalDocument):
        (WebCore::FrameView::isFlippedDocument):
        * page/FrameView.h:
        * platform/ScrollTypes.h:
        (WebCore::logicalToPhysical):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scroll):
        (WebCore::ScrollView::logicalScroll):
        * platform/ScrollView.h:
        (WebCore::ScrollView::isVerticalDocument):
        (WebCore::ScrollView::isFlippedDocument):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::logicalScroll):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scroll):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::logicalScroll):
        * rendering/RenderListBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::logicalScroll):
        * rendering/RenderTextControlSingleLine.h:

2010-12-13  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Rollout 73914, 73915, 73917, 73920 and 73921.

        REGRESSION(r73914): "Chromium page_cycler_morejs fails" (Requested by yurys on #webkit).
        https://bugs.webkit.org/show_bug.cgi?id=50950

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSWorkerContextErrorHandler.cpp: Renamed from WebCore/bindings/js/JSErrorHandler.cpp.
        (WebCore::JSWorkerContextErrorHandler::JSWorkerContextErrorHandler):
        (WebCore::JSWorkerContextErrorHandler::~JSWorkerContextErrorHandler):
        (WebCore::JSWorkerContextErrorHandler::handleEvent):
        * bindings/js/JSWorkerContextErrorHandler.h: Renamed from WebCore/bindings/js/JSErrorHandler.h.
        (WebCore::JSWorkerContextErrorHandler::create):
        (WebCore::createJSWorkerContextErrorHandler):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::dispatchNow):
        (WebCore::V8ConsoleMessage::handler):
        * bindings/v8/V8ConsoleMessage.h:
        * bindings/v8/V8WindowErrorHandler.cpp: Removed.
        * bindings/v8/V8WindowErrorHandler.h: Removed.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::v8MessageHandler):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/Document.cpp:
        (WebCore::Document::reportException):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * dom/ErrorEvent.cpp:
        * dom/ErrorEvent.h:
        * dom/Event.cpp:
        * dom/Event.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        * dom/ScriptExecutionContext.h:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::appendToBuffer):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake):
        (WebCore::WebSocketHandshake::readStatusLine):
        (WebCore::WebSocketHandshake::readHTTPHeaders):
        (WebCore::WebSocketHandshake::checkResponseHeaders):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::postExceptionTask):
        (WebCore::postConsoleMessageTask):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        (WebCore::WorkerContext::reportException):
        (WebCore::WorkerContext::addMessage):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::performTask):
        (WebCore::postConsoleMessageTask):
        * xml/XMLHttpRequest.cpp:
        (WebCore::reportUnsafeUsage):

2010-12-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=50758
        <rdar://problem/8722094> 
        Defer loading print stylesheets
        
        - Make preload scanner skip stylesheets with non-screen media types.
        - Make it possible to specify non-default load priority from the client.
        - Use this mechanism to load print stylesheets using very low priority so they get loaded after everything else.
        - Move default priority code from Loader to CachedResource.
        - Move ResourceLoadScheduler::Priority enum to a separate file (as ResourceLoadPriority).
        - Add a way to make ResourceLoadScheduler load resources one at the time so the above functionality can be tested reliably.

        Tests: http/tests/local/link-stylesheet-load-order-preload.html
               http/tests/local/link-stylesheet-load-order.html

        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLNames::PreloadTask::PreloadTask):
        (WebCore::HTMLNames::PreloadTask::processAttributes):
        (WebCore::HTMLNames::PreloadTask::relAttributeIsStyleSheet):
        (WebCore::HTMLNames::PreloadTask::linkMediaAttributeIsScreen):
        (WebCore::HTMLNames::PreloadTask::preload):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/ResourceLoadPriority.h: Added.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::ResourceLoadScheduler):
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad):
        (WebCore::ResourceLoadScheduler::schedulePluginStreamLoad):
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        (WebCore::ResourceLoadScheduler::servePendingRequests):
        (WebCore::ResourceLoadScheduler::HostInformation::~HostInformation):
        (WebCore::ResourceLoadScheduler::HostInformation::schedule):
        (WebCore::ResourceLoadScheduler::HostInformation::remove):
        (WebCore::ResourceLoadScheduler::HostInformation::hasRequests):
        (WebCore::ResourceLoadScheduler::HostInformation::limitRequests):
        * loader/ResourceLoadScheduler.h:
        (WebCore::ResourceLoadScheduler::isSerialLoadingEnabled):
        (WebCore::ResourceLoadScheduler::setSerialLoadingEnabled):
        (WebCore::ResourceLoadScheduler::HostInformation::requestsPending):
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::loadPriority):
        (WebCore::CachedResource::setLoadPriority):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::requestPreload):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::requestResource):
        * loader/cache/MemoryCache.h:
        * loader/loader.cpp:
        (WebCore::Loader::load):

2010-12-13  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dimitri Glazkov.

        Build fix for r73927
        https://bugs.webkit.org/show_bug.cgi?id=50946

        Reverting CSSCanvasValue::canvasDestroyed to its code before r73927
        because it's breaking the build and I changed it only because it
        appeared redunudant after r73927.

        No behavior changed so no new tests needed.

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::canvasDestroyed):

2010-12-13  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by nobody, build fix.

        Unlinking IOSurface framework from xcodeproj.

        * WebCore.xcodeproj/project.pbxproj:

2010-12-13  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dimitri Glazkov.

        HTMLCanvasElement should handle multiple observers.
        https://bugs.webkit.org/show_bug.cgi?id=50899

        Test: fast/canvas/canvas-bg-multiple-removal.html

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::~CSSCanvasValue):
        (WebCore::CSSCanvasValue::canvasDestroyed):
        (WebCore::CSSCanvasValue::element):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::addObserver):
        (WebCore::HTMLCanvasElement::removeObserver):
        (WebCore::HTMLCanvasElement::didDraw):
        (WebCore::HTMLCanvasElement::reset):
        * html/HTMLCanvasElement.h:

2010-12-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        [Chromium] canvas/philip/tests/2d.missingargs.html hangs on Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=50841

        Test: fast/canvas/strokeText-missing-args.html
        
        We didn't have isfinite checks for the x and y coordinates that are
        passed to strokeText/drawTextInternal (unlike all the other methods,
        which got checks in r50910 and r59447).

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):

2010-12-09  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Adopt new CG API for canvas
        https://bugs.webkit.org/show_bug.cgi?id=50591

        No new tests. All current layout tests are sufficient.

        * html/HTMLCanvasElement.cpp: Add in accelerateRendering flag for imagebuffer creation.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::isAccelerated): Always return true if using CA on new platforms.
        (WebCore::CanvasRenderingContext2D::drawTextInternal): Use accelerateRendering for imagebuffer.
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create): Plumb through new flag.
        * platform/graphics/cairo/ImageBufferCairo.cpp: Update method sig.
        * platform/graphics/cg/ImageBufferCG.cpp: Switch off of accelerateRendering flag for new accelerated paths.
        * platform/graphics/cg/ImageBufferData.h: Add in surface ref
        * platform/graphics/haiku/ImageBufferHaiku.cpp: Update method sig.
        * platform/graphics/qt/ImageBufferQt.cpp: ^^
        * platform/graphics/skia/ImageBufferSkia.cpp: ^^
        * platform/graphics/wince/ImageBufferWinCE.cpp: ^^
        * platform/graphics/wx/ImageBufferWx.cpp: ^^
        * platform/mac/WebCoreSystemInterface.h: Add new method sigs
        * platform/mac/WebCoreSystemInterface.mm: ^^
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerCompositor.cpp: Set acceleratesDrawing for canvas backings.

2010-12-13  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Ojan Vafai.

        Shift-End does not select to the end of the line
        https://bugs.webkit.org/show_bug.cgi?id=50610

        Test: editing/selection/extend-to-line-boundary.html

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::positionForPlatform): Use visibleStart/visibleEnd rather than
        start/end.
        (WebCore::SelectionController::modifyExtendingForward):

2010-12-13  Adam Roben  <aroben@apple.com>

        Windows build fix after r73914

        * WebCore.vcproj/WebCore.vcproj: Fix malformed XML.

2010-12-13  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Qt build fix.

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

2010-12-13  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Additional support is needed for caret browsing
        https://bugs.webkit.org/show_bug.cgi?id=25526

        Enable "MoveTo{Beginninng|End}OfDocument" commands when caret
        browsing is enabled.

        This change impacts the GTK-port only as caret browsing is a
        feature only used in that platform so far.

        Test: platform/gtk/editing/selection/caret-mode-document-begin-end.html

        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap): Enable the commads when in caret browsing.

2010-12-13  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Qt build fix.

        * dom/Event.cpp:
        (WebCore::Event::isErrorEvent):
        * dom/Event.h: remove ENABLE(WORKERS) guard since ErrorEvent is now used not
        only in workers.

2010-12-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Protocol cleanup task. Assign domain attribute to Resources and Debugger specific functions.

        Debugger and Resources related notification functions of Inspector.idl were
        marked as such with help of "domain" attribute. The other changes in js files
        are reflecting this change. Some wrappers in WebInspector namespace were dropped,
        the others were moved to DebuggerModel class.

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

        * inspector/Inspector.idl:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.didCommitLoad):
        * inspector/front-end/Database.js:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.pausedScript):
        (WebInspector.DebuggerModel.prototype.resumedScript):
        (WebInspector.DebuggerModel.prototype.attachDebuggerWhenShown):
        (WebInspector.DebuggerModel.prototype.debuggerWasEnabled):
        (WebInspector.DebuggerModel.prototype.debuggerWasDisabled):
        (WebInspector.DebuggerModel.prototype.parsedScriptSource):
        (WebInspector.DebuggerModel.prototype.failedToParseScriptSource):
        (WebInspector.DebuggerModel.prototype.didCreateWorker):
        (WebInspector.DebuggerModel.prototype.didDestroyWorker):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.updateMainViewWidth):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager):
        (WebInspector.ResourceManager.prototype._unbindResourceURL):
        (WebInspector.ResourceManager.prototype.updateDOMStorage):
        (WebInspector.ResourceManager.prototype.updateApplicationCacheStatus):
        (WebInspector.ResourceManager.prototype.didGetFileSystemPath):
        (WebInspector.ResourceManager.prototype.didGetFileSystemError):
        (WebInspector.ResourceManager.prototype.didGetFileSystemDisabled):
        (WebInspector.ResourceManager.prototype.updateNetworkState):
        (WebInspector.ResourceManager.prototype.addDOMStorage):
        (WebInspector.ResourceManager.prototype.selectDOMStorage):
        (WebInspector.ResourceManager.prototype.addDatabase):
        (WebInspector.ResourceManager.prototype.selectDatabase):
        (WebInspector.ResourceManager.prototype.sqlTransactionSucceeded):
        (WebInspector.ResourceManager.prototype.sqlTransactionFailed):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.Worker):
        * inspector/front-end/inspector.js:

2010-12-13  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Qt build fix. 

        * dom/ErrorEvent.cpp:
        * dom/ErrorEvent.h: remove ENABLE(WORKERS) guard since ErrorEvent is now used not
        only in workers.

2010-12-13  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Adam Barth.

        WebCore doesn't fire window.onerror event when uncaught JavaScript exceptions are thrown
        https://bugs.webkit.org/show_bug.cgi?id=8519

        Uncaught exceptions are propagated to window.onerror hander if one is present.
        The handler is expected to be a function accepting three arguments: error message,
        resource url and line number where the exception occured.

        It was decided to dispatch ErrorEvent to all listeners/handlers no matter if they
        were created in the same isolated world where the exception occured or not.

        Tests: fast/events/window-onerror1.html
               fast/events/window-onerror10.html
               fast/events/window-onerror11.html
               fast/events/window-onerror2.html
               fast/events/window-onerror3.html
               fast/events/window-onerror4.html
               fast/events/window-onerror5.html
               fast/events/window-onerror6.html
               fast/events/window-onerror7.html
               fast/events/window-onerror8.html
               fast/events/window-onerror9.html
               http/tests/security/window-onerror-exception-in-iframe.html
               userscripts/window-onerror-for-isolated-world-1.html
               userscripts/window-onerror-for-isolated-world-2.html

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSErrorHandler.cpp: Renamed from WebCore/bindings/js/JSWorkerContextErrorHandler.cpp.
        (WebCore::JSErrorHandler::JSErrorHandler):
        (WebCore::JSErrorHandler::~JSErrorHandler):
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSErrorHandler.h: Copied from WebCore/bindings/js/JSWorkerContextErrorHandler.h.
        (WebCore::JSErrorHandler::create):
        (WebCore::createJSErrorHandler):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::dispatchNow):
        (WebCore::V8ConsoleMessage::handler): the method was changed to use generic WebCore exception
        reporting mechanism which is also used by JSC bindings.
        * bindings/v8/V8ConsoleMessage.h:
        * bindings/v8/V8WindowErrorHandler.cpp: Copied from WebCore/bindings/js/JSWorkerContextErrorHandler.h.
        (WebCore::V8WindowErrorHandler::V8WindowErrorHandler):
        (WebCore::V8WindowErrorHandler::callListenerFunction):
        * bindings/v8/V8WindowErrorHandler.h: Renamed from WebCore/bindings/js/JSWorkerContextErrorHandler.h.
        (WebCore::V8WindowErrorHandler::create):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::v8MessageHandler):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/Document.cpp:
        (WebCore::Document::errorEventTarget):
        (WebCore::Document::logExceptionToConsole):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::PendingException::PendingException):
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::reportException): this method is not virtual anymore to
        ensure that error event dispatching algorithm is the same in WorkerContext and in Document.
        (WebCore::ScriptExecutionContext::dispatchErrorEvent):
        * dom/ScriptExecutionContext.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::postExceptionTask):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::WorkerContext):
        (WebCore::WorkerContext::errorEventTarget):
        (WebCore::WorkerContext::logExceptionToConsole):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::performTask):

2010-12-08  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: Enable CSS property editing name/value-wise (like Firebug does)
        https://bugs.webkit.org/show_bug.cgi?id=50565

        For CSS property editing, the property name and value have become two fields separated
        by a colon (rather than one field containing the full property text.) A user can tab
        between the name and value fields forward and backward. A colon typed in the name field
        and a semicolon in the value field (unless found inside a string) act as a Tab and focus
        the next editable field (while applying the entire property value.)

        Now a user can tab through all editable styles for an element, even across rule boundaries.

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.prototype._startEditingBreakpoint):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype._startEditingColumnOfDataGridNode):
        (WebInspector.DataGrid.prototype._startEditing):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._startEditingAttribute):
        (WebInspector.ElementsTreeElement.prototype._startEditingTextNode):
        (WebInspector.ElementsTreeElement.prototype._startEditingTagName):
        (WebInspector.ElementsTreeElement.prototype._startEditingAsHTML):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.startEditing):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.startEditing):
        * inspector/front-end/Section.js:
        (WebInspector.Section):
        (WebInspector.Section.prototype.get subtitleAsTextForTest):
        (WebInspector.Section.prototype.get nextSibling):
        (WebInspector.Section.prototype.get previousSibling):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._editBreakpointCondition):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.nextEditableSibling):
        (WebInspector.StylePropertiesSection.prototype.previousEditableSibling):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.StylePropertiesSection.prototype.startEditingSelector):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertyTreeElement.prototype.):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._handleDoubleClick):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionTreeElement.prototype.startEditing):
        * inspector/front-end/inspector.css:
        (.child-editing):
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.defaultFinishHandler):
        (WebInspector.startEditing):
        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype.select):

2010-12-13  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed.

        Added svn propery eol-style. Patches to this file fail to apply on Windows EWS bot.

        * accessibility/AccessibilityAllInOne.cpp: Added property svn:eol-style.

2010-12-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73898.
        http://trac.webkit.org/changeset/73898
        https://bugs.webkit.org/show_bug.cgi?id=50919

        FileSystem and Database API's were broken (Requested by loislo
        on #webkit).

        * inspector/Inspector.idl:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):
        * inspector/front-end/DOMAgent.js:
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.debuggerPaused):
        (WebInspector.DebuggerModel.prototype.debuggerResumed):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.updateMainViewWidth):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager):
        (WebInspector.ResourceManager.prototype._registerNotifyHandlers):
        (WebInspector.ResourceManager.prototype._unbindResourceURL):
        * inspector/front-end/inspector.js:
        (WebInspector.addDatabase):
        (WebInspector.addDOMStorage):
        (WebInspector.updateDOMStorage):
        (WebInspector.updateApplicationCacheStatus):
        (WebInspector.didGetFileSystemPath):
        (WebInspector.didGetFileSystemError):
        (WebInspector.didGetFileSystemDisabled):
        (WebInspector.updateNetworkState):
        (WebInspector.attachDebuggerWhenShown):
        (WebInspector.debuggerWasEnabled):
        (WebInspector.debuggerWasDisabled):
        (WebInspector.profilerWasEnabled):
        (WebInspector.profilerWasDisabled):
        (WebInspector.parsedScriptSource):
        (WebInspector.restoredBreakpoint):
        (WebInspector.failedToParseScriptSource):
        (WebInspector.pausedScript):
        (WebInspector.resumedScript):
        (WebInspector.resetProfilesPanel):
        (WebInspector.didCommitLoad):
        (WebInspector.addProfileHeader):
        (WebInspector.setRecordingProfile):
        (WebInspector.addHeapSnapshotChunk):
        (WebInspector.finishHeapSnapshot):

2010-12-13  Anton Muhin  <antonm@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] More CSS wrappers GC work: keep document's style sheets, style sheet and css rule lists' items in proper object groups
        https://bugs.webkit.org/show_bug.cgi?id=50828

        * bindings/v8/DOMData.h:
        (WebCore::DOMData::WrapperMapObjectRemover::visitDOMWrapper):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/DOMDataStore.h:
        (WebCore::ChunkedTable::visit):
        (WebCore::ChunkedTable::visitEntries):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::visit):
        (WebCore::DOMDataStore::IntrusiveDOMWrapperMap::ChunkedTableTraits::visit):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjectsInCurrentThread):
        (WebCore::visitDOMNodesInCurrentThread):
        (WebCore::visitDOMObjectsInCurrentThread):
        (WebCore::visitActiveDOMObjectsInCurrentThread):
        (WebCore::visitDOMSVGElementInstancesInCurrentThread):
        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::visit):
        * bindings/v8/V8GCController.cpp:
        (WebCore::DOMObjectVisitor::visitDOMWrapper):
        (WebCore::EnsureWeakDOMNodeVisitor::visitDOMWrapper):
        (WebCore::GCPrologueVisitor::visitDOMWrapper):
        (WebCore::NodeGrouperVisitor::visitDOMWrapper):
        (WebCore::NodeGrouperVisitor::applyGrouping):
        (WebCore::DOMObjectGrouperVisitor::visitDOMWrapper):
        (WebCore::GCEpilogueVisitor::visitDOMWrapper):

2010-12-13  Zoltan Herczeg  <zherczeg@webkit.org>

        Unreviewed build fix for r73894.

        SVGFEImage should also check its hasResult() in its apply().

        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::apply):

2010-12-13  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Protocol cleanup task. Assign domain attribute to Resources and Debugger specific functions.

        Debugger and Resources related notification functions of Inspector.idl were
        marked as such with help of "domain" attribute. The other changes in js files
        are reflecting this change. Some wrappers in WebInspector namespace were dropped,
        the others were moved to DebuggerModel class.

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

        * inspector/Inspector.idl:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.didCommitLoad):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel):
        (WebInspector.DebuggerModel.prototype.pausedScript):
        (WebInspector.DebuggerModel.prototype.resumedScript):
        (WebInspector.DebuggerModel.prototype.attachDebuggerWhenShown):
        (WebInspector.DebuggerModel.prototype.debuggerWasEnabled):
        (WebInspector.DebuggerModel.prototype.debuggerWasDisabled):
        (WebInspector.DebuggerModel.prototype.parsedScriptSource):
        (WebInspector.DebuggerModel.prototype.failedToParseScriptSource):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.addHeapSnapshots):
        (WebInspector.ProfilesPanel.prototype.updateMainViewWidth):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager):
        (WebInspector.ResourceManager.prototype._unbindResourceURL):
        (WebInspector.ResourceManager.prototype.updateDOMStorage):
        (WebInspector.ResourceManager.prototype.updateApplicationCacheStatus):
        (WebInspector.ResourceManager.prototype.didGetFileSystemPath):
        (WebInspector.ResourceManager.prototype.didGetFileSystemError):
        (WebInspector.ResourceManager.prototype.didGetFileSystemDisabled):
        (WebInspector.ResourceManager.prototype.updateNetworkState):
        (WebInspector.ResourceManager.prototype.addDatabase):
        (WebInspector.ResourceManager.prototype.addDOMStorage):
        * inspector/front-end/inspector.js:

2010-12-13  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        Better result passing in filter primitives
        https://bugs.webkit.org/show_bug.cgi?id=49907

        SVG filter primitives can use the output of other filters. The
        input and output format of a filter can be a premultiplied or
        unmultiplied RGBA array, or an image buffer. All filter
        primitive results were converted to image buffers before, which
        could be an unecessary (and really costly) operation, if
        a filter expects its input in the same format as the output
        of the input filter primitive. This overhead is removed by
        this patch. All apply() methods are updated according to this
        new filter primitive interface.

        Filters do not generate their results twice (or more) anymore,
        when their apply() called multiple times.

        The existing tests cover this feature.

        * manual-tests/svg-filter-animation.svg: Added.
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::apply):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::apply):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::apply):
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::apply):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::apply):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::apply):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::apply):
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::apply):
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::apply):
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::apply):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::apply):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::apply):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::requestedRegionOfInputImageData):
        (WebCore::FilterEffect::asImageBuffer):
        (WebCore::FilterEffect::asUnmultipliedImage):
        (WebCore::FilterEffect::asPremultipliedImage):
        (WebCore::FilterEffect::copyImageBytes):
        (WebCore::FilterEffect::copyUnmultipliedImage):
        (WebCore::FilterEffect::copyPremultipliedImage):
        (WebCore::FilterEffect::createImageBufferResult):
        (WebCore::FilterEffect::createUnmultipliedImageResult):
        (WebCore::FilterEffect::createPremultipliedImageResult):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::hasResult):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::apply):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::apply):
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::apply):

2010-12-13  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        * WebCore.pro: Remove non-existant loader/Request.h from build system.

2010-12-13  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Eric Seidel.

        [chromium] Reduce canvas.toDataURL("image/jpeg") run-time cost by 10%
        https://bugs.webkit.org/show_bug.cgi?id=50804

        Follow on from r73173, unroll the SkUnPreMultiply::PMColorToColor() call
        viz., compute the unpremultiplatcion in-place. This reduces the run-time
        cost of jpeg encoding by 10-15% for my image test set.

        No new tests: canvas.toDataURL() is covered by existing tests.

        * platform/image-encoders/skia/JPEGImageEncoder.cpp:
        (WebCore::preMultipliedBGRAtoRGB):

2010-12-13  Helder Correia  <helder@sencha.com>

        Reviewed by Eric Seidel.

        [Qt] StillImage::draw() should use ContextShadow
        https://bugs.webkit.org/show_bug.cgi?id=50849

        The branch that checks for a shadow requirement in StillImage::draw()
        is executed when drawing a canvas onto a canvas with
        ctx1.drawImage(canvas2, x, y). The current implementation supports
        solid shadows only. And if transformations are present, the offset gets
        transformed as well. Thus, ContextShadow must be used instead in order
        to support blur and correct offset transformations.

        Test: fast/canvas/canvas-draw-canvas-on-canvas-shadow.html

        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):

2010-12-12  Jon Honeycutt  <jhoneycutt@apple.com>

        Unreviewed build fix.

        * editing/EditingAllInOne.cpp:
        Add new file to the all-in-one.

2010-12-12  Jon Honeycutt  <jhoneycutt@apple.com>

        Unreviewed build fix.

        * WebCore.vcproj/WebCore.vcproj:
        Remove accidentally-committed conflict marker.

2010-10-28  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        spellcheck does not check pasted text
        https://bugs.webkit.org/show_bug.cgi?id=40092

        - Introduced SpellChecker class to encapsulate asynchronous spell
          checker state: sequence id, requesting text and target node.
          This is also the first step to decompose spell-check related
          code to a separate class.
        - Added EditorClient::isAsynchronousSpellCheckingEnabled() 
          to use async spellcheck API on the platform.
          These APIs are touched by SpellChecker.
        - Used SpellChecker to check a pasted test. Text to check is
          collected from the subtree under the editingRoot.
        - Added Setting::m_asynchronousSpellCheckingEnabled to control
          async spell checking.

        Test: editing/spelling/spellcheck-paste.html

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::showMarkers):
        (showDocumentMarkers):
        * dom/DocumentMarkerController.h:
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::setOffsetInLeafNode):
        * dom/PositionIterator.h:
        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::Editor):
        (WebCore::findFirstMarkable):
        (WebCore::Editor::selectionStartHasSpellingMarkerFor):
        * editing/Editor.h:
        (WebCore::Editor::spellChecker):
        * editing/SpellChecker.cpp: Added.
        (WebCore::SpellChecker::SpellChecker):
        (WebCore::SpellChecker::~SpellChecker):
        (WebCore::SpellChecker::initRequest):
        (WebCore::SpellChecker::clearRequest):
        (WebCore::SpellChecker::isAsynchronousEnabled):
        (WebCore::SpellChecker::canCheckAsynchronously):
        (WebCore::SpellChecker::isBusy):
        (WebCore::SpellChecker::isValid):
        (WebCore::SpellChecker::isCheckable):
        (WebCore::SpellChecker::requestCheckingFor):
        (WebCore::forwardIterator):
        (WebCore::SpellChecker::didCheck):
        * editing/SpellChecker.h: Added.
        (WebCore::SpellCheckingResult::SpellCheckingResult):
        (WebCore::SpellCheckingResult::type):
        (WebCore::SpellCheckingResult::location):
        (WebCore::SpellCheckingResult::length):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::requestCheckingOfString):
        * page/EditorClient.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setAsynchronousSpellCheckingEnabled):
        (WebCore::Settings::asynchronousSpellCheckingEnabled):

2010-12-09  Antonio Gomes  <agomes@rim.com>

        Reviewed by Daniel Bates.

        Spatial Navigation: code clean up (part II)
        https://bugs.webkit.org/show_bug.cgi?id=50666

        No new tests needed.

        * page/FocusController.cpp: Removed static declaration of updateFocusCandidateIfNeeded() from
        the top of FocusController.cpp, and added the 'static' keyword where the function is implemented;
        * page/SpatialNavigation.cpp: In FocusCandidate constructor, renamed 'n' to 'node', and added an assert to it;
        (WebCore::FocusCandidate::FocusCandidate):
        (WebCore::virtualRectForAreaElementAndDirection): Added an assert to 'node';
        * page/SpatialNavigation.h:I reordered the declaration of some methods in order to group related ones;
        Removed isScrollableContainerNode() function declaration since it is not used outside SpatialNavigation.cpp;
        And removed the declaration of isNodeDeepDescendantOfDocument() since it does not exist anymore.

2010-12-12  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        build-webkit --gtk --minimal fails
        https://bugs.webkit.org/show_bug.cgi?id=46267

        No new tests, build fix only.

        * GNUmakefile.am: Include some JS bindings generated headers in
        the build even if their corresponding feature is disabled. They
        are needed to make the DOM bindings build.

2010-12-12  Sam Magnuson  <smagnuso@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] Compile with QT_NO_QUUID_STRING.
        https://bugs.webkit.org/show_bug.cgi?id=49745

        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):

2010-12-12  Ragner Magalhaes  <ragner.magalhaes@openbossa.org>

        Reviewed by Eric Seidel.

        [Qt] Missing style for date pickers on Qt Mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=50628

        * css/themeQtMobile.css:

2010-12-11  Alice Liu  <alice.liu@apple.com>

        Mac build fix.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit):
        Resolve string[0] ambiguity by passing 0U.

2010-12-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        [V8] Move to DOMWindow::setLocation
        https://bugs.webkit.org/show_bug.cgi?id=50876

        Recently, JavaScriptCore moved to implementing setLocation in WebCore.
        This patch change V8 to use that common code path.  I haven't removed
        the old code path because it's still used for other things (like
        assigning window.location.href), but I'll move the rest over in a
        future patch.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::locationAccessorSetter):
        * bindings/v8/specialization/V8BindingState.cpp:
        (WebCore::::getFirstWindow):
        * bindings/v8/specialization/V8BindingState.h:

2010-10-11  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Mock DeviceOrientation client for DRT
        https://bugs.webkit.org/show_bug.cgi?id=47490

        * WebCore.pro:

2010-12-11  Joone Hur  <joone@kldp.org>

        Reviewed by Alexey Proskuryakov.

        enumeration value ‘ResponseTypeArrayBuffer’ not handled in switch
        https://bugs.webkit.org/show_bug.cgi?id=50871

        Fix the warning which occurs when enumeration value is not handled in switch.

        No new tests, no change in behavior.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::response):

2010-12-11  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Add an overload to makeString for Vector<char>
        https://bugs.webkit.org/show_bug.cgi?id=50123

        This also contains a segfault fix for ImageBuffer::toDataURL of the Haiku port.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/haiku/ImageBufferHaiku.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::toDataURL):

2010-12-10  Alexey Proskuryakov  <ap@apple.com>

        Mac build fix.

        * platform/network/cf/ResourceResponseCFNet.cpp: (WebCore::ResourceResponse::platformLazyInit):
        Resolve string[0] ambiguity by passing 0U.

2010-12-10  Steve Falkenburg  <sfalken@apple.com>

        Windows production build fix.
        
        Only the vsprops are indirected through WebKitVSPropsRedirectionDir, not the scripts in WebKitLibraries/win/tools/scripts.

        * WebCore.vcproj/WebCoreGeneratedCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

2010-12-10  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Eric Seidel.

        Remove WebCore/platform/mac/GeolocationService.{h,mm}
        https://bugs.webkit.org/show_bug.cgi?id=50074

        Remove unused non-client-based geolocation code.

        * platform/mac/GeolocationServiceMac.h: Removed.
        * platform/mac/GeolocationServiceMac.mm: Removed.

2010-12-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46573
        <rdar://problem/8479389> REGRESSION: charset="utf-8" (with quotes) doesn't work

        Test: http/tests/mime/quoted-charset.php

        * platform/network/cf/ResourceResponseCFNet.cpp: (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/ResourceResponseMac.mm: (WebCore::ResourceResponse::platformLazyInit):
        Work around a CFNetwork issue, strip quotes if they are present.

2010-12-10  Vincent Scheib  <scheib@chromium.org>

        Reviewed by James Robinson.

        Shader::loadShader() must initialize variable passed to getShaderiv
        https://bugs.webkit.org/show_bug.cgi?id=50842

        Test: fast/canvas/canvas-largedraws.html

        * platform/graphics/gpu/Shader.cpp:
        (WebCore::Shader::loadShader):

2010-12-10  Vincent Scheib  <scheib@chromium.org>

        Reviewed by James Robinson.

        Texture::updateSubRect should pass IntRect by reference
        https://bugs.webkit.org/show_bug.cgi?id=50845

        No test, changing to pass by ref.

        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/Texture.h:

2010-12-10  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Move open and showModalDialog implementations from bindings into DOM class DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=50836

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::open): Removed most of the code and changed to call
        DOMWindow::open.
        (WebCore::DialogHandler::DialogHandler): Added. Object is used to handle the
        arguments and return value in showModalDialog.
        (WebCore::DialogHandler::dialogCreated): Ditto.
        (WebCore::DialogHandler::returnValue): Ditto.
        (WebCore::setUpDialog): Added. Function passed to showModalDialog that just
        casts pointer to DialogHandler can calls dialogCreated.
        (WebCore::JSDOMWindow::showModalDialog): Removed most of the code and changed
        to call DOMWindow::showModalDialog.
        (WebCore::JSDOMWindow::postMessage): Made style match the rest of the file by
        renaming local variables and getting rid of a needless ones.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::parseModalDialogFeatures): Moved body of this function
        to the WindowFeatures class.
        (WebCore::DOMWindow::allowPopUp): Renamed argument from activeFrame to firstFrame,
        because that's the frame we pass in here. Also added an overload so this can be
        called on a window rather than a frame.
        (WebCore::DOMWindow::setLocation): Renamed a couple variables so the names are
        the same as in open and showModalDialog. Factored the JavaScript security check
        into a new function named isInsecureScriptAccess.
        (WebCore::DOMWindow::isInsecureScriptAccess): Here is the new function.
        (WebCore::DOMWindow::createWindow): Added. Contains logic shared by open and
        showModalDialog just as the function named createWindow in JSDOMWindowCustom.cpp
        used to.
        (WebCore::DOMWindow::open): Added. Code from JSDOMWindowCustom without the
        JavaScript language binding part, and with a bit of refactoring to share code
        with the rest of the DOMWindow class.
        (WebCore::DOMWindow::showModalDialog): Ditto.

        * page/DOMWindow.h: Moved conditional parts of the file into separate paragraphs
        in alphabetical order so they are not scattered thorugh the file. Removed redundant
        includes. Added some blank lines for clarity. Added an open function and a
        showModalDialog function. Added private createWindow and isInsecureScriptAccess
        functions.

        * page/WindowFeatures.cpp:
        (WebCore::isWindowFeaturesSeparator): Renamed from isSeparator for clarity.
        (WebCore::WindowFeatures::WindowFeatures): Updated for name change. Used isEmpty
        instead of checking length. Added a new constructor for use when making dialogs,
        with code from the showModalDialog function.
        (WebCore::WindowFeatures::boolFeature): Use DialogFeaturesMap typedef.
        (WebCore::WindowFeatures::floatFeature): Use DialogFeaturesMap typedef.
        Renamed a local variable and tweaked the comments a bit.
        (WebCore::WindowFeatures::parseDialogFeatures): Added. Code moved here from
        DOMWindow::parseDialogFeatures and refactored a bit.

        * page/WindowFeatures.h: Added new constructor, new parseDialogFeatures
        function, DialogFeaturesMap typedef, and made setWindowFeature function private.

2010-12-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: refactor AccessibilityRenderObject::doAccessibilityHitTest
        https://bugs.webkit.org/show_bug.cgi?id=50574

        Refactors accessibility hit testing to allow for a more flexible model when handling elements
        with fake sub-elements (like sliders or list boxes).

        Renamed doAccessibilityHitTest -> accessibilityHitTest, which is called on the root
        accessibility render object. Then subclassers are able to override 
        elementAccessibilityHitTest to return their own specific elements.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::elementAccessibilityHitTest):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::accessibilityHitTest):
        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityHitTest):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::elementAccessibilityHitTest):
        * accessibility/AccessibilitySlider.h:
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_component_ref_accessible_at_point):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityHitTest:]):

2010-12-10  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Adler.

        Clean up assertion in Extensions3DOpenGL.cpp
        https://bugs.webkit.org/show_bug.cgi?id=50852

        Built Release mode to test. No functionality change.

        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::ensureEnabled):

2010-12-10  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Eric Seidel.

        Crash while processing ill-formed <textPath> ouside of <text>
        https://bugs.webkit.org/show_bug.cgi?id=47759

        Renderers within a <text> subtree are created only when their corresponding elements
        satisfy the content model.

        Test: svg/custom/invalid-text-content.svg

        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::childShouldCreateRenderer): Fixed to comply with the content model.
        (WebCore::SVGTRefElement::rendererIsNeeded): Added.
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::childShouldCreateRenderer): Fixed to comply with the content model.
        (WebCore::SVGTSpanElement::rendererIsNeeded): Added.
        * svg/SVGTSpanElement.h: Changed indentation.
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::childShouldCreateRenderer): Reformatted.
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::childShouldCreateRenderer): Fixed to comply with the content model.
        (WebCore::SVGTextPathElement::rendererIsNeeded): Added.
        * svg/SVGTextPathElement.h:

2010-12-10  Zhenyao Mo  <zmo@google.com>

        Reviewed by Adam Barth.

        Use enums instead of booleans in ImageSource/ImageDecoder constructors
        https://bugs.webkit.org/show_bug.cgi?id=50818

        This patch basically defines two enum type in ImageSource: AlphaOption
        and GammaAndColorProfileOption and use them as ImageSource and ImageDecoder
        constructor parameters instead of boolean typs.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ImageSource):
        (WebCore::ImageSource::setData):
        * platform/graphics/ImageSource.h: Define the two enum types.
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::ImageSource):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::BMPImageDecoder):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::decodeAtIndex):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::JPEGImageDecoder):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::WEBPImageDecoder):
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2010-12-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION(r73799): editing/execCommand/4920488.html fails
        https://bugs.webkit.org/show_bug.cgi?id=50854

        The regression was caused by Range::processContents's not extracting
        m_end.container()->firstChild(). Fixed the bug by always adding the first child.

        * dom/Range.cpp:
        (WebCore::Range::processContents):

2010-12-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION: Infinite redirect on developer.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=45627

        Tests: fast/loader/form-submit-aborts-parsing.html
               fast/loader/location-change-aborts-parsing.html

        This patch is not pretty, but it fixes the bug.  I stole this approach
        from the old HTML parser (as suggested by Eric Seidel).  The other
        approaches that folks tried for this bug are better, but it's inclear
        how to get them to work correctly.  I've added a large FIXME comment.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::isParsingFragment):

2010-12-10  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Ada Chan.

        When we are creating a ContextMenuItem, only call setSubMenu if we have
        a subMenu to set.

        * platform/ContextMenuItem.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):

2010-12-10  Kenneth Russell  <kbr@google.com>

        Unreviewed, another build fix. #include <wtf/UnusedParam.h> needed
        for Release builds.

        * platform/graphics/opengl/Extensions3DOpenGL.cpp:

2010-12-10  Kenneth Russell  <kbr@google.com>

        Unreviewed, build fix. Change #ifndef NDEBUG to #ifdef NDEBUG.

        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::ensureEnabled):

2010-12-10  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Implement extension entry points and remove EXTENSIONS enum
        https://bugs.webkit.org/show_bug.cgi?id=40316

        Implemented WebGLRenderingContext's getSupportedExtensions and
        getExtensions entry points, and, to verify them, added support for
        the first specified WebGL extension, OES_texture_float. This
        extension is now advertised in the Chromium and WebKit ports when
        the underlying hardware supports it.

        The new OES_texture_float test in the WebGL conformance suite
        verifies the allocation and population of floating point textures,
        and their use as render targets. However, because this extension
        is optional, it is not easily testable with a layout test; there
        is only one set of expectations for a given test, and two would be
        needed, one when the extension is available and one when it is not.

        Tested with the oes-texture-float.html WebGL conformance test in
        Chromium and WebKit on Mac OS X on hardware that supports the
        extension. Also verified with a configuration that does not
        advertise the extension that this same test passes.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        (WebCore::JSWebGLRenderingContext::markChildren):
        (WebCore::JSWebGLRenderingContext::getExtension):
        (WebCore::JSWebGLRenderingContext::getSupportedExtensions):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::toV8Object):
        (WebCore::V8WebGLRenderingContext::getExtensionCallback):
        (WebCore::V8WebGLRenderingContext::getSupportedExtensionsCallback):
        * html/canvas/OESTextureFloat.cpp: Added.
        (WebCore::OESTextureFloat::OESTextureFloat):
        (WebCore::OESTextureFloat::~OESTextureFloat):
        (WebCore::OESTextureFloat::getName):
        (WebCore::OESTextureFloat::create):
        * html/canvas/OESTextureFloat.h: Added.
        * html/canvas/OESTextureFloat.idl: Added.
        * html/canvas/WebGLExtension.cpp: Added.
        (WebCore::WebGLExtension::WebGLExtension):
        (WebCore::WebGLExtension::~WebGLExtension):
        * html/canvas/WebGLExtension.h: Added.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::validateTexFuncFormatAndType):
        (WebCore::WebGLRenderingContext::validateTexFuncData):
        (WebCore::WebGLRenderingContext::getNumberOfExtensions):
        (WebCore::WebGLRenderingContext::getExtensionNumber):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * platform/graphics/Extensions3D.h:
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters):
        (WebCore::GraphicsContext3D::extractTextureData):
        (WebCore::doUnpackingAndPacking):
        (WebCore::doPacking):
        (WebCore::doFloatingPointPacking):
        (WebCore::GraphicsContext3D::packPixels):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supports):
        (WebCore::Extensions3DOpenGL::ensureEnabled):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::texImage2D):
        * platform/graphics/qt/Extensions3DQt.cpp:
        (WebCore::Extensions3DQt::ensureEnabled):
        * platform/graphics/qt/Extensions3DQt.h:

2010-12-10  Darin Adler  <darin@apple.com>

        Try to fix Windows build.

        * dom/Range.cpp:
        (WebCore::Range::processContents): Put typedef of NodeVector inside the function
        instead of at the top of the file, since the use is restricted to this function.
        There's another NodeVector in ContainerNode.cpp.

2010-12-09  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Prep for WebKit2: Context menu support on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50514
        
        Before this patch ContextMenu on Windows were backed by HMENUs, and ContextMenuItems
        were backed by MENUITEMINFOs. This meant they couldn't be copied, and they needed to
        be to work in WebKit2.
        
        This patch adds a new USE flag - CROSS_PLATFORM_CONTEXT_MENUS that are for a cross-platform
        representation of context menus. This patch also has Windows adopt them.
        
        Cross-platform context menus change the API of context menus and the ContextMenuClient. There
        is no more idea of a PlatformMenuDescription or a PlatformMenuItemDescription. Menus are backed
        by a Vector of ContextMenuItems, and menu items are backed by the variables they need (enabled, checked
        title, action, type, and submenu).
        
        This patch also refactors the ContextMenuClient interface to use a variation on the getCustomMenuFromDefaultItems
        function to allow for customization of the context menu.
        
        For other ports to use CROSS_PLATFORM_CONTEXT_MENUS, all they need to do is write conversion functions from
        a ContextMenu <-> native menu type, and ContextMenuItem <-> native menu item type. For Windows, this is done
        in ContextMenuWin.cpp and ContextMenuItemWin.cpp.

        No new tests, no change in behavior.

        * WebCore.vcproj/WebCore.vcproj: Add new files (only needed on Windows for now).
        * loader/EmptyClients.h:
        (WebCore::EmptyContextMenuClient::customizeMenu): Define this function if CROSS_PLATFORM_CONTEXT_MENUS
            is on.
        * page/ContextMenuClient.h: Ditto. 
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenu): Call customizeMenu instead of 
            getCustomMenuFromDefaultItems if CROSS_PLATFORM_CONTEXT_MENUS is on.
        * platform/ContextMenu.cpp: Added.
        (WebCore::ContextMenu::ContextMenu): Empty constructor.
        (WebCore::ContextMenu::setItems): Sets the items in the menu.
        (WebCore::ContextMenu::items): Returns the items in the menu.
        (WebCore::ContextMenu::itemAtIndex):
        (WebCore::itemWithActionInMenu): Returns the item with the correct action, recursively descending
            into submenus.
        (WebCore::ContextMenu::itemWithAction): Calls through to itemWithActionInMenu.
        * platform/ContextMenu.h: Added a new set of functions and member variables that are defined for
            CROSS_PLATFORM_CONTEXT_MENUS.
        (WebCore::ContextMenu::appendItem): Appends an item to the menu.
        * platform/ContextMenuItem.cpp: Added.
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::setSubMenu):
        * platform/ContextMenuItem.h:
        (WebCore::ContextMenuItem::type): Returns the type.
        (WebCore::ContextMenuItem::setType): Sets the type.
        (WebCore::ContextMenuItem::action): Returns the action.
        (WebCore::ContextMenuItem::setAction): Sets the action.
        (WebCore::ContextMenuItem::title): Returns the title.
        (WebCore::ContextMenuItem::setTitle): Sets the title.
        (WebCore::ContextMenuItem::checked): Returns whether or not the menu item is checked.
        (WebCore::ContextMenuItem::setChecked): Sets whether ot not the menu item is checked.
        (WebCore::ContextMenuItem::enabled): Returns whether or not the menu item is enabled.
        (WebCore::ContextMenuItem::setEnabled): Sets whether or not the menu item is enabled.
        (WebCore::ContextMenuItem::submenu): Returns the submenu.
        * platform/PlatformMenuDescription.h: Remove the idea if a PlatformMenuDescription if 
            CROSS_PLATFORM_CONTEXT_MENUS is on.
        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem): Creates a ContextMenuItem from a MENUITEMINFO.
        (WebCore::ContextMenuItem::nativeMenuItem): Creates and returns a MENUITEMINFO.
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::ContextMenu): Creates a ContextMenu from an HMENU.
        (WebCore::ContextMenu::nativeMenu): Creates and returns an HMENU.

2010-12-10  Emil Eklund  <eae@chromium.org>

        Reviewed by Adam Barth.

        Fix crash in ReplaceSelectionCommand::doApply when selection is modified
        during execution.
        https://bugs.webkit.org/show_bug.cgi?id=50840

        Test: editing/execCommand/insertHTML-mutation-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::copyStyleToChildren):
        Replaced raw node pointer with RefPtr.
        
        (WebCore::ReplaceSelectionCommand::doApply):
        Replaced raw node pointer with RefPtr and added null check.

2010-12-10  Emil Eklund  <eae@chromium.org>

        Reviewed by Adam Barth.

        Fix crash in Range::processContents when modified during mutation event.
        https://bugs.webkit.org/show_bug.cgi?id=50710

        Test: fast/dom/Range/range-extractContents.html

        * dom/Range.cpp:
        (WebCore::Range::processContents):
        Replace raw pointers with RefPtrs and add checks.

2010-12-09  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Implement IME support for Mac.
        <rdar://problem/7660589> WebKit2: Implement IME support for Mac.
        https://bugs.webkit.org/show_bug.cgi?id=50788

        * dom/KeyboardEvent.h:
        (WebCore::KeypressCommand::KeypressCommand): Removed ASSERT in constructor,
        since it is now used for more than one command.

2010-12-10  Jessie Berlin  <jberlin@apple.com>

        Windows build fix. Unreviewed.

        * WebCore.vcproj/WebCore.vcproj:
        Remove duplicate </File> tag.

2010-12-09  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Adam Barth.

        TextResourceDecoder::checkForHeadCharset can look way past the limit.
        https://bugs.webkit.org/show_bug.cgi?id=47397

        Replaced charset detection algorithm with real parser.
        Added tests for parser bugs mentioned in the thread for this bug report.
        Converted hixie's encoding parsing tests to a layout test.

        Tests: fast/encoding/bracket-in-script.html
               fast/encoding/bracket-in-tag.html
               fast/encoding/escaped-bracket.html
               fast/encoding/meta-in-body.html
               fast/encoding/meta-in-script.html
               fast/encoding/meta-in-title.html
               fast/encoding/mismatched-end-tag.html
               fast/encoding/namespace-meta.html
               fast/encoding/not-http-equiv-content.html
               fast/encoding/parser-tests.html
               fast/encoding/quotes-in-title.html
               fast/encoding/tag-name-digit.html
               http/tests/misc/charset-sniffer-end-sniffing.html

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLMetaCharsetParser.cpp: Added.
        (WebCore::HTMLMetaCharsetParser::HTMLMetaCharsetParser):
        (WebCore::HTMLMetaCharsetParser::~HTMLMetaCharsetParser):
        (WebCore::HTMLMetaCharsetParser::extractCharset):
        (WebCore::HTMLMetaCharsetParser::processMeta):
        (WebCore::HTMLMetaCharsetParser::checkForMetaCharset):
        * html/parser/HTMLMetaCharsetParser.h: Added.
        (WebCore::HTMLMetaCharsetParser::create):
        (WebCore::HTMLMetaCharsetParser::encoding):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        (WebCore::TextResourceDecoder::checkForMetaCharset):
        * loader/TextResourceDecoder.h:

2010-12-10 Nate Chapin  <japhet@chromium.org>

        Reviewed by Antti Koivisto.

        Merge Loader and Request. Currently, Loader is a singleton attached
        to MemoryCache. Our goal is to remove knowledge of the loading process
        from MemoryCache, so we should attach Loader to CachedResourceLoader instead.
        Once Loader is moved off of MemoryCache, there's no reason it needs to be a singleton,
        which removes the main reason for Request existing as a separate class (to store per-request
        state that Loader couldn't).

        Loader will be given a more descriptive name in a later patch.

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

        Refactor only, no new tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * loader/FrameLoader.cpp:
        * loader/Request.cpp:
        * loader/Request.h:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::setAutoLoadImages):
        (WebCore::CachedResourceLoader::load):
        (WebCore::CachedResourceLoader::loadDone): Was setLoadInProgress(false),
            plus other CachedResourceLoader cleanup that had been handled in Loader.
        (WebCore::CachedResourceLoader::cancelRequests): Moved from Loader.
        (WebCore::CachedResourceLoader::requestCount):
        * loader/cache/CachedResourceLoader.h:
        (WebCore::CachedResourceLoader::loadFinishing): Was setLoadInProgress(true)
        * loader/cache/MemoryCache.h:
        * loader/loader.cpp:
        (WebCore::Loader::Loader):
        (WebCore::Loader::~Loader):
        (WebCore::Loader::load):
        (WebCore::Loader::willSendRequest):
        (WebCore::Loader::didFinishLoading):
        (WebCore::Loader::didFail):
        (WebCore::Loader::didReceiveResponse):
        (WebCore::Loader::didReceiveData):
        (WebCore::Loader::didReceiveCachedMetadata):
        * loader/loader.h:
        (WebCore::Loader::cachedResourceLoader):

2010-12-10  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed, rolling out r73703.
        http://trac.webkit.org/changeset/73703
        https://bugs.webkit.org/show_bug.cgi?id=49658

        This patch is causing crashes on the GTK+ bots.

        * platform/ContextMenuItem.h:
        (WebCore::PlatformMenuItemDescription::PlatformMenuItemDescription):
        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::appendItem):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::createNativeMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):

2010-12-08  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Adler.

        fast/canvas/canvas-getImageData-negative-source.html fails on Mac
        https://bugs.webkit.org/show_bug.cgi?id=47901

        Test: fast/canvas/canvas-getImageData-rounding.html
        
        static_cast<unsigned> is generally not what we want in
        convertLogicalToDevice. It produces inconsistent results when compiling
        for 32-bit vs. 64-bit, and in any case we weren't getting correct
        rounding behavior for source rectangles (e.g. we should get a source rect
        of width 2 if the source X is 0.9 and the source width is 0.2, but we
        were getting only one of width 1).

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::convertLogicalToDevice):
        (WebCore::HTMLCanvasElement::convertToValidDeviceSize):
        * html/HTMLCanvasElement.h:

2010-12-10  Hironori Bono  <hbono@chromium.org>

        Reviewed by Ojan Vafai.

        [Chromium] Use libjpeg-turbo instead of libjpeg
        https://bugs.webkit.org/show_bug.cgi?id=50054

        This change replaces the hard-coded path to the GYP files of the JPEG
        library with a 'libjpeg_gyp_path' variable, which is added by Chromium
        r68453. (When building WebKit Chromium, this change sets its value to
        '<(chromium_src_dir)/third_party/libjpeg/libjpeg.gyp' to avoid changing
        the current behavior.)

        No new tests since this does not change the code at all.

        * WebCore.gyp/WebCore.gyp:

2010-12-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Got rid of the NonZeroBeginTimeFlag. Functionality is now hidden inside
        the implementation.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setAnimationOnLayer):
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (hasNonZeroBeginTimeFlag):
        (setNonZeroBeginTimeFlag):
        (PlatformCAAnimation::PlatformCAAnimation):
        (PlatformCAAnimation::setBeginTime):

2010-12-10  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: eliminate SourceFrameDelegate by passing scripts to SourceFrame constructor.
        https://bugs.webkit.org/show_bug.cgi?id=50679

        * inspector/front-end/Script.js:
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        (WebInspector.SourceFrame.prototype._breakpointAdded):
        (WebInspector.SourceFrame.prototype._doEditLine):
        (WebInspector.SourceFrame.prototype._commitEditLine):
        (WebInspector.SourceFrame.prototype._breakpoints):
        (WebInspector.SourceFrame.prototype._sourceIDForLine):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):

2010-12-10  Andreas Kling  <kling@webkit.org>

        Reviewed by Eric Seidel.

        Don't do GraphicsContext save/restore just to preserve the CompositeOperator
        https://bugs.webkit.org/show_bug.cgi?id=50070

        Add GraphicsContext::compositeOperation() so we don't have to do a full
        save/restore if the only context-tainting call is setCompositeOperation().

        GraphicsContext::setCompositeOperation() now stores the op in its state
        and calls a port-specific setPlatformCompositeOperation().

        No new tests, this is an optimization.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::compositeOperation):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/Image.cpp:
        (WebCore::Image::fillWithSolidColor):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::WebCoreCompositeToSkiaComposite):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::setPlatformCompositeOperation):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2010-12-10  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        GraphicsContext: Merge m_common and m_data
        https://bugs.webkit.org/show_bug.cgi?id=49914

        Move data members from GraphicsContextPrivate into GraphicsContext. So GraphicsContextPlatform.h
        and m_common became unnecessary. They are removed.
        Add two methods to GraphicsContext: platformInit() and platformDestroy(), which
        make the constructor of GraphicsContext clearer.
        Besides add a getter to the private GraphicsContext::m_state member, because some inline
        functions in cairo need it.

        No new test is needed, because this is a refactoring.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (WebCore::GraphicsContext::setStrokeThickness):
        (WebCore::GraphicsContext::setStrokeStyle):
        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::getShadow):
        (WebCore::GraphicsContext::strokeThickness):
        (WebCore::GraphicsContext::strokeStyle):
        (WebCore::GraphicsContext::strokeColor):
        (WebCore::GraphicsContext::strokeColorSpace):
        (WebCore::GraphicsContext::fillRule):
        (WebCore::GraphicsContext::setFillRule):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::fillColor):
        (WebCore::GraphicsContext::fillColorSpace):
        (WebCore::GraphicsContext::setShouldAntialias):
        (WebCore::GraphicsContext::shouldAntialias):
        (WebCore::GraphicsContext::state):
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        (WebCore::GraphicsContext::fillGradient):
        (WebCore::GraphicsContext::strokeGradient):
        (WebCore::GraphicsContext::fillPattern):
        (WebCore::GraphicsContext::strokePattern):
        (WebCore::GraphicsContext::setShadowsIgnoreTransforms):
        (WebCore::GraphicsContext::updatingControlTints):
        (WebCore::GraphicsContext::setUpdatingControlTints):
        (WebCore::GraphicsContext::setPaintingDisabled):
        (WebCore::GraphicsContext::paintingDisabled):
        (WebCore::GraphicsContext::textDrawingMode):
        (WebCore::GraphicsContext::setTextDrawingMode):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsContextPrivate.h: Removed.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::setPlatformFill):
        (WebCore::setPlatformStroke):
        (WebCore::drawPathShadow):
        (WebCore::fillCurrentCairoPath):
        (WebCore::strokeCurrentCairoPath):
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::getAlpha):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):

2010-12-10  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: introduce a pair of set/remove methods for each breakpoint type.
        https://bugs.webkit.org/show_bug.cgi?id=50809

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setEventListenerBreakpoint):
        (WebCore::InspectorController::removeEventListenerBreakpoint):
        (WebCore::InspectorController::hasEventListenerBreakpoint):
        (WebCore::InspectorController::setXHRBreakpoint):
        (WebCore::InspectorController::removeXHRBreakpoint):
        (WebCore::InspectorController::hasXHRBreakpoint):
        (WebCore::InspectorController::clearNativeBreakpoints):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMAgent::shouldBreakOnNodeInsertion):
        (WebCore::InspectorDOMAgent::shouldBreakOnNodeRemoval):
        (WebCore::InspectorDOMAgent::shouldBreakOnAttributeModification):
        (WebCore::InspectorDOMAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.NativeBreakpoint):
        (WebInspector.DOMBreakpoint):
        (WebInspector.EventListenerBreakpoint):
        (WebInspector.XHRBreakpoint):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype._nativeBreakpointHit):
        * inspector/front-end/DebuggerModel.js:
        (WebInspector.DebuggerModel.prototype.debuggerPaused):

2010-12-10  Adam Roben  <aroben@apple.com>

        Windows production build fix after r72555

        * WebCore.vcproj/WebCoreGeneratedCommon.vsprops: Use
        "$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win" to find the
        .vsprops files, rather than $(WebKitLibrariesDir).

2010-12-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Second attempt to fix the build with Qt 4.6 broken in 73710.

        * platform/network/qt/QtNAMThreadSafeProxy.cpp:
        (WebCore::QtNetworkReplyThreadSafeProxy::QtNetworkReplyThreadSafeProxy):
        (WebCore::QtNetworkReplyThreadSafeProxy::localCustomRequest):
        * platform/network/qt/QtNAMThreadSafeProxy.h:

2010-12-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Fix the build with Qt 4.6 broken in 73710.

        * platform/network/qt/QtNAMThreadSafeProxy.cpp:
        (WebCore::QtNetworkReplyThreadSafeProxy::QtNetworkReplyThreadSafeProxy):
        * platform/network/qt/QtNAMThreadSafeProxy.h:

2010-12-10  Emil Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Change EventHandler::dispatchMouseEvent code to use DOM traversal instead of render tree traversal
        https://bugs.webkit.org/show_bug.cgi?id=49982

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent):
        Walk up DOM/hosted tree rather than render tree.

2010-12-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Support a QNetworkAccessManager affined to a different thread.
        https://bugs.webkit.org/show_bug.cgi?id=50080

        This patch introduce thread safe proxy classes for QNetworkAccessManager
        and QNetworkReply.
        If run in the same thread, these objects will forward the calls with
        Qt::DirectConnection bindings, while in the other case they will use
        Qt::QueuedConnection to carry requests accross threads.

        This patch basically:
        - Makes sure that all access goes through these objects
        - Reorders signal connections to make sure we are connected when the
          signal comes
        - Makes sure that no QObject in the WebCore thread is a child of the
          reply which might be in a different thread.
        - Forward the data directly in QByteArrays in signals instead of collecting
          the data when the signal is handled.

        New test: tst_QWebPage::networkAccessManagerOnDifferentThread

        * WebCore.pro:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::commitLoad):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::FormDataIODevice):
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::~QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::setLoadMode):
        (WebCore::QNetworkReplyHandler::abort):
        (WebCore::QNetworkReplyHandler::release):
        (WebCore::ignoreHttpError):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::sendQueuedItems):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/QtNAMThreadSafeProxy.cpp: Added.
        * platform/network/qt/QtNAMThreadSafeProxy.h: Added.
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::networkAccessManager):
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):

2010-12-09  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Refactor QNetworkReplyHandler::finish() to prevent crashes.
        https://bugs.webkit.org/show_bug.cgi?id=50761

        This patch change the order to check if m_reply is null instead,
        explicitly deleting the reply before calling start() for a redirect,
        or after calling didFinishLoading()/didFail() in other cases.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):

2010-12-09  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make sure we send the response before any data.
        https://bugs.webkit.org/show_bug.cgi?id=50760

        This patch make sure the data available flag is set before
        we call sendResponseIfNeeded.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::resetState):
        * platform/network/qt/QNetworkReplyHandler.h:

2010-12-10  Koan-Sin Tan  <koansin.tan@gmail.com>

        Reviewed by Dan Bernstein.

        Bopomofo should be part of CJK Ideographs in WebCore/platform/graphics/Font.cpp
        https://bugs.webkit.org/show_bug.cgi?id=50668

        No new tests. Note that, as said in the bug report discussion,
        I did have a test case for the bug. However, to show the test 
        case you need some "broken" Microsoft copyrighted fonts, such
        as DFKai-SB.

        * platform/graphics/Font.cpp:
        (WebCore::Font::isCJKIdeograph):

2010-12-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Simplify context-menu handling code
        https://bugs.webkit.org/show_bug.cgi?id=49658

        * platform/ContextMenuItem.h:
        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::appendItem):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::setEnabled):

2010-12-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] un-needed methods
        https://bugs.webkit.org/show_bug.cgi?id=50805

        No new tests, code cleanup only.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-12-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] data: source could also support non-base64 encoded URIs
        https://bugs.webkit.org/show_bug.cgi?id=30007

        Removed our ancient implementation of dataurisrc. We should now
        use the one in gst-plugins-bad which is more mature.

        * GNUmakefile.am:
        * platform/graphics/gstreamer/DataSourceGStreamer.cpp: Removed.
        * platform/graphics/gstreamer/DataSourceGStreamer.h: Removed.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::doGstInit):

2010-12-10  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] Fix crashes in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=49976

        The m_methods hashmap of QtInstance contains InternalFunctions
        whose depend on the current RuntimeObject. When we recreate the
        RuntimeObject, we should also reset this hashmap.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::newRuntimeObject):

2010-12-10  François Sausset  <sausset@gmail.com>

        Reviewed by Eric Seidel.

        MathML: update baselinePosition() call in RenderMathMLBlock.cpp 
        https://bugs.webkit.org/show_bug.cgi?id=50540

        The call of baselinePosition() is outdated: new arguments added.

        * mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paint):

2010-12-10  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Numeric keys are floats.
        https://bugs.webkit.org/show_bug.cgi?id=50674

        Use floating point to represent numeric keys,
        add version meta data to the SQLite db,
        and migrate object stores that use integers.

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/v8/custom/V8IDBKeyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::createTables):
        (WebCore::migrateDatabase):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::IDBKey):
        (WebCore::IDBKey::fromQuery):
        (WebCore::IDBKey::bind):
        (WebCore::IDBKey::bindWithNulls):
        * storage/IDBKey.h:
        (WebCore::IDBKey::create):
        (WebCore::IDBKey::number):

2010-12-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] style="font-family: courier" makes text disappear
        https://bugs.webkit.org/show_bug.cgi?id=47452

        Don't ever use fonts that do not have any of the three charmaps that
        Fontconfig supports (Unicode, Apple Roman and Symbol). If we select
        a font that doesn't have one of these charmaps, use the next font in
        the list.

        Test: platform/gtk/fonts/font-with-no-valid-encoding.html

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::createFontPlatformData): Check whether the
        font we selected has a valid Fontconfig charmap.
        * platform/graphics/freetype/FontPlatformData.h: Added new method definition.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::hasCompatibleCharmap): Added this method which
        verifies that a font has a valid Fontconfig charmap.

2010-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        Make DOM Mutation Events Asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=46936

        Implemented DOM mutations events as scoped events. A scoped event is an event whose
        dispatch is done via ScopedEventQueue. The behavior of the queue is controlled by
        EventQueueScope objects (RAII idiom), which increments and decrements the scoping level
        on its constructor and destructor respectively.

        When the scoping level is 0 (initial level), scoped events are dispatched as soon as
        they are enqueued and act like synchronous events. When the scoping level is greater than 0,
        however, events are queued in ScopedEventQueue and their dispatches are delayed until
        the scoping level goes back to 0 (by the destruction of EventQueueScope).

        DOMSubtreeModified, DOMNodeInserted, DOMNodeRemoved, DOMNodeRemovedFromDocument,
        DOMNodeInsertedIntoDocument, DOMFocusIn, DOMFocusOut, focusin, and focusout are treated as
        scoped events, and a scope object is instantiated in EditCommand::apply to delay dispatches
        of the events until the completion of each call of EditCommand::doApply.

        Test: fast/events/mutation/execCommands.html

        * Android.mk: Added ScopedEventQueue.cpp.
        * CMakeLists.txt: Ditto.
        * WebCore.pro: Ditto.
        * GNUmakefile.am: Added ScopedEventQueue.cpp and ScopedEventQueue.h.
        * WebCore.gypi:  Ditto.
        * WebCore.vcproj/project.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents): Calls dispatchScopedEvent.
        (WebCore::dispatchChildRemovalEvents): Ditto.
        * dom/DOMAllInOne.cpp: Added ScopedEventQueue.cpp.
        * dom/Element.cpp:
        (WebCore::Element::dispatchAttrRemovalEvent): Ditto. 
        (WebCore::Element::dispatchAttrAdditionEvent): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::dispatchScopedEvent): Added.
        (WebCore::Node::dispatchSubtreeModifiedEvent): Calls dispatchScopedEvent.
        * dom/Node.h:
        * dom/ScopedEventQueue.cpp: Added.
        (WebCore::ScopedEventQueue::initialize): Added.
        (WebCore::ScopedEventQueue::enqueueEvent): Added.
        (WebCore::ScopedEventQueue::dispatchAllEvents): Added.
        (WebCore::ScopedEventQueue::dispatchEvent): Added.
        (WebCore::ScopedEventQueue::instance): Added.
        (WebCore::ScopedEventQueue::incrementScopingLevel): Added.
        (WebCore::ScopedEventQueue::decrementScopingLevel): Added.
        * dom/ScopedEventQueue.h: Added.
        (WebCore::ScopedEventQueue::~ScopedEventQueue): Added.
        (WebCore::ScopedEventQueue::ScopedEventQueue): Added.
        (WebCore::EventQueueScope::EventQueueScope): Added.
        (WebCore::EventQueueScope::~EventQueueScope): Added.
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply): Instantiates EventQueueScope.

2010-12-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73684.
        http://trac.webkit.org/changeset/73684
        https://bugs.webkit.org/show_bug.cgi?id=50801

        "missing bug number" (Requested by rniwa on #webkit).

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/DOMAllInOne.cpp:
        * dom/Element.cpp:
        (WebCore::Element::dispatchAttrRemovalEvent):
        (WebCore::Element::dispatchAttrAdditionEvent):
        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchUIEvent):
        * dom/Node.h:
        * dom/ScopedEventQueue.cpp: Removed.
        * dom/ScopedEventQueue.h: Removed.
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply):

2010-12-09  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] enable orientation flag when QtMobility available
        https://bugs.webkit.org/show_bug.cgi?id=50781

        When QtMobility available, enable orientation flag by default.

        * features.pri:

2010-12-09  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        Improve validation API support of <object> and <keygen>
        https://bugs.webkit.org/show_bug.cgi?id=50663

        Adds validation API to HTMLObjectElement class.
        Makes HTMLKeygenElement::willValidate() return false.

        Test: fast/forms/setCustomValidity-existence.html

        * html/HTMLKeygenElement.h:
        (WebCore::HTMLKeygenElement::willValidate): Added.
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::validationMessage): Added.
        (WebCore::HTMLObjectElement::checkValidity): Added.
        (WebCore::HTMLObjectElement::setCustomValidity): Added.
        * html/HTMLObjectElement.idl: Added validation API properties.

2010-12-09  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Reviewed by Kent Tamura.

        Make sure a non-zero value is used for tile-width to avoid a crash
        https://bugs.webkit.org/show_bug.cgi?id=50341

        The scaled tile width can be very small at times (e.g. with 'style: font 1
        required'). So use a minimum width of 1 instead of using 0 (which leads to a
        crash).

        Tests: fast/dom/HTMLProgressElement/progress-element-with-style-crash.html

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintProgressBar):

2010-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        Implemented DOM mutations events as scoped events. A scoped event is an event whose
        dispatch is done via ScopedEventQueue. The behavior of the queue is controlled by
        EventQueueScope objects (RAII idiom), which increments and decrements the scoping level
        on its constructor and destructor respectively.

        When the scoping level is 0 (initial level), scoped events are dispatched as soon as
        they are enqueued and act like synchronous events. When the scoping level is greater than 0,
        however, events are queued in ScopedEventQueue and their dispatches are delayed until
        the scoping level goes back to 0 (by the destruction of EventQueueScope).

        DOMSubtreeModified, DOMNodeInserted, DOMNodeRemoved, DOMNodeRemovedFromDocument,
        DOMNodeInsertedIntoDocument, DOMFocusIn, DOMFocusOut, focusin, and focusout are treated as
        scoped events, and a scope object is instantiated in EditCommand::apply to delay dispatches
        of the events until the completion of each call of EditCommand::doApply.

        Test: fast/events/mutation/execCommands.html

        * Android.mk: Added ScopedEventQueue.cpp.
        * CMakeLists.txt: Ditto.
        * WebCore.pro: Ditto.
        * GNUmakefile.am: Added ScopedEventQueue.cpp and ScopedEventQueue.h.
        * WebCore.gypi:  Ditto.
        * WebCore.vcproj/project.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents): Calls dispatchScopedEvent.
        (WebCore::dispatchChildRemovalEvents): Ditto.
        * dom/DOMAllInOne.cpp: Added ScopedEventQueue.cpp.
        * dom/Element.cpp:
        (WebCore::Element::dispatchAttrRemovalEvent): Ditto. 
        (WebCore::Element::dispatchAttrAdditionEvent): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::dispatchScopedEvent): Added.
        (WebCore::Node::dispatchSubtreeModifiedEvent): Calls dispatchScopedEvent.
        * dom/Node.h:
        * dom/ScopedEventQueue.cpp: Added.
        (WebCore::ScopedEventQueue::initialize): Added.
        (WebCore::ScopedEventQueue::enqueueEvent): Added.
        (WebCore::ScopedEventQueue::dispatchAllEvents): Added.
        (WebCore::ScopedEventQueue::dispatchEvent): Added.
        (WebCore::ScopedEventQueue::instance): Added.
        (WebCore::ScopedEventQueue::incrementScopingLevel): Added.
        (WebCore::ScopedEventQueue::decrementScopingLevel): Added.
        * dom/ScopedEventQueue.h: Added.
        (WebCore::ScopedEventQueue::~ScopedEventQueue): Added.
        (WebCore::ScopedEventQueue::ScopedEventQueue): Added.
        (WebCore::EventQueueScope::EventQueueScope): Added.
        (WebCore::EventQueueScope::~EventQueueScope): Added.
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::apply): Instantiates EventQueueScope.

2010-12-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Fix scrolling with mouse wheel in WebKit2 views.  Once
        we coalesce wheel events, we can re-enable this.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scroll):

2010-12-09  Abhishek Arya  <inferno@chromium.org>

        Reviewed by James Robinson.

        For details element, ensure that if we ended up being inline that we set out replaced
        flag so that we are treated like an inline block.
        https://bugs.webkit.org/show_bug.cgi?id=50671

        Test: fast/html/details-element-render-inline-crash.html

        * rendering/RenderDetails.cpp:
        (WebCore::RenderDetails::styleDidChange): setReplaced to true if we are set as inline.
        * rendering/RenderDetails.h: function definition.

2010-12-09  Jasmin Lapalme  <jlapalme@druide.com>

        Reviewed by Alexey Proskuryakov.

        Fix a faulty conversion from UTF-8 to UTF-16 in WebCore during an XSLT transformation.
        https://bugs.webkit.org/show_bug.cgi?id=50708

        Test: fast/xsl/utf8-chunks.xml

        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::writeToVector): now converts and returns the correct byte count when the end of the chunk is in the middle of a multibyte UTF-8 character.

2010-12-09  Vincent Scheib  <scheib@chromium.org>

        Reviewed by James Robinson.

        Clip update rectangle for Texture::updateSubRect to texture size
        https://bugs.webkit.org/show_bug.cgi?id=49929

        Test: fast/canvas/canvas-largedraws.html

        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::updateSubRect):

2010-12-09  Kenneth Russell  <kbr@google.com>

        Unreviewed. Another speculative Gtk build fix after r73669. Add
        needed derived sources to GNUmakefile.am.

        * GNUmakefile.am:

2010-12-09  Kenneth Russell  <kbr@google.com>

        Unreviewed. Speculative Gtk build fix after
        https://bugs.webkit.org/show_bug.cgi?id=36512 / r73669. Process
        all of the WebGL classes' IDL files.

        * CMakeLists.txt:

2010-12-09  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Expose constructor functions for instanceof checks of WebGL objects
        https://bugs.webkit.org/show_bug.cgi?id=36512

        Test: fast/canvas/webgl/instanceof-test.html

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webGLActiveInfoEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLBufferEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLFramebufferEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLProgramEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLRenderbufferEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLShaderEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLTextureEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLUniformLocationEnabled):
        * html/canvas/WebGLActiveInfo.idl: Remove OmitConstructor.
        * html/canvas/WebGLBuffer.idl: Ditto.
        * html/canvas/WebGLFramebuffer.idl: Ditto.
        * html/canvas/WebGLProgram.idl: Ditto.
        * html/canvas/WebGLRenderbuffer.idl: Ditto.
        * html/canvas/WebGLShader.idl: Ditto.
        * html/canvas/WebGLTexture.idl: Ditto.
        * html/canvas/WebGLUniformLocation.idl: Ditto.
        * page/DOMWindow.idl: Expose constructors for WebGL objects in DOMWindow.

2010-12-09  Timothy Hatcher  <timothy@apple.com>

        Export Color::white and Color::transparent.

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:

2010-12-09  Sam Weinig  <sam@webkit.org>

        Fix failing Mac tests.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::scroll): Don't smooth scroll if the default
        AppleScrollAnimationEnabled is false.

2010-12-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Compositor needs to manage its VRAM use
        https://bugs.webkit.org/show_bug.cgi?id=49629

        This adds a basic texture manager to the Chromium compositor to limit the amount of VRAM
        used by compositor textures and switches ContentLayerChromium, ImageLayerChromium, and
        RenderSurfaceChromium to use managed LayerTexture.  The other *LayerChromium classes (Canvas,
        Video, and WebGL) and the root layer are still unmanaged.

        The TextureManager works by providing tokens to callers that want to use a managed texture.
        The token can be used to request a texture, see if the previously requested texture is still
        available, and to protect/unprotect textures when they cannot be collected.  Whenever a
        texture is created the manager attempts to free up the least recently used textures until the
        total memory use is below the provided threshhold.  If the manager cannot satisfy the memory
        limit it will not return any new textures until some old textures are released.

        A LayerTexture wraps a TextureManager token, size, and format.  A LayerChromium can check if a
        previously requested texture is still available for use and reserve the LayerTexture's underlying
        storage between the updateContentsIfDirty() and the draw() call.

        Also changes LayerChromium from having separate contentsDirty()/updateContents() calls to a single
        updateContentsIfDirty().

        Tests: platform/chromium/compositing/lots-of-img-layers-with-opacity.html
               platform/chromium/compositing/lots-of-img-layers.html

        * WebCore.gypi:
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::cleanupResources):
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::updateTextureRect):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::updateContentsIfDirty):
        (WebCore::LayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::useShader):
        (WebCore::LayerRendererChromium::prepareToDrawLayers):
        (WebCore::LayerRendererChromium::updateRootLayerTextureRect):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::getFramebufferPixels):
        (WebCore::LayerRendererChromium::createLayerTexture):
        (WebCore::LayerRendererChromium::deleteLayerTexture):
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::setScissorToRect):
        (WebCore::LayerRendererChromium::setDrawViewportRect):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::renderSurfaceSharedValues):
        (WebCore::LayerRendererChromium::textureManager):
        * platform/graphics/chromium/LayerTexture.cpp: Added.
        (WebCore::LayerTexture::LayerTexture):
        (WebCore::LayerTexture::~LayerTexture):
        (WebCore::LayerTexture::isValid):
        (WebCore::LayerTexture::reserve):
        (WebCore::LayerTexture::unreserve):
        (WebCore::LayerTexture::bindTexture):
        (WebCore::LayerTexture::framebufferTexture2D):
        * platform/graphics/chromium/LayerTexture.h: Added.
        (WebCore::LayerTexture::create):
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/PluginLayerChromium.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::SharedValues::SharedValues):
        (WebCore::RenderSurfaceChromium::SharedValues::~SharedValues):
        (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
        (WebCore::RenderSurfaceChromium::cleanupResources):
        (WebCore::RenderSurfaceChromium::prepareContentsTexture):
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::SharedValues::shaderProgram):
        (WebCore::RenderSurfaceChromium::SharedValues::shaderSamplerLocation):
        (WebCore::RenderSurfaceChromium::SharedValues::shaderMatrixLocation):
        (WebCore::RenderSurfaceChromium::SharedValues::shaderAlphaLocation):
        (WebCore::RenderSurfaceChromium::SharedValues::initialized):
        * platform/graphics/chromium/TextureManager.cpp: Added.
        (WebCore::memoryUseBytes):
        (WebCore::TextureManager::TextureManager):
        (WebCore::TextureManager::getToken):
        (WebCore::TextureManager::releaseToken):
        (WebCore::TextureManager::hasTexture):
        (WebCore::TextureManager::protectTexture):
        (WebCore::TextureManager::unprotectTexture):
        (WebCore::TextureManager::reduceMemoryToLimit):
        (WebCore::TextureManager::addTexture):
        (WebCore::TextureManager::removeTexture):
        (WebCore::TextureManager::requestTexture):
        * platform/graphics/chromium/TextureManager.h: Added.
        (WebCore::TextureManager::create):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/VideoLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/WebGLLayerChromium.h:

2010-12-09  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Rework my recent setLocation refactoring to use DOMWindow instead of Frame.
        It's difficult to make correct security decisions based on Frame since a
        Frame can navigate to a new document.

        Fixes some test failures that I somehow missed before the last check-in.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::crossDomainAccessErrorMessage): Call to the
        shell DOMWindow; not sure this one matters, but it's closer to the old
        code before my last patch. Also pass the DOMWindow rather than the
        frame to crossDomainAccessErrorMessage.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation): Pass DOMWindow rather than Frame
        to the DOMWindow::setLocation function.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setLocation): Take DOMWindow rather than Frame.
        (WebCore::DOMWindow::crossDomainAccessErrorMessage): Ditto.

        * page/DOMWindow.h: Update new functions to take DOMWindow rather
        than Frame.

2010-12-09  Sam Weinig  <sam@webkit.org>

        Try and fix the mac build.

        * WebCore.exp.in:

2010-12-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Removed an unused variable.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights): Removed parentLineHeight.

2010-12-09  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        Move DOMWindow::setLocation logic into DOMWindow class and out of JavaScript binding
        https://bugs.webkit.org/show_bug.cgi?id=50640

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::printErrorMessageForFrame): Removed body; just call through to
        DOMWindow::printErrorMessage.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::crossDomainAccessErrorMessage): Removed body;
        just call through to DOMWindow::crossDomainAccessErrorMessage.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation): Changed terminology to use activeFrame and
        firstFrame, rather than the older lexicalFrame and dynamicFrame. Removed most
        of the body and moved it into DOMWindow::setLocation.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setLocation): Added. Does all the same work that
        JSDOMWindow::setLocation used to do, but in a way that's not specific
        to JavaScript.
        (WebCore::DOMWindow::printErrorMessage): Added.
        (WebCore::DOMWindow::crossDomainAccessErrorMessage): Added.

        * page/DOMWindow.h: Added setLocation, printErrorMessage, and
        crossDomainAccessErrorMessage.

2010-12-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        WebKit2 needs smooth scrolling support on the mac
        <rdar://problem/8219402>

        * WebCore.xcodeproj/project.pbxproj: Change ScrollAnimatorMac.cpp to ScrollAnimatorMac.mm.
        * platform/mac/ScrollAnimatorMac.cpp: Removed.
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm: Copied from platform/mac/ScrollAnimatorMac.cpp.
        (-[ScrollAnimationHelperDelegate initWithScrollAnimator:WebCore::]):
        (-[ScrollAnimationHelperDelegate bounds]):
        (-[ScrollAnimationHelperDelegate _immediateScrollToPoint:]):
        (-[ScrollAnimationHelperDelegate convertSizeToBase:]):
        (-[ScrollAnimationHelperDelegate convertSizeFromBase:]):
        (-[ScrollAnimationHelperDelegate superview]):
        (-[ScrollAnimationHelperDelegate documentView]):
        (-[ScrollAnimationHelperDelegate window]):
        (-[ScrollAnimationHelperDelegate _recursiveRecomputeToolTips]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::scroll):
        (WebCore::ScrollAnimatorMac::setScrollPositionAndStopAnimation):
        (WebCore::ScrollAnimatorMac::currentPosition):
        (WebCore::ScrollAnimatorMac::immediateScrollToPoint):
        Add implementation of ScrollAnimator for the Mac.

2010-12-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8613779> and https://bugs.webkit.org/show_bug.cgi?id=50777
        WebKit2 ContextMenuClient support

        Export some symbols and headers needed by WebKit2 Mac:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2010-12-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73635.
        http://trac.webkit.org/changeset/73635
        https://bugs.webkit.org/show_bug.cgi?id=50778

        'Side-effects on 3 css tests needs closer review' (Requested
        by mwenge on #webkit).

        * platform/graphics/qt/ImageQt.cpp:
        (loadResourcePixmap):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::paintSearchField):
        (WebCore::RenderThemeQt::adjustSearchFieldStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeQt::paintSearchFieldCancelButton):
        * platform/qt/RenderThemeQt.h:

2010-12-09  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Search input field doesn't have cancel button

        Add a cancel button to the search field and make it customizable
        by the client. For now, use the close dialog button associated
        with the application's style as the default.

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

        * platform/graphics/qt/ImageQt.cpp:
        (loadResourcePixmap):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::paintSearchField):
        (WebCore::RenderThemeQt::adjustSearchFieldStyle):
        (WebCore::RenderThemeQt::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeQt::convertToPaintingRect):
        (WebCore::RenderThemeQt::paintSearchFieldCancelButton):
        * platform/qt/RenderThemeQt.h:

2010-12-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        Spatial Navigation: Crash when handling iframe of size 0.
        https://bugs.webkit.org/show_bug.cgi?id=50730

        if we have a frame of size 0, we would get into infinite loop and eventually crash. The reason is
        that when the algorithm sees a starting rect of size 0, it assumes that there is no focused node,
        thus restarts itself. The solution is to avoid considering iframes with size 0 for the spatial
        navigation algorithm.

        Test: fast/spatial-navigation/snav-hidden-iframe-zero-size.html

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfNeeded):

2010-12-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73616.
        http://trac.webkit.org/changeset/73616
        https://bugs.webkit.org/show_bug.cgi?id=50772

        Breaks chromium win build (Requested by hwennborg on #webkit).

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/v8/custom/V8IDBKeyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::createTables):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::IDBKey):
        (WebCore::IDBKey::fromQuery):
        (WebCore::IDBKey::bind):
        (WebCore::IDBKey::bindWithNulls):
        * storage/IDBKey.h:
        (WebCore::IDBKey::create):
        (WebCore::IDBKey::number):

2010-12-09  Antonio Gomes  <agomes@rim.com>

        Rubber stamped by by Gustavo Noronha Silva.

        Buildfix for GTK+ with building with -no-video.

        paintStockIcon static function was implemented under the ENABLE(VIDEO) guard
        but used from outside the guard. See RenderThemeGtk::paintSearchFieldResultsDecoration()
        and RenderThemeGtk::paintSearchFieldCancelButton() methods.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::getMediaElementFromRenderObject):

2010-12-07  Antonio Gomes  <agomes@rim.com>

        Reviewed by Daniel Bates.

        Spatial Navigation: code clean up
        https://bugs.webkit.org/show_bug.cgi?id=50666

        Patch unifies two FocusCandidate constructors, making caller sites
        simpler. Now the special handling HTMLAreaElement gets is done within
        the non default constructor (i.e. FocusCanditate(Node*, FocusDirection)).

        No new tests needed.

        * page/FocusController.cpp:
        (WebCore::FocusController::findFocusCandidateInContainer):
        * page/SpatialNavigation.cpp:
        (WebCore::FocusCandidate::FocusCandidate):

2010-12-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] disable fullscreen on MacOS Tiger and Leopard
        https://bugs.webkit.org/show_bug.cgi?id=50748

        Don't support fullscreen video on Tiger and Leopard, just like the
        QTKit player.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::supportsFullscreen):

2010-12-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Support the Mozilla-style Fullscreen Javascript API
        https://bugs.webkit.org/show_bug.cgi?id=50572

        * GNUmakefile.am: enable the Javascript Fullscreen API feature if
        it's been requested at configure time.

2010-12-09  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Check the return value of ImageBuffer::create()
        to avoid crash when ImageBuffer::create() fails.
        https://bugs.webkit.org/show_bug.cgi?id=50631

        No new test because it relies on the platform implementation
        of ImageBuffer. It is hard to make ImageBuffer::create() fail
        in most ports.

        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern):

2010-12-09  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Implement "Use Selection for Find" in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=50737
        <rdar://problem/8564881>

        Implement a TakeFindStringFromSelection editor command. This is
        used solely to implement the "Use Selection for Find" menu command
        on Mac, and is not made available to script. On WebKit2, it is
        very convenient to reuse the editing machinery since this command
        is very similar to Copy.

        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeTakeFindStringFromSelection): Call to a mac-only Editor function.
        (WebCore::enabledTakeFindStringFromSelection): Check using Editor::canCopyExcludingStandaloneImage
        (WebCore::createCommandMap): Add "TakeFindStringFromSelection" command.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::canCopyExcludingStandaloneImages): Helper function; we can't use Editor::canCopy
        since it would make no sense to enable "Use Selection for Find" when viewing a standalone image
        document.
        (WebCore::Editor::takeFindStringFromSelection): Implement by copying the selected text
        to the special Find pasteboard.

2010-12-09  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dimitri Glazkov.

        As part of r73559, I added the referenceNode check to validate whether the root
        node of the iterator matches the node which is getting moved to other document.
        referenceNode is initialized to root, however can get moved using previousNode
        and nextNode methods, so it is required to use root directly.
        https://bugs.webkit.org/show_bug.cgi?id=50764

        Test: fast/dom/node-iterator-reference-node-moved-crash.html

        * dom/Document.cpp:
        (WebCore::Document::moveNodeIteratorsToNewDocument): change referenceNode to root.

2010-12-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Provide a generic way to store shadowParent on a Node.
        https://bugs.webkit.org/show_bug.cgi?id=50184

        This patch makes TreeShared::m_parent act as either parentNode() or
        shadowHost() for Node. The distinction is controlled by IsShadowRootFlag.

        Refactoring, so no new tests. See performance result testing in bug.

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Changed to use parentOrHostNode().
        * dom/Node.cpp:
        (WebCore::Node::shadowHost): Added.
        (WebCore::Node::setShadowHost): Added.
        (WebCore::Node::isContentEditable): Changed to use parentOrHostNode().
        (WebCore::Node::isContentRichlyEditable): Ditto.
        (WebCore::Node::nextRenderer): Ditto.
        (WebCore::Node::virtualComputedStyle): Ditto.
        (WebCore::Node::canStartSelection): Ditto.
        (WebCore::Node::shadowTreeRootNode): Changed to use parentNodeGuaranteedHostFree().
        (WebCore::Node::getEventAncestors): Ditto.
        (WebCore::Node::defaultEventHandler): Changed to use parentOrHostNode(). 
        * dom/Node.h: Added an extra flag and adjusted bit counts.
        (WebCore::Node::isShadowNode): Made non-virtual, switched to use flag.
        (WebCore::Node::parentNode): Made to recognize flag.
        (WebCore::Node::parentOrHostNode): Changed to use straight parent() and made const.
        (WebCore::Node::parentNodeGuaranteedHostFree): Added.
        (WebCore::Node::shadowParentNode): Made non-virtual and const.
        * editing/TextIterator.cpp:
        (WebCore::depthCrossingShadowBoundaries): Changed to use parentOrHostNode();
        (WebCore::nextInPreOrderCrossingShadowBoundaries): Ditto.
        (WebCore::previousInPostOrderCrossingShadowBoundaries):  Ditto.
        (WebCore::setUpFullyClippedStack): Ditto.
        (WebCore::TextIterator::advance): Ditto.
        (WebCore::SimplifiedBackwardsTextIterator::advance): Ditto.
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::anchorNode): Changed to use parentNodeGuaranteedHostFree().
        (WebCore::DOMSelection::focusNode): Ditto.
        (WebCore::DOMSelection::baseNode): Ditto.
        (WebCore::DOMSelection::extentNode): Ditto.
        (WebCore::DOMSelection::getRangeAt): Ditto.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlShadowRootElement::MediaControlShadowRootElement):
            Changed to setShadowHost().
        (WebCore::MediaControlShadowRootElement::updateStyle): Changed to use shadowHost().
        (WebCore::MediaControlShadowRootElement::detach): Added an override to
            explicitly set shadowHost to 0. Otherwise, the element will leak.
        * rendering/MediaControlElements.h: Added detach def, removed members that are
            no longer needed.
        * rendering/RenderSVGShadowTreeRootContainer.cpp:
        (WebCore::RenderSVGShadowTreeRootContainer::~RenderSVGShadowTreeRootContainer):
            Added explicit clearing of shadowHost to avoid leaking and crashes,
            because SVG shadow DOM can be dynamically attached/detached, producing
            stale nodes in over/out event handling.
        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::defaultEventHandler): Changed to use shadowHost().
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
            Added explicit clearing of shadowHost and explicit destruction to
            avoid out-of-order removal of children.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::nodePosition): Simplified code.
        * rendering/SVGShadowTreeElements.cpp:
        (WebCore::SVGShadowTreeRootElement::SVGShadowTreeRootElement): Added
            setting of shadowHost.
        (WebCore::SVGShadowTreeRootElement::attachElement): Changed to use shadowHost().
        (WebCore::SVGShadowTreeRootElement::clearShadowHost): Added.
        * rendering/SVGShadowTreeElements.h: Added def, removed members that are
             no longer needed.
        * rendering/ShadowElement.cpp:
        (WebCore::ShadowBlockElement::initAsPart): Changed to use shadowHost().
        * rendering/ShadowElement.h: Removed members that are no longer needed.
        (WebCore::ShadowElement::ShadowElement): Added setting of shadowHost.
        (WebCore::ShadowElement::detach): Added.
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::TextControlInnerElement): Added setting
            of shadowHost.
        (WebCore::TextControlInnerElement::attachInnerElement): Changed to use
            isShadowNode().
        (WebCore::TextControlInnerElement::detach): Added.
        * rendering/TextControlInnerElements.h: Removed members that are no
            longer needed.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::ownerSVGElement): Simplified code.
        (WebCore::SVGElement::viewportElement): Ditto.
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::computeCTM): Ditto.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title): Ditto.
        * svg/SVGUseElement.cpp:
        (WebCore::ShadowTreeUpdateBlocker::while): Ditto.

2010-12-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/7660733> and https://bugs.webkit.org/show_bug.cgi?id=50191
        WebKit2 Authentication Support

        * WebCore.exp.in:

2010-12-09  Peter Beverloo  <peter@lvp-media.com>

        Reviewed by Maciej Stachowiak.

        Default CSS definitions for the figure and figcaption elements.

        Tests: fast/html/figcaption-element.html
               fast/html/figure-element.html

        * css/html.css:
        (figure): The default figure-style equals a blockquote
        (figcaption): A non-sectioning block-level element

2010-12-09  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Console records for failed XHRs should contain call stack and request method
        https://bugs.webkit.org/show_bug.cgi?id=50390

        When inspector front-end is open we capture call stack at the place where request is sent and
        pass the stack along with other request data. There is a new type of console messages which
        is NetworkErrorMessageType, all messages of that type will have requestId field initialized
        with the corresponding network request identifier so that later on when we need to display
        that message in the front-end we could pull request data from the Network panel using
        this identifier. If there are no data for given requestId message formatting falls back to
        the old implementation which lacks such things as call stack, request method and exact
        source location.

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::identifierForInitialRequest):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.updateMessageRepeatCount):
        (WebInspector.ConsoleMessage):
        (WebInspector.ConsoleMessage.prototype._formatMessage):
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleMessage.prototype.toString):
        (WebInspector.ConsoleMessage.prototype.isEqual):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.identifierForInitialRequest):
        * inspector/front-end/inspector.js:
        (WebInspector.addConsoleMessage):
        * page/Console.h:

2010-12-09  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        Implement "required" attribute for select tags
        https://bugs.webkit.org/show_bug.cgi?id=50380

        Test: fast/forms/select-live-pseudo-selectors.html
              platform/mac/fast/objc/dom-html-select-live-pseudo-selectors.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::updateValidity): Added. It's a pure virtual function which is prepared so that HTMLSelectElement::updateValidity() calls HTMLSelectElement::setNeedsValidityCheck().
        (WebCore::SelectElement::parseMultipleAttribute): Added calling updateValidity().
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::deselectItems): Added calling setNeedsValidityCheck() to enable validity check after changing. No tests for this change since this function is not exposed to JavaScript or any web interface.
        (WebCore::HTMLSelectElement::setSelectedIndex): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::setSelectedIndexByUser): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::valueMissing): Added valueMissing() to check if selecting an invalid or placeholder label option when a valid required attribute is specified.
        (WebCore::HTMLSelectElement::listBoxSelectItem): Added calling setNeedsValidityCheck(). No tests for this change since it is not called yet. Look at the bug 36177 and the changeset 56180.
        (WebCore::HTMLSelectElement::add): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::remove): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::restoreFormControlState): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::parseMappedAttribute): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::selectAll): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::reset): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::updateListBoxSelection): Added calling setNeedsValidityCheck(). Skipped adding tests for this change as too complicated..
        (WebCore::HTMLSelectElement::setLength): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::isRequiredFormControl): Check if required or not.
        (WebCore::HTMLSelectElement::hasPlaceholderLabelOption): Added.
        (WebCore::HTMLSelectElement::updateValidity): Added. It calls setNeedsValidityCheck().
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::isOptionalFormControl): Check if not required.
        * html/HTMLSelectElement.idl: Added a required attribute to select elements..
        * html/ValidityState.cpp:
        (WebCore::ValidityState::valueMissing): Added valueMissing check for select elements into the global checker, ValidityState::valueMissing().
        * wml/WMLSelectElement.h:
        (WebCore::WMLSelectElement::updateValidity): Added. It does nothing.

2010-12-07  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        IndexedDB returns the wrong exceptions
        https://bugs.webkit.org/show_bug.cgi?id=50632

        IndexedDB exceptions need to have an offset so they can
        be distinguished from DOM exceptions.  We also need to
        add strings for the various exceptions.  Lastly, make
        IDBDatabaseException use the common exception base class.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * dom/ExceptionCode.cpp:
        (WebCore::getExceptionCodeDescription):
        * dom/ExceptionCode.h:
        * storage/IDBDatabaseError.h:
        (WebCore::IDBDatabaseError::code):
        * storage/IDBDatabaseException.h:
        (WebCore::IDBDatabaseException::create):
        (WebCore::IDBDatabaseException::ErrorCodeToExceptionCode):
        (WebCore::IDBDatabaseException::IDBDatabaseException):
        * storage/IDBDatabaseException.idl:

2010-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Build fix for GTK+3. Use functions added for GTK+ 2.24 to get the
        GDK window size.

        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_realize):

2010-12-09  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        Use BUILDING_WEBKIT like other ports
        https://bugs.webkit.org/show_bug.cgi?id=50713

        * WebCore.pro: Change BUILD_WEBKIT to BUILDING_WEBKIT

2010-12-08  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler.

        Replace getAttribute().isNull() with fastHasAttribute()
        https://bugs.webkit.org/show_bug.cgi?id=50719

        Covered by existing tests.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::reset):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::rendererIsNeeded):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::itemAfter):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::formNoValidate):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::noValidate):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultChecked):
        (WebCore::HTMLInputElement::multiple):
        (WebCore::HTMLInputElement::webkitdirectory):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::defaultSelected):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::asyncAttributeValue):
        (WebCore::HTMLScriptElement::deferAttributeValue):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::allowsMultipleFiles):
        (WebCore::RenderFileUploadControl::allowsDirectoryUpload):

2010-12-08  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        Full page size flash plugins do not show in all situations
        https://bugs.webkit.org/show_bug.cgi?id=47742

        This patch moves the plugin widget size allocation after the
        NPP_SetWindow is called with the effect that the resize of Flash
        content no longer result in grey flash. This seems logical since the
        widget tree cannot be fully constructed before the plugin receives
        the new container window.

        Test: manual-tests/plugins/gtk-windowed-grey-glitch.html

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):

2010-12-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Fix regression from xji's wheel scroll patch.  The vertical case is looking at the horizontal
        maximum position and not the vertical position.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):

2010-12-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Need a way to get a WKBundleFrameRef from JS HTMLIFrameElement
        https://bugs.webkit.org/show_bug.cgi?id=50726

        * WebCore.xcodeproj/project.pbxproj: Expose HTMLIFrameElement.h.

2010-12-08  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Add getter and setters for acceleratesRendering flag on layers
        https://bugs.webkit.org/show_bug.cgi?id=50717

        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        Plumbed through acceleratedRendering flag.

2010-12-07  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        WebGLUniformLocation objects must be invalidated during linkProgram
        https://bugs.webkit.org/show_bug.cgi?id=37118

        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::WebGLProgram): Initialize link count to 0.
        (WebCore::WebGLProgram::cacheActiveAttribLocations): Don't check link status through gl call; use the cached status instead.
        * html/canvas/WebGLProgram.h:
        (WebCore::WebGLProgram::getLinkCount): Get link count.
        (WebCore::WebGLProgram::increaseLinkCount): Increase link count by 1.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniform): Fix a bug where wrong error is generated.
        (WebCore::WebGLRenderingContext::linkProgram): call increaseLinkCount after linkProgram.
        * html/canvas/WebGLUniformLocation.cpp:
        (WebCore::WebGLUniformLocation::WebGLUniformLocation): Set program's link count upon creation.
        (WebCore::WebGLUniformLocation::program): Return null if count doesn't match the program's.
        (WebCore::WebGLUniformLocation::location): Return -1 if count doesn't match the program's.
        * html/canvas/WebGLUniformLocation.h:

2010-12-08  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=50725
        <rdar://problem/8694972> REGRESSION (r72052): "Search" placeholder in MobileMe mail is positioned too high

        Test: fast/forms/placeholder-position.html

        Since we center the inner text element for single line text controls, 
        we should ask the subclass to give us the y offset instead of trying to calculate it in the RenderTextControl class.

        * rendering/RenderTextControl.cpp: (WebCore::RenderTextControl::paintPlaceholder):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp: (WebCore::RenderTextControlMultiLine::textBlockInsetTop):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp: (WebCore::RenderTextControlSingleLine::textBlockInsetTop):
        * rendering/RenderTextControlSingleLine.h:

2010-12-08  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add web audio files to mac port Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=50721

        No new tests since audio API is not yet implemented.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webkitAudioContext):

2010-12-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Yensign hack should work with Shift_JIS and ISO-2022-JP encodings.
        https://bugs.webkit.org/show_bug.cgi?id=49714

        IE chooses a font which shows a yensign for 0x5c code point for a page
        encoded in x-mac-japanese, ISO-2022-JP, EUC-JP, Shift_JIS, Shift_JIS_X0213-2000,
        x-sjis, and Windows-31J.
        We have emulated this behavior by replacing 0x5c with 0xa5 for EUC-JP and
        Shift_JIS_X0213-2000. This change adds other encodings above.

        Also, we move the HashSet initialization for isJapanese() and
        backslashAsCurrencySymbol() to TextEncodingRegistry.cpp because of
        ease of making them multi-thread safe.

        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::isJapanese): Just calls isJapaneseEncoding().
        (WebCore::TextEncoding::backslashAsCurrencySymbol): Uses shouldShowBackslashAsCurrencySymbolIn().
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::addEncodingName): Moved from TextEncoding.cpp, and stop using atomicCanonicalTextEncodingName().
        (WebCore::buildQuirksSets): Added. Initializes HashSets for isJapaneseEncoding() and shouldShowBackslashAsCurrencySymbolIn().
        (WebCore::isJapaneseEncoding):
        (WebCore::shouldShowBackslashAsCurrencySymbolIn):
        (WebCore::extendTextCodecMaps): Add a call to buildQuirksSets().
        * platform/text/TextEncodingRegistry.h:

2010-12-08  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        Reflected unsigned attributes should be in the range [0, 2^31).
        https://bugs.webkit.org/show_bug.cgi?id=50472

        HTML5 says that unsigned reflected attributes should be in the range
        [0, 2^31). When a value isn't in this range, a default value (or 0)
        should be returned instead. Update the JS bindings code generator to
        ensure 0 is returned when a content attribute value falls outside of
        this range.

        Tests: bindings/scripts/test/TestObj.idl
               fast/html/marquee-element.html

        * bindings/scripts/CodeGeneratorJS.pm: Return the maximum of 0 and the
        content attribute as a 32-bit signed int when converting a native value
        to an unsigned JS value.
        * bindings/scripts/test/TestObj.idl: Add a reflected unsigned attribute
        to test code generation.
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Update test results.
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.

2010-12-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use gtk_icon_set_render_icon() to render icons in RenderThemeGtk
        https://bugs.webkit.org/show_bug.cgi?id=50623

        We don't need to cache the icons since the will be cached by GTK+,
        and they will be rendered using the state and text direction.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintStockIcon):
        (WebCore::getMediaButtonIconSize):
        (WebCore::RenderThemeGtk::initMediaColors):
        (WebCore::RenderThemeGtk::initMediaButtons):
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::RenderThemeGtk::~RenderThemeGtk):
        (WebCore::RenderThemeGtk::gtkIconState):
        (WebCore::RenderThemeGtk::adjustSearchFieldResultsDecorationStyle):
        (WebCore::centerRectVerticallyInParentInputElement):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeGtk::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        (WebCore::RenderThemeGtk::platformColorsDidChange):
        (WebCore::RenderThemeGtk::paintMediaButton):
        (WebCore::RenderThemeGtk::paintMediaFullscreenButton):
        (WebCore::RenderThemeGtk::paintMediaMuteButton):
        (WebCore::RenderThemeGtk::paintMediaPlayButton):
        (WebCore::RenderThemeGtk::paintMediaSeekBackButton):
        (WebCore::RenderThemeGtk::paintMediaSeekForwardButton):
        * platform/gtk/RenderThemeGtk.h:

2010-12-08  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dimitri Glazkov.

        Detach node iterator and move to new document when node gets moved.
        https://bugs.webkit.org/show_bug.cgi?id=50697

        Test: fast/dom/node-iterator-document-moved-crash.html

        * dom/Document.cpp: Method that takes a node and new document as argument.
        It detaches the node iterators belonging to the current document and attaches
        them to the new document.
        (WebCore::Document::moveNodeIteratorsToNewDocument):
        * dom/Document.h: Function definition.
        * dom/Node.cpp: When node is moved to another document, call the function to move
        the iterators appropriately.
        (WebCore::Node::setDocument):

2010-12-08  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Text is blurry on a large composited layer with an odd center x/y coordinate
        https://bugs.webkit.org/show_bug.cgi?id=50702

        Compute the center of a large layer using floats instead of ints to avoid roundoff errors.

        Test: compositing/text-on-large-layer.html

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

2010-12-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dan Bernstein.

        REGRESSION: LayoutTests/editing/selection/caret-rtl-2.html fails
        https://bugs.webkit.org/show_bug.cgi?id=33503

        The bug was caused by Font::offsetForPosition's not taking into account the containing block's text direction.
        When RTL text appears in a LTR block, the offset at the beginning of RTL text is on the left of RTL text,
        and the offset at the end of RTL text is on the right of RTL text. For example, if we had RTL text CBA,
        then the correspondance between letters and offsets in logical order are: A -> 0, B -> 1, and C -> 2.

        Case 1. CBA appears in a RTL block:
          In this case, clicking on the visual left of CBA puts the caret naturally at Position("CBA", 2).
          Clicking on the visual right of CBA puts the caret at Position("CBA", 0) as expected.
        Case 2. CBA appears in a LTR block:
          Because the containing block flows from left to right, by convention, Position("CBA", 2") corresponds
          to the visual right of CBA, and Position("CBA", 0) corresponds to the visual left of CBA.
          Therefore, clicking on the visual left of CBA should put the caret at Position("CBA", 0),
          and clicking on the visual right should put it at Position("CBA", 2).

        The bug was caused by WebKit's not considering case 2. The same bug also exist for LTR text in a RTL block.
        Fixed the bug by taking care of the case 2 in InlineTextBox::offsetForPosition.

        Tests: editing/selection/caret-ltr-2-left.html
               editing/selection/caret-ltr-2.html
               editing/selection/caret-ltr-right.html
               editing/selection/caret-ltr.html
               editing/selection/caret-rtl-2-left.html
               editing/selection/caret-rtl-right.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::offsetForPosition):

2010-12-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Fix some clang++ warnings (one of which was an actual bug)
        https://bugs.webkit.org/show_bug.cgi?id=50700

        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):
        Add parentheses to silent a clang warning.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::needsKeyboardEventDisambiguationQuirks):
        Fix || vs && precedence bug uncovered by clang.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshape):
        Use an early return to avoid a warning.

2010-12-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Added copy constructors and casting operators to go between 
        TransformationMatrix and CATransform3D. Also added a copy
        constructor to go from CGAffineTransform to TransformationMatrix.
        Used these new methods to clean up platform CA code. This will
        make it easier to port to Windows.

        I also fixed a couple of build issues found when trying out a 
        Windows build.

        This is a resubmission of changesets r73477 and r73483 with a 
        fix for the SL build. The failure was because TransformationMatrix
        included QuartzCore/CATransform3D.h which brought in some system
        libraries, including Quickdraw, which has a definition for
        'Cursor' which clashed with WebCore's 'Cursor' class. So I had
        to qualify its use in WebChromeClient.cpp in WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateContentsTransform):
        (WebCore::GraphicsLayerCA::ensureCloneLayers):
        (WebCore::GraphicsLayerCA::fetchCloneLayers):
        * platform/graphics/ca/TransformationMatrixCA.cpp: Copied from WebCore/platform/graphics/ca/TransformationMatrixCA.cpp.
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::setFromValue):
        (PlatformCAAnimation::setToValue):
        (PlatformCAAnimation::setValues):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::transform):
        (PlatformCALayer::setTransform):
        (PlatformCALayer::sublayerTransform):
        (PlatformCALayer::setSublayerTransform):
        (PlatformCALayer::contentsTransform):
        (PlatformCALayer::setContentsTransform):
        * platform/graphics/cg/TransformationMatrixCG.cpp:
        (WebCore::TransformationMatrix::TransformationMatrix):
        * platform/graphics/transforms/TransformationMatrix.h:

2010-12-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Layering Violation in ContextMenu - member variable of type HitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=50586
        
        ContextMenu had a layering violation by having a member variable of type HitTestResult, because
        classes in WebCore/platform can't know about classes in WebCore.
        
        This patch moves the HitTestResult and all functions that use it out of ContextMenu into ContextMenuController.
        All of the functions that dealt with populating the ContextMenu are now in ContextMenuController, and this
        allowed us to delete the ContextMenu file, putting all of the cross-platform code that used to be it
        in ContextMenuController, and the rest of the code is in the platform-specific files.

        No change in behavior, no new tests.

        * Android.mk: Removed ContextMenu.cpp.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::ContextMenuController): Initialized m_hitTestResult to an empty HitTestResult.
        (WebCore::ContextMenuController::handleContextMenuEvent): Call populate on the ContextMenuController instead
            of the ContextMenu.
        (WebCore::ContextMenuController::createContextMenu): Fix some indination, and store the HitTestResult in a member
            variable.
        (WebCore::ContextMenuController::showContextMenu): Call addInspectElementItem on the ContextMenuController.
        (WebCore::ContextMenuController::contextMenuItemSelected): Use m_hitTestResult whenever we need a HitTestResult.
        (WebCore::ContextMenuController::appendItem): Validates the item for its state, and then appends it to the parent menu.
            This allowed us to move checkOrEnableIfNeeded from ContextMenu.

        These functions were all moved from ContextMenu, and changed slightly to fit in ContextMenuController.
        All calls to ContextMenu::appendItem were changed to ContextMenuController::appendItem, which takes care
        of validating the menu.
        (WebCore::separatorItem): Moved from ContextMenu.
        (WebCore::ContextMenuController::createAndAppendFontSubMenu): Ditto.
        (WebCore::ContextMenuController::createAndAppendSpellingAndGrammarSubMenu): Ditto.
        (WebCore::ContextMenuController::createAndAppendSpeechSubMenu): Ditto.
        (WebCore::ContextMenuController::createAndAppendWritingDirectionSubMenu): Ditto.
        (WebCore::ContextMenuController::createAndAppendTextDirectionSubMenu): Ditto.
        (WebCore::ContextMenuController::createAndAppendSubstitutionsSubMenu): Ditto.
        (WebCore::ContextMenuController::createAndAppendTransformationsSubMenu): Ditto.
        (WebCore::selectionContainsPossibleWord): Ditto.
        (WebCore::ContextMenuController::populate): Ditto.
        (WebCore::ContextMenuController::addInspectElementItem): Ditto.
        (WebCore::ContextMenuController::checkOrEnableIfNeeded): Ditto.
        
        * page/ContextMenuController.h:
        (WebCore::ContextMenuController::hitTestResult): Returns the HitTestResult of the current ContextMenu.

        * platform/ContextMenu.cpp: Removed.
        * platform/ContextMenu.h:
        * platform/efl/ContextMenuEfl.cpp:
        (WebCore::ContextMenu::ContextMenu): Removed m_hitTestResult from the constructor.
        (WebCore::ContextMenu::appendItem): Removed the call to checkOrEnableIfNeeded.
        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::ContextMenu): Removed m_hitTestResult from the constructor.
        (WebCore::ContextMenu::appendItem): Ditto.
        * platform/haiku/ContextMenuHaiku.cpp:
        (WebCore::ContextMenu::ContextMenu): Removed m_hitTestResult from the constructor.
        (WebCore::ContextMenu::appendItem): Ditto.
        (WebCore::ContextMenu::insertItem): Ditto.
        * platform/mac/ContextMenuMac.mm:
        (-[WebCoreMenuTarget validateMenuItem:]): Calls checkOrEnableIfNeeded on the controller instead of
            the context menu.
        (WebCore::ContextMenu::ContextMenu): Removed m_hitTestResult from the constructor.
        (WebCore::ContextMenu::appendItem): Removed the call to checkOrEnableIfNeeded.
        (WebCore::ContextMenu::insertItem): Ditto.
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::ContextMenu): Removed m_hitTestResult from the constructor.
        (WebCore::ContextMenu::insertItem): Removed the call to checkOrEnableIfNeeded.
        * platform/wx/ContextMenuWx.cpp:
        (WebCore::ContextMenu::ContextMenu): Removed m_hitTestResult from the constructor.
        (ContextMenu::appendItem): Ditto.

2010-12-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by John Sullivan.

        [GTK] Layering violation in ContextMenuGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=50676

        ContextMenuGtk accesses the page's ContextMenuController, which is a layering
        violation. This was fixed for Mac with change r73469. We make a similar fix here
        by moving the "activated" signal connection to the WebKit layer.

        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::appendItem): Remove access of ContextMenuController. This
        is a layering violation.

2010-12-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Implement WebChromeClient::exceededDatabaseQuota
        https://bugs.webkit.org/show_bug.cgi?id=50656

        * WebCore.exp.in:
        Export the symbol for SecurityOrigin::databaseIdentifier.

2010-12-08  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r73521.
        http://trac.webkit.org/changeset/73521
        https://bugs.webkit.org/show_bug.cgi?id=50640

        It broke 90 layout tests

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::printErrorMessageForFrame):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::crossDomainAccessErrorMessage):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:

2010-12-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

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

        REGRESSION in position of autocomplete popup on RTL page.

        RTL static position computation did not subtract out the width of the enclosing box if the
        immediate parent was a RenderInline.  This bug was exposed by properly changing the RenderView
        to be RTL when the document was RTL.

        Added three new tests in fast/block/positioning.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidth):

2010-12-08  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Fix backward mouse wheeling not working when scroll position is below 0.
        https://bugs.webkit.org/show_bug.cgi?id=50370

        Tests: fast/events/wheelevent-in-horizontal-scrollbar-in-rtl.html
               fast/events/wheelevent-in-vertical-scrollbar-in-rtl.html

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):

2010-12-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix pauseAnimation API to work with shorthand properties
        https://bugs.webkit.org/show_bug.cgi?id=50639
        
        The pause API is always called with a long-hand property, but that
        property may be animating via a shorthand. Detect this, and pause
        such shorthand animations.

        * page/animation/AnimationBase.cpp:
        (WebCore::ShorthandPropertyWrapper::propertyWrappers): Expose the vector
        of wrappers used by a shorthand wrapper.

        (WebCore::gatherEnclosingShorthandProperties): Utility function that walks
        through the shorthand wrappers, keeping track of which can affect the given
        property.
        (WebCore::AnimationBase::animatableShorthandsAffectingProperty): Return a set
        of shorthand properties that can affect the given property.

        * page/animation/AnimationBase.h: New method.
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::pauseTransitionAtTime): If we don't find the
        property itself, check whether it's being animated via shorthands.

2010-12-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/8740920> Gestures: Frame::scalePage() broken by r73885

        Make sure the transform applied to the RenderView for page scaling is incorporated into the
        docTop/Bottom/Left/Right accessors.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::docTop):
        (WebCore::RenderView::docBottom):
        (WebCore::RenderView::docLeft):
        (WebCore::RenderView::docRight):

2010-12-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Protocol cleanup task. Remove WebInspector wrappers
        for TimelineAgent functions.

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

        * inspector/Inspector.idl:
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.timelineProfilerWasStarted):
        (WebInspector.TimelinePanel.prototype.timelineProfilerWasStopped):

2010-12-08  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] media/fullscreen* failing on 64-bits Debug
        https://bugs.webkit.org/show_bug.cgi?id=50394

        Avoid emiting durationchanged in the case where the previous
        duration was 0 because that case is already handled by the
        HTMLMediaElement.

        Test: media/media-fullscreen*.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::durationChanged):

2010-12-07  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        Move DOMWindow::setLocation logic into DOMWindow class and out of JavaScript binding
        https://bugs.webkit.org/show_bug.cgi?id=50640

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::printErrorMessageForFrame): Removed body; just call through to
        DOMWindow::printErrorMessage.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::crossDomainAccessErrorMessage): Removed body;
        just call through to DOMWindow::crossDomainAccessErrorMessage.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation): Changed terminology to use activeFrame and
        firstFrame, rather than the older lexicalFrame and dynamicFrame. Removed most
        of the body and moved it into DOMWindow::setLocation.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setLocation): Added. Does all the same work that
        JSDOMWindow::setLocation used to do, but in a way that's not specific
        to JavaScript.
        (WebCore::DOMWindow::printErrorMessage): Added.
        (WebCore::DOMWindow::crossDomainAccessErrorMessage): Added.

        * page/DOMWindow.h: Added setLocation, printErrorMessage, and
        crossDomainAccessErrorMessage.

2010-12-08  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, rolling out r73494.
        http://trac.webkit.org/changeset/73494
        https://bugs.webkit.org/show_bug.cgi?id=50380

        The tests added are crashing in the debug bots (macn and gtk)

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::deselectItems):
        (WebCore::HTMLSelectElement::setSelectedIndex):
        (WebCore::HTMLSelectElement::setSelectedIndexByUser):
        (WebCore::HTMLSelectElement::listBoxSelectItem):
        (WebCore::HTMLSelectElement::add):
        (WebCore::HTMLSelectElement::remove):
        (WebCore::HTMLSelectElement::restoreFormControlState):
        (WebCore::HTMLSelectElement::parseMappedAttribute):
        (WebCore::HTMLSelectElement::selectAll):
        (WebCore::HTMLSelectElement::reset):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        (WebCore::HTMLSelectElement::setLength):
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::isOptionalFormControl):
        * html/HTMLSelectElement.idl:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::valueMissing):

2010-12-07  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector protocol cleanup task. Remove
        WebInspector wrappers for DOMAgent functions.

        There were a lot of wrappers in WebInspector namespace
        for different WebInspector agents functions. As far as we have a
        generic mechanic for such functions we can remove these
        wrappers and register domAgent instance as a handler for
        DOM domain notifications.

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

        * inspector/Inspector.idl:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMAgent):
        (WebInspector.DOMAgent.prototype.attributesUpdated):
        (WebInspector.DOMAgent.prototype.characterDataModified):
        (WebInspector.DOMAgent.prototype.setDocument):
        (WebInspector.DOMAgent.prototype.setDetachedRoot):
        (WebInspector.DOMAgent.prototype.setChildNodes):
        (WebInspector.DOMAgent.prototype.childNodeCountUpdated):
        (WebInspector.DOMAgent.prototype.childNodeInserted):
        (WebInspector.DOMAgent.prototype.childNodeRemoved):
        (WebInspector.EventListeners.getEventListenersForNodeAsync):
        * inspector/front-end/inspector.js:
        (WebInspector.didCommitLoad):

2010-12-08  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove groupLevel counter from console messages
        https://bugs.webkit.org/show_bug.cgi?id=50672

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::endGroup):
        * inspector/InspectorController.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.createFilterElement):
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype.filter):
        (WebInspector.ConsoleView.prototype.afterShow):
        (WebInspector.ConsoleView.prototype.addMessage):
        (WebInspector.ConsoleView.prototype.updateMessageRepeatCount):
        (WebInspector.ConsoleView.prototype.clearMessages):
        (WebInspector.ConsoleMessage):
        (WebInspector.ConsoleMessage.createTextMessage):
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleMessage.prototype._addMessageHeader):
        (WebInspector.ConsoleMessage.prototype._updateRepeatCount):
        (WebInspector.ConsoleMessage.prototype.toString):
        (WebInspector.ConsoleMessage.prototype.isEqual):
        (WebInspector.ConsoleGroup):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._checkWarning):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._addMessageToSource):
        * inspector/front-end/inspector.js:
        (WebInspector.addConsoleMessage):
        (WebInspector.log.logMessage):
        (WebInspector.log):

2010-12-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: introduce DebuggerModel class representing InspectorDebuggerAgent state.
        https://bugs.webkit.org/show_bug.cgi?id=50567

        Moved debugging-related code from BreakpointManager to DebuggerModel. Moved Breakpoint class to a separate file.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Breakpoint.js: Added.
        (WebInspector.Breakpoint): Moved from BreakpointManager.js.
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager): Remove debugger-related methods.
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype._nativeBreakpointHit):
        (WebInspector.CallStackSidebarPane.prototype._scriptBreakpointHit):
        * inspector/front-end/DebuggerModel.js: Added.
        (WebInspector.DebuggerModel): Moved debugger-related methods from BreakpointManager.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.continueToLine):
        (WebInspector.ScriptsPanel.prototype.editScriptSource.mycallback):
        (WebInspector.ScriptsPanel.prototype.editScriptSource):
        (WebInspector.ScriptsPanel.prototype._debuggerPaused):
        (WebInspector.ScriptsPanel.prototype._debuggerResumed):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        (WebInspector.SourceFrameDelegate.prototype.addBreakpoint):
        (WebInspector.SourceFrameDelegate.prototype.breakpoints):
        (WebInspector.SourceFrameDelegate.prototype.findBreakpoint):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.createJSBreakpointsSidebarPane):
        (WebInspector.restoredBreakpoint):
        (WebInspector.pausedScript):
        (WebInspector.resumedScript):
        (WebInspector.reset):

2010-12-08  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: SourceFrame refactoring.
        https://bugs.webkit.org/show_bug.cgi?id=50223

        SourceFrame should ask BreakpointManager about existing breakpoints instead of maintaining
        it's own storages. Move common code from ScriptView and SourceView to SourceFrame.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.findBreakpoints):
        (WebInspector.BreakpointManager.prototype.findBreakpoint):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.get linesCount):
        (WebInspector.Script.prototype.get source):
        (WebInspector.Script.prototype.set source):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        (WebInspector.ScriptView.prototype._scriptSourceChanged):
        (WebInspector.ScriptFrameDelegateImpl):
        (WebInspector.ScriptFrameDelegateImpl.prototype.canEditScripts):
        (WebInspector.ScriptFrameDelegateImpl.prototype.editLineComplete):
        (WebInspector.ScriptFrameDelegateImpl.prototype.scripts):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame): Add common methods of ScriptView and SourceView.
        (WebInspector.SourceFrameDelegate):
        (WebInspector.SourceFrameDelegate.prototype.canEditScripts):
        (WebInspector.SourceFrameDelegate.prototype.editLineComplete):
        (WebInspector.SourceFrameDelegate.prototype.scripts):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        (WebInspector.SourceView.prototype._contentLoaded):
        (WebInspector.ResourceFrameDelegateImpl):
        (WebInspector.ResourceFrameDelegateImpl.prototype.canEditScripts):
        (WebInspector.ResourceFrameDelegateImpl.prototype.editLineComplete):
        (WebInspector.ResourceFrameDelegateImpl.prototype.scripts):

2010-12-08  Yuta Kitamura  <yutak@chromium.org>

        Unreviewed, rolling out r73492.
        http://trac.webkit.org/changeset/73492
        https://bugs.webkit.org/show_bug.cgi?id=49914

        Caused a lot of pixel test failures and broke Windows build.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::createGraphicsContextPrivate):
        (WebCore::GraphicsContext::destroyGraphicsContextPrivate):
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (WebCore::GraphicsContext::setStrokeThickness):
        (WebCore::GraphicsContext::setStrokeStyle):
        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::getShadow):
        (WebCore::GraphicsContext::strokeThickness):
        (WebCore::GraphicsContext::strokeStyle):
        (WebCore::GraphicsContext::strokeColor):
        (WebCore::GraphicsContext::strokeColorSpace):
        (WebCore::GraphicsContext::fillRule):
        (WebCore::GraphicsContext::setFillRule):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::fillColor):
        (WebCore::GraphicsContext::fillColorSpace):
        (WebCore::GraphicsContext::setShouldAntialias):
        (WebCore::GraphicsContext::shouldAntialias):
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        (WebCore::GraphicsContext::fillGradient):
        (WebCore::GraphicsContext::strokeGradient):
        (WebCore::GraphicsContext::fillPattern):
        (WebCore::GraphicsContext::strokePattern):
        (WebCore::GraphicsContext::setShadowsIgnoreTransforms):
        (WebCore::GraphicsContext::updatingControlTints):
        (WebCore::GraphicsContext::setUpdatingControlTints):
        (WebCore::GraphicsContext::setPaintingDisabled):
        (WebCore::GraphicsContext::paintingDisabled):
        (WebCore::GraphicsContext::textDrawingMode):
        (WebCore::GraphicsContext::setTextDrawingMode):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h: Added.
        (WebCore::GraphicsContextState::GraphicsContextState):
        (WebCore::GraphicsContextPrivate::GraphicsContextPrivate):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::setPlatformFill):
        (WebCore::setPlatformStroke):
        (WebCore::drawPathShadow):
        (WebCore::fillCurrentCairoPath):
        (WebCore::strokeCurrentCairoPath):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::getAlpha):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):

2010-12-08  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        Implement "required" attribute for select tags
        https://bugs.webkit.org/show_bug.cgi?id=50380

        Test: fast/forms/select-live-pseudo-selectors.html
              platform/mac/fast/objc/dom-html-select-live-pseudo-selectors.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::deselectItems): Added calling setNeedsValidityCheck() to enable validity check after changing. No tests for this change since this function is not exposed to JavaScript or any web interface.
        (WebCore::HTMLSelectElement::setSelectedIndex): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::setSelectedIndexByUser): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::valueMissing): Added valueMissing() to check if selecting an invalid or placeholder label option when a valid required attribute is specified.
        (WebCore::HTMLSelectElement::listBoxSelectItem): Added calling setNeedsValidityCheck(). No tests for this change since it is not called yet. Look at the bug 36177 and the changeset 56180.
        (WebCore::HTMLSelectElement::add): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::remove): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::restoreFormControlState): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::parseMappedAttribute): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::selectAll): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::reset): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::updateListBoxSelection): Added calling setNeedsValidityCheck(). Skipped adding tests for this change as too complicated..
        (WebCore::HTMLSelectElement::setLength): Added calling setNeedsValidityCheck().
        (WebCore::HTMLSelectElement::isRequiredFormControl): Check if required or not.
        (WebCore::HTMLSelectElement::hasPlaceholderLabelOption): Added.
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::isOptionalFormControl): Check if not required.
        * html/HTMLSelectElement.idl: Added a required attribute to select elements..
        * html/ValidityState.cpp:
        (WebCore::ValidityState::valueMissing): Added valueMissing check for select elements into the global checker, ValidityState::valueMissing().

2010-12-08  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        GraphicsContext: Merge m_common and m_data
        https://bugs.webkit.org/show_bug.cgi?id=49914

        Move data members from GraphicsContextPrivate into GraphicsContext. So GraphicsContextPlatform.h
        and m_common became unnecessary. They are removed.
        Add two methods to GraphicsContext: platformInit() and platformDestroy(), which
        make the constructor of GraphicsContext clearer.
        Besides add a getter to the private GraphicsContext::m_state member, because some inline
        functions in cairo need it.

        No new test is needed, because this is a refactoring.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (WebCore::GraphicsContext::setStrokeThickness):
        (WebCore::GraphicsContext::setStrokeStyle):
        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::getShadow):
        (WebCore::GraphicsContext::strokeThickness):
        (WebCore::GraphicsContext::strokeStyle):
        (WebCore::GraphicsContext::strokeColor):
        (WebCore::GraphicsContext::strokeColorSpace):
        (WebCore::GraphicsContext::fillRule):
        (WebCore::GraphicsContext::setFillRule):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::fillColor):
        (WebCore::GraphicsContext::fillColorSpace):
        (WebCore::GraphicsContext::setShouldAntialias):
        (WebCore::GraphicsContext::shouldAntialias):
        (WebCore::GraphicsContext::state):
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        (WebCore::GraphicsContext::fillGradient):
        (WebCore::GraphicsContext::strokeGradient):
        (WebCore::GraphicsContext::fillPattern):
        (WebCore::GraphicsContext::strokePattern):
        (WebCore::GraphicsContext::setShadowsIgnoreTransforms):
        (WebCore::GraphicsContext::updatingControlTints):
        (WebCore::GraphicsContext::setUpdatingControlTints):
        (WebCore::GraphicsContext::setPaintingDisabled):
        (WebCore::GraphicsContext::paintingDisabled):
        (WebCore::GraphicsContext::textDrawingMode):
        (WebCore::GraphicsContext::setTextDrawingMode):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsContextPrivate.h: Removed.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::setPlatformFill):
        (WebCore::setPlatformStroke):
        (WebCore::drawPathShadow):
        (WebCore::fillCurrentCairoPath):
        (WebCore::strokeCurrentCairoPath):
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::getAlpha):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContext::platformDestroy):

2010-12-07  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        Port http://trac.webkit.org/changeset/72819/ to v8-backed ports.
        https://bugs.webkit.org/show_bug.cgi?id=50246

        * bindings/v8/V8DOMMap.h:
        (WebCore::AbstractWeakReferenceMap::Visitor::startMap):
        (WebCore::AbstractWeakReferenceMap::Visitor::endMap):
        (WebCore::WeakReferenceMap::visit):
        * bindings/v8/V8GCController.cpp:
        (WebCore::GrouperItem::GrouperItem):
        (WebCore::GrouperItem::groupId):
        (WebCore::makeV8ObjectGroups):
        (WebCore::NodeGrouperVisitor::NodeGrouperVisitor):
        (WebCore::NodeGrouperVisitor::visitDOMWrapper):
        (WebCore::NodeGrouperVisitor::applyGrouping):
        (WebCore::DOMObjectGrouperVisitor::ObjectGrouperVisitor):
        (WebCore::DOMObjectGrouperVisitor::startMap):
        (WebCore::DOMObjectGrouperVisitor::endMap):
        (WebCore::DOMObjectGrouperVisitor::visitDOMWrapper):
        (WebCore::V8GCController::gcPrologue):

2010-12-07  Daniel Bates  <dbates@rim.com>

        Reviewed by Martin Robinson.

        Implement focus ring support for image maps
        https://bugs.webkit.org/show_bug.cgi?id=50371

        Implement GraphicsContext::drawFocusRing(const Path&, ...) so as to support
        drawing a focus ring for image maps.

        Tests: fast/images/imagemap-circle-focus-ring.html
               fast/images/imagemap-polygon-focus-ring.html

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::adjustFocusRingColor): Added.
        (WebCore::adjustFocusRingLineWidth): Added.
        (WebCore::focusRingStrokeStyle): Added.
        (WebCore::GraphicsContext::drawFocusRing): Moved code for determining focus ring- color,
        line width and stroke style into functions adjustFocusRingColor(), adjustFocusRingLineWidth(),
        and focusRingStrokeStyle(), respectively. Implemented GraphicsContext::drawFocusRing(const Path&, ...).

2010-12-07  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] WebKitSoupCache fails to load resources when cache contents are externally removed
        https://bugs.webkit.org/show_bug.cgi?id=50577

        Try to download cached resources again if they are no longer
        accesible by the cache.

        * platform/network/soup/cache/soup-request-http.c:
        (send_async_cb):
        (webkit_soup_request_http_send_async):

2010-12-06  MORITA Hajime  <morrita@google.com>

        Reviewed by Dimitri Glazkov.

        RenderIndicator subclasses should not change the render tree during layout.
        https://bugs.webkit.org/show_bug.cgi?id=50026

        The old code created shadow elements during a layout computation,
        that makes the layout state inconsisntent and cause an assertion failure. 
        This change created shadow elements before the layout to avoid  
        state inconsistencies.
        
        Instead of creating shadows on demand, RenderMeter and
        RenderProgress now create all necessary shadows before layouts,
        and change its visibilities during the layout: Changing
        visibilities doesn't trigger relayout and keep the state
        consistent.
        
        RenderMeter uses new HidablePartElement for shadow elements,
        which can toggle visibiliby between hidden and original value.

        Test: fast/dom/HTMLMeterElement/meter-element-crash.html

        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::attach): Calling updateFromElement()
        * html/HTMLMeterElement.h:
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::attach): Calling updateFromElement()
        * html/HTMLProgressElement.h:
        * rendering/RenderIndicator.cpp:
        * rendering/RenderIndicator.h:
        * rendering/RenderMeter.cpp:
        (WebCore::MeterPartElement::MeterPartElement): Added to hold a restorable visibility.
        (WebCore::MeterPartElement::createForPart):
        (WebCore::MeterPartElement::hide):
        (WebCore::MeterPartElement::restoreVisibility):
        (WebCore::MeterPartElement::updateStyleForPart):
        (WebCore::MeterPartElement::saveVisibility):
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::createPart): Extracted
        (WebCore::RenderMeter::updateFromElement): Had a shadow generation.
        (WebCore::RenderMeter::layoutParts): Removed shadow generation code.
        (WebCore::RenderMeter::shouldHaveParts):
        (WebCore::RenderMeter::valuePartRect): Adopted orientation.
        (WebCore::RenderMeter::orientation): Morphed from isHorizontal()
        (WebCore::RenderMeter::valuePseudoId): Adoptedn orientation
        (WebCore::RenderMeter::barPseudoId): Adopted orientation.
        * rendering/RenderMeter.h:
        (WebCore::RenderMeter::shadowAttached):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updateFromElement): Had a shadow generation.
        (WebCore::RenderProgress::layoutParts):
        * rendering/RenderProgress.h:
        * rendering/ShadowElement.cpp:
        (WebCore::ShadowBlockElement::createForPart): Extracted initAsPart().
        (WebCore::ShadowBlockElement::initAsPart): Extracted from createForPart().
        * rendering/ShadowElement.h:

2010-11-29  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        returning to a POST result within a frame does a GET instead of a POST
        https://bugs.webkit.org/show_bug.cgi?id=10199
        
        FrameLoader::loadURLIntoChildFrame had a check for whether a frame
        had a HistoryItem, and if so used that item's URL. However, that did
        not handle the case where the HistoryItem had FormData and thus was the
        result of a POST request. FrameLoader::navigateToDifferentDocument (now
        renamed to loadDifferentDocumentItem) does all that, so just switch to
        using it instead.
        
        Besides the bug fix, the only difference in behavior is that we use the
        HistoryItem's URL instead of original URL when restoring it in a child
        frame. This seems desirable too (for consistency with other browsers, and
        so that we can avoid form double-submits for forms that that do
        POST-then-redirect), and is tested by
        fast/history/history-back-initial-vs-final-url.html.
        
        Tests: fast/history/history-back-initial-vs-final-url.html
               http/tests/navigation/post-frames-goback1.html
               http/tests/navigation/postredirect-frames-goback1.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame): Switch to using
            loadDifferentDocumentItem. Also cleaned up ordering slightly (if
            on the archive path, there's no need to do any of the other checks).
        (WebCore::FrameLoader::loadDifferentDocumentItem): Renamed from
            navigateToDifferentDocument so that calling it from loadItem and
            loadURLIntoChildFrame flows more easily.
        (WebCore::FrameLoader::loadSameDocumentItem): Similarly, renamed from
            navigateWithinDocument.
        (WebCore::FrameLoader::loadItem): Update callsites to the above methods.
        * loader/FrameLoader.h:

2010-12-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Made tables repaint correctly in all writing modes
        Part of: Make tables work with vertical text
        https://bugs.webkit.org/show_bug.cgi?id=46417

        Tests: fast/repaint/table-writing-modes-h.html
               fast/repaint/table-writing-modes-v.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintObject): Compute the ranges of rows and
        columns to repaint based on the logical extent of the repaint rect.

2010-12-07  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by James Robinson.

        [chromium] compositor lost context recovery fix
        https://bugs.webkit.org/show_bug.cgi?id=50614

        To test, load a page that triggers the compositor, kill the GPU
        process and hover over a link to redraw and thus restart the GPU
        process.  Without this patch it will assert in
        ContentLayerChromium::updateTextureRect; with this patch it will not.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setNeedsDisplay):

2010-12-07  Anders Carlsson  <andersca@apple.com>

        Fix the last clang++ build error.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::animationForKey):
        Cast the returned animation to the correct type.

2010-12-07  Anders Carlsson  <andersca@apple.com>

        Fix some clang++ build errors.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        Remove unused variable.

        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        Fix constness of pointers.

2010-12-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Fix the Color -> CGColorRef conversions for the debug colors
        used for compositing layers.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setBackgroundColor):
        (PlatformCALayer::setBorderColor):

2010-12-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Part of Layering Violation in ContextMenu
        https://bugs.webkit.org/show_bug.cgi?id=50586
        
        ContextMenuMac.mm had a WebCoreMenuTarget class, which was responsible for wrapping
        a ContextMenuItem, and calling through to the ContextMenuController to validate it
        and call a function when it was selected.
        
        It was a layering violation to have this class here, because ContextMenu can't know
        about ContextMenuController.
        
        This patch moves the class that wraps the ContextMenuItems to WebKit/mac/WebHTMLView.mm,
        and sets up the menu targets there.

        No change in behavior, no new tests.

        * WebCore.exp.in: Added function that needs to be exported.
        * platform/mac/ContextMenuMac.mm:
        (WebCore::ContextMenu::ContextMenu): Don't set the sharedMenuTarget anymore.
        (WebCore::ContextMenu::appendItem): Don't call setMenuItemTarget (this is done in WebKit now).
        (WebCore::ContextMenu::insertItem): Ditto.

2010-12-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        -webkit-transition Fails on Multiple text-shadow Shadows
        https://bugs.webkit.org/show_bug.cgi?id=42281
        
        When transitioning multiple shadows, the blend function for
        ShadowData dropped all but the first and last shadow because
        of a failure to append to the end of the list. Fixed.

        Test: transitions/multiple-text-shadow-transition.html

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperShadow::blend):

2010-12-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin.

        CSS animation doesn't work for border-radius
        https://bugs.webkit.org/show_bug.cgi?id=48340
        
        Include CSSPropertyBorderRadius in the list of shorthand
        properties, so that the individual border-radius properties
        get animated.

        Test: transitions/border-radius-transition.html

        * page/animation/AnimationBase.cpp:
        (WebCore::addShorthandProperties):

2010-12-07  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Kent Tamura.

        Implement HTML5 hidden attribute
        https://bugs.webkit.org/show_bug.cgi?id=40511

        Test: fast/html/hidden-attr.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::mapToEntry): Pick up hidden as a global mapped attribute.
        (WebCore::HTMLElement::parseMappedAttribute): Map hidden attribute to display: none.

2010-12-07  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Fix compilation of core web audio files on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50603

        Changed a few constructs using C99 features of math.h to use
        wtf/MathExtras.h instead. Changed inline definitions of a couple of
        const static doubles in classes to out-of-line. Built Chrome with
        web audio enabled on Windows and Mac OS X to test these changes.

        No new tests since audio API is not yet implemented.

        * WebCore.gypi:
        * platform/audio/AudioResampler.cpp:
        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::setLowpassParams):
        (WebCore::Biquad::setHighpassParams):
        (WebCore::Biquad::setLowShelfParams):
        * platform/audio/Cone.cpp:
        (WebCore::ConeEffect::gain):
        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):
        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::interpolateFrequencyComponents):
        (WebCore::FFTFrame::extractAverageGroupDelay):
        (WebCore::FFTFrame::addConstantGroupDelay):
        * platform/audio/HRTFKernel.cpp:
        * platform/audio/HRTFPanner.cpp:
        * webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::readFromBufferWithGrainEnvelope):
        * webaudio/AudioPannerNode.cpp:
        (WebCore::AudioPannerNode::getAzimuthElevation):
        * webaudio/AudioParam.cpp: Added.
        (AudioParam::setValue):
        (AudioParam::smooth):
        * webaudio/AudioParam.h:
        * webaudio/RealtimeAnalyser.cpp:

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

        Reviewed by Martin Robinson.

        [GStreamer] faster elements linking
        https://bugs.webkit.org/show_bug.cgi?id=50067

        Perform less checks during GStreamer elements linking if building
        against GStreamer >= 0.10.30.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::enterFullscreen):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2010-12-07  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] ::buffered() should return multiple ranges in some cases
        https://bugs.webkit.org/show_bug.cgi?id=45101

        Improved the ::buffered() method thanks to the new buffering query
        support that landed in GStreamer 0.10.31. The method now
        queries the media buffered-ranges on the pipeline and queue2
        handles it if it's buffering the media to disk.

        The webkitwebsrc element also gained BYTES duration query
        support. This is needed in the rare cases where uridecodebin
        configures its queue before the HTTP server returns the media
        Content-Length.

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

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::buffered):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):
        (webKitWebSrcQuery): Make webkitwebsrc handle the duration queries
        if it's aware of the media content-length.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMediaSliderTrack): Fix position of
        the second and next buffered ranges.

2010-12-07  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        Spatial navigation not Working for Map and Area Tags
        https://bugs.webkit.org/show_bug.cgi?id=47142

        Give area elements special treatment in spatial navigation algorithm by getting the
        rect of the area from the associated image. Since area elements are likely to overlap
        if they are not rects, or if authors are not careful, we flatten the rect of area elements.

        Tests: fast/spatial-navigation/snav-imagemap-area-not-focusable.html
               fast/spatial-navigation/snav-imagemap-area-without-image.html
               fast/spatial-navigation/snav-imagemap-overlapped-areas.html
               fast/spatial-navigation/snav-imagemap-simple.html

        * page/FocusController.cpp:
        (WebCore::FocusController::findFocusCandidateInContainer):
        (WebCore::FocusController::advanceFocusDirectionallyInContainer):
        (WebCore::FocusController::advanceFocusDirectionally):
        * page/SpatialNavigation.cpp:
        (WebCore::FocusCandidate::FocusCandidate):
        (WebCore::virtualRectForDirection):
        (WebCore::virtualRectForAreaElementAndDirection):
        * page/SpatialNavigation.h:
        (WebCore::FocusCandidate::FocusCandidate):

2010-12-07  Darin Adler  <darin@apple.com>

        Try to fix V8 build.

        * bindings/generic/BindingDOMWindow.h:
        (WebCore::BindingDOMWindow::createWindow): Pass security origin.

2010-12-07  Darin Adler  <darin@apple.com>

        Another build fix.

        * loader/CrossOriginAccessControl.cpp: Added a missing include.

2010-12-07  Darin Adler  <darin@apple.com>

        Try to fix build.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start): Pass security origin.
        (WebCore::PluginView::getURLNotify): Ditto.
        (WebCore::PluginView::getURL): Ditto.
        (WebCore::PluginView::handlePost): Ditto.

2010-12-06  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Pass security origin to make local file decision correctly
        https://bugs.webkit.org/show_bug.cgi?id=48603

        * bindings/generic/BindingDOMWindow.h:
        (WebCore::BindingDOMWindow::createWindow): Pass security origin.
        (WebCore::BindingDOMWindow::open): Ditto.
        * bindings/generic/BindingFrame.h:
        (WebCore::BindingFrame::navigateIfAllowed): Ditto.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation): Pass security origin.
        (WebCore::createWindow): Ditto.
        (WebCore::JSDOMWindow::open): Ditto.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation): Pass security origin.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Pass security origin.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::openInInspectedWindow):
        Pass security origin.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation): Added a security origin
        argument, passed through to urlSelected.
        (WebCore::FrameLoader::urlSelected): Replaced the resource request
        and frame name arguments with a frame load request arguments in one
        overload, and changed the other overload to pass in the current
        frame's document for the security origin.
        (WebCore::FrameLoader::loadFrameRequest): Moved the canDisplay
        check before the referrer computation because it no longer needs
        to look at the referrer. Replaced the call to canDisplay that
        used the target frame's security origin and the call to
        deprecatedCanDisplay with a single call to canDisplay that uses
        the requester security origin.

        * loader/FrameLoader.h: Updated for argument changes above.

        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation): Added
        a security origin.
        (WebCore::ScheduledURLNavigation::fire): Pass the security origin
        in to FrameLoader::changeLocation.
        (WebCore::ScheduledURLNavigation::securityOrigin): Added.
        (WebCore::ScheduledRedirect::ScheduledRedirect): Added a security
        origin argument.
        (WebCore::ScheduledLocationChange::ScheduledLocationChange): Ditto.
        (WebCore::ScheduledRefresh::ScheduledRefresh): Ditto.
        (WebCore::ScheduledRefresh::fire): Pass the security origin in to
        FrameLoader::changeLocation.
        (WebCore::ScheduledFormSubmission::fire): Include the security
        origin when constructing form submission.
        (WebCore::NavigationScheduler::scheduleRedirect): Include the security
        origin when creating the scheduled navigation object.
        (WebCore::NavigationScheduler::scheduleLocationChange): Ditto.
        (WebCore::NavigationScheduler::scheduleRefresh): Ditto.

        * loader/NavigationScheduler.h: Added the security origin argument
        to scheduleLocationChange.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadOrRedirectSubframe): Pass in the security
        origin when calling scheduleLocationChange.
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache): Ditto.

        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow): Pass in the security origin.
        (WebCore::ContextMenuController::contextMenuItemSelected): Ditto.

        * page/FrameLoadRequest.h: Added a security origin called the requester
        to all FrameLoadRequest objects.

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::findInRequest): Added the security origin.

2010-12-07  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: avoid initializing Context on when creating attaching listener to ScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=50627

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::addListener): don't try to collect already parsed scripts if context has
        not been initialized yet.

2010-12-07  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed. Rolling out r73421, because it made transitions/color-transition-all.html flakey.

        * page/animation/AnimationBase.cpp:
        (WebCore::addShorthandProperties):

2010-12-07  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed, rolling out r73392.
        http://trac.webkit.org/changeset/73392
        https://bugs.webkit.org/show_bug.cgi?id=50489

        This commit caused crashes on the GTK+ bots

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::close):
        (WebCore::Document::lastModified):
        (WebCore::Document::finishedParsing):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::updateURLForPushOrReplaceState):
        * dom/Document.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::scriptCharset):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::setFrame):
        * loader/DocumentLoader.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/DocumentWriter.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::writer):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestPreload):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::encodingFromAcceptCharset):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-12-07  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Remove WebKitGenerators
        https://bugs.webkit.org/show_bug.cgi?id=50445

        Move remaining logic into main CMakeLists.txt.

        * CMakeLists.txt:

2010-12-07  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Clear old SVG cursor entry before adding a new one
        https://bugs.webkit.org/show_bug.cgi?id=50549

        Test: svg/css/cursor-replace.svg

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::~SVGCursorElement):
        (WebCore::SVGCursorElement::removeClient):
        (WebCore::SVGCursorElement::removeReferencedElement):
        * svg/SVGCursorElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::setCursorElement):
        (WebCore::SVGElement::cursorElementRemoved):
        (WebCore::SVGElement::setCursorImageValue):
        (WebCore::SVGElement::cursorImageElementRemoved):
        * svg/SVGElement.h:

2010-12-07  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        Let HTMLObjectElement be a form associated element
        https://bugs.webkit.org/show_bug.cgi?id=48821

        Introduces FormAssociatedElement class which would be a super class
        of form assocated elements. Some of member functions and variables of
        HTMLFormControlElement are migrated into this class.
        Following the HTML5 spec, HTMLFormControlElement class and
        HTMLObjectElement class are subclasses of it for now.

        Test: fast/forms/form-collection-elements-order.html

        * Android.mk: Added FormAssociatedElement.cpp
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Added FormAssociatedElement.{cpp,h}
        * WebCore.exp.in: Added the symbol for toHTMLElement(FormAssociatedElement*)
        * WebCore.gypi: Added FormAssociatedElement.{cpp,h}
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/CheckedRadioButtons.h: Fixed class forward declaration order.
        * dom/Document.cpp:
        (WebCore::Document::registerFormElementWithFormAttribute): Modified to
        use FormAssociatedElement instead of HTMLFormControlElement
        (WebCore::Document::unregisterFormElementWithFormAttribute): Ditto.
        (WebCore::Document::resetFormElementsOwner):
        * dom/Document.h: Ditto.
        * html/DOMFormData.cpp: Ditto.
        (WebCore::DOMFormData::DOMFormData):
        * html/FormAssociatedElement.cpp: Copied and renamed from WebCore/html/HTMLFormControlElement.cpp.
        (WebCore::FormAssociatedElement::FormAssociatedElement):
        (WebCore::FormAssociatedElement::~FormAssociatedElement):
        (WebCore::FormAssociatedElement::validity):
        (WebCore::FormAssociatedElement::insertedIntoTree):
        (WebCore::FormAssociatedElement::removedFromTree):
        (WebCore::FormAssociatedElement::removeFromForm):
        (WebCore::FormAssociatedElement::resetFormOwner):
        (WebCore::FormAssociatedElement::formAttributeChanged):
        (WebCore::toHTMLElement):
        * html/FormAssociatedElement.h: Ditto.
        (WebCore::FormAssociatedElement::ref):
        (WebCore::FormAssociatedElement::deref):
        (WebCore::FormAssociatedElement::formDestroyed):
        (WebCore::FormAssociatedElement::setForm):
        * html/HTMLElement.h: Changed the access level of findFormAncestor().
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::item): Modified to use FormAssociatedElement
        instead of HTMLFormControlElement.
        (WebCore::HTMLFormCollection::getNamedFormItem): Ditto.
        (WebCore::HTMLFormCollection::updateNameCache): Ditto.
        * html/HTMLFormControlElement.cpp: Modified regarding with the change of class
        hierarchy.
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::~HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::insertedIntoTree):
        (WebCore::HTMLFormControlElement::removedFromTree):
        (WebCore::HTMLFormControlElement::supportsFocus):
        (WebCore::HTMLFormControlElement::checkValidity):
        (WebCore::HTMLFormControlElement::virtualForm):
        (WebCore::HTMLFormControlElement::isDefaultButtonForForm):
        (WebCore::HTMLFormControlElement::attributeChanged):
        * html/HTMLFormControlElement.h: Ditto.
        (WebCore::HTMLFormControlElement::form):
        (WebCore::HTMLFormControlElement::disabled):
        (WebCore::HTMLFormControlElement::type):
        (WebCore::HTMLFormControlElement::refFormAssociatedElement):
        (WebCore::HTMLFormControlElement::derefFormAssociatedElement):
        * html/HTMLFormElement.cpp: Modified to use FormAssociatedElement
        instead of HTMLFormControlElement.
        (WebCore::HTMLFormElement::submitImplicitly):
        (WebCore::HTMLFormElement::validateInteractively):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::formElementIndexWithFormAttribute):
        (WebCore::HTMLFormElement::formElementIndex):
        (WebCore::HTMLFormElement::registerFormElement):
        (WebCore::HTMLFormElement::removeFormElement):
        (WebCore::HTMLFormElement::defaultButton):
        (WebCore::HTMLFormElement::checkValidity):
        (WebCore::HTMLFormElement::collectUnhandledInvalidControls):
        (WebCore::HTMLFormElement::documentDidBecomeActive):
        * html/HTMLFormElement.h: Ditto.
        (WebCore::HTMLFormElement::associatedElements):
        * html/HTMLInputElement.cpp: Ditto.
        (WebCore::HTMLInputElement::updateCheckedRadioButtons):
        * html/HTMLObjectElement.cpp: Modified regarding with the change of class
        hierarchy.
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::~HTMLObjectElement):
        (WebCore::HTMLObjectElement::create):
        (WebCore::HTMLObjectElement::attributeChanged):
        (WebCore::HTMLObjectElement::insertedIntoTree):
        (WebCore::HTMLObjectElement::removedFromTree):
        (WebCore::HTMLObjectElement::appendFormData):
        (WebCore::HTMLObjectElement::formControlName):
        * html/HTMLObjectElement.h: Ditto.
        (WebCore::HTMLObjectElement::form):
        (WebCore::HTMLObjectElement::isFormControlElement):
        (WebCore::HTMLObjectElement::isEnumeratable):
        (WebCore::HTMLObjectElement::refFormAssociatedElement):
        (WebCore::HTMLObjectElement::derefFormAssociatedElement):
        * html/HTMLTagNames.in: Added constructorNeedsFormElement to object tag.
        * html/ValidationMessage.cpp: Modified to use FormAssociatedElement
        instead of HTMLFormControlElement.
        (WebCore::ValidationMessage::ValidationMessage):
        (WebCore::ValidationMessage::create):
        * html/ValidationMessage.h: Ditto.
        * html/ValidityState.cpp: Ditto.
        (WebCore::ValidityState::validationMessage):
        (WebCore::ValidityState::setCustomErrorMessage):
        (WebCore::ValidityState::valueMissing):
        (WebCore::ValidityState::typeMismatch):
        (WebCore::ValidityState::patternMismatch):
        (WebCore::ValidityState::tooLong):
        (WebCore::ValidityState::rangeUnderflow):
        (WebCore::ValidityState::rangeOverflow):
        (WebCore::ValidityState::stepMismatch):
        * html/ValidityState.h: Ditto.
        (WebCore::ValidityState::create):
        (WebCore::ValidityState::ValidityState):
        * loader/FormSubmission.cpp: Ditto.
        (WebCore::FormSubmission::create):

2010-12-06  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolling out r72988 for breaking iframes.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):

2010-12-06  Hironori Bono  <hbono@chromium.org>

        Reviewed by David Levin.

        [Chromium] Refactor FontCacheChromiumWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=50611
        
        This change just moved the helper functions for the WebCore::FontCache class to the beginning of ths file.

        No new tests are added since this is a refactoring.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::fontDataFromDescriptionAndLogFont): Moved to the beginning of the file.
        (WebCore::toGDIFontWeight): Moved to the beginning of the file.
        (WebCore::FillLogFont): Moved to the beginning of the file.
        (WebCore::TraitsInFamilyProcData::TraitsInFamilyProcData): Moved to the beginning of the file.
        (WebCore::traitsInFamilyEnumProc): Moved to the beginning of the file.
        (WebCore::FontCache::platformInit): Moved after the static functions.

2010-12-06  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by Kenneth Russell.

        Throw webglcontextlost and webglcontextrestored events when a WebGL context is lost and restored.
        https://bugs.webkit.org/show_bug.cgi?id=50364

        No new tests since there is currently no way to force a context lost event.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContextRestoreTimer::fired):
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::isContextLost):
        (WebCore::WebGLRenderingContext::loseContext):
        (WebCore::WebGLRenderingContext::restoreContext):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::WebGLRenderingContextRestoreTimer::WebGLRenderingContextRestoreTimer):

2010-12-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=50593
        
        Fix background canvas painting for documents with left/top overflow.  The math from the original RTL patch was incorrect.
        
        Just use the RenderView's document dimensions always.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxDecorations):

2010-12-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin.

        CSS animation doesn't work for border-radius
        https://bugs.webkit.org/show_bug.cgi?id=48340
        
        Include CSSPropertyBorderRadius in the list of shorthand
        properties, so that the individual border-radius properties
        get animated.

        Test: transitions/border-radius-transition.html

        * page/animation/AnimationBase.cpp:
        (WebCore::addShorthandProperties):

2010-12-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        ApplyStyleCommand should take EditingStyle instead of CSSStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=49938

        Modified ApplyStyleCommand::ApplyStyleCommand and ApplyStyleCommand::create to take EditingStyle*
        instead of CSSStyleDeclaration*. Also replaced much of code in Editor::computeAndSetTypingStyle
        by calls to EditingStyle's member functions and extracted EditingStyle::overrideWith and
        EditingStyle::extractAndRemoveBlockProperties.

        No new tests are added since this is a refactoring.

        * WebCore.exp.in: Added SelectionController::copyTypingStyle and EditingStyle::~EditingStyle.
        * css/CSSMutableStyleDeclaration.cpp: Made CSSMutableStyleDeclaration* in the argument list const.
        (WebCore::CSSMutableStyleDeclaration::merge):
        * css/CSSMutableStyleDeclaration.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::ApplyStyleCommand): Takes EditingStyle* instead of CSSStyleDeclaration*.
        (WebCore::ApplyStyleCommand::doApply): Uses EditingStyle.
        * editing/ApplyStyleCommand.h: m_style is now a ref-pointer to EditingStyle instead of CSSMutableStyleDeclaration.
        (WebCore::ApplyStyleCommand::create): Takes EditingStyle* instead of CSSStyleDeclaration*.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::applyStyle): Ditto.
        (WebCore::CompositeEditCommand::moveParagraphs): Calls applyStyle.
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Ditto.
        * editing/CompositeEditCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete): Ditto.
        * editing/EditCommand.cpp:
        * editing/EditCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::~EditingStyle): Added.
        (WebCore::EditingStyle::overrideWithStyle): Extracted from Editor::calculateTypingStyleAfterDelete.
        (WebCore::EditingStyle::copy): Added.
        (WebCore::EditingStyle::extractAndRemoveBlockProperties): Extracted from Editor::calculateTypingStyleAfterDelete.
        * editing/EditingStyle.h:
        * editing/Editor.cpp:
        (WebCore::Editor::applyStyle): Calls ApplyStyleCommand::create.
        (WebCore::Editor::applyParagraphStyle): Ditto.
        (WebCore::Editor::computeAndSetTypingStyle): Ditto.
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply): Calls applyStyle.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::applyStyleAfterInsertion): Ditto.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): Ditto.
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply): Calls ApplyStyleCommand::create.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement): Calls applyStyle.
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::copyTypingStyle): Moved from SelectionController.h
        * editing/SelectionController.h:

2010-12-05  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Executing FormatBlock on multiple paragraphs inside pre does not remove the outer pre
        https://bugs.webkit.org/show_bug.cgi?id=47300

        The bug was caused by FormatBlockCommand::formatRange's not removing refNode when the refNode
        contains more than one paragraphs even when the refNode is fully selected.

        Fixed the bug by modifying FormatBlockCommand::formatRange to correctly remove the node in
        such a situation.

        Also fixed a bug in ApplyBlockElementCommand::formatSelection that the end of selection
        is not properly updated when the end of selection resides in the node split by
        rangeForParagraphSplittingTextNodesIfNeeded or endOfNextParagrahSplittingTextNodesIfNeeded.

        Test: editing/execCommand/format-block-multiple-paragraphs-in-pre.html

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::formatSelection): Calls formatRange with m_endOfLastParagraph.
        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplittingTextNodesIfNeeded): Updates
        m_endOfLastParagraph when the position points to the node split by this function.
        (WebCore::ApplyBlockElementCommand::endOfNextParagrahSplittingTextNodesIfNeeded): Ditto.
        * editing/ApplyBlockElementCommand.h: Added m_endOfLastParagraph as a member variable.
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange): See above.
        * editing/FormatBlockCommand.h:
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::formatRange): Ignores the end of selection.
        * editing/IndentOutdentCommand.h:

2010-12-03  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Postpone gl delete* calls until shaders/programs are no longer attached
        https://bugs.webkit.org/show_bug.cgi?id=50501

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::deleteObjectImpl): Simply delete GL resource.
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::deleteObjectImpl): Ditto.
        * html/canvas/WebGLObject.cpp:
        (WebCore::WebGLObject::deleteObject): Tracking whether deleteObjectImpl should be called or not.
        * html/canvas/WebGLObject.h:
        (WebCore::WebGLObject::detachContext): Set attachmentCount to 0 to ensure OpenGL resource deletion.
        (WebCore::WebGLObject::onDetached): No need to track attachmentCount here as we track it in deleteObject.
        (WebCore::WebGLObject::isDeleted): Make this public.
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::deleteObjectImpl): Simply delete GL resource.
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::deleteObjectImpl): Ditto.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getProgramParameter): intercept DELETE_STATUS.
        (WebCore::WebGLRenderingContext::getShaderParameter): Ditto.
        * html/canvas/WebGLShader.cpp:
        (WebCore::WebGLShader::deleteObjectImpl): Simply delete GL resource.
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::deleteObjectImpl): Simply delete GL resource.

2010-12-06  Ryosuke Niwa  <rniwa@webkit.org>

        Yet unreviewed another Leopard build fix for r73380.

        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::setKeyTimes):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::platformCALayer):

2010-12-06  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        Marquee elements do not stop animating when scrollAmount is set to 0.
        https://bugs.webkit.org/show_bug.cgi?id=50434

        Test: fast/html/marquee-scrollamount.html

        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::timerFired): Allow increment to be 0.

2010-12-06  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Leopard buildfix for r73380.

        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::setTimingFunctions):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::PlatformCALayer):

2010-12-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] use ResourceHandle::setDefersLoading in WebKitWebSourceGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=44157

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcNeedDataMainCb):
        (webKitWebSrcEnoughDataMainCb): Replaced platform-specific code
        with cross-platform ResourceHandle::setDefersLoading calls.

2010-12-06  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Leopard build fix for r73388.

        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::maxValueForRange):
        (WebCore::AccessibilitySlider::minValueForRange):

2010-12-06  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix for Leopard after r73379.

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

2010-12-06  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Make DocumentWriter a member of DocumentLoader
        instead of FrameLoader.
        https://bugs.webkit.org/show_bug.cgi?id=50489

        Refactor, no new tests.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::close):
        (WebCore::Document::lastModified):
        (WebCore::Document::finishedParsing):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::updateURLForPushOrReplaceState):
        * dom/Document.h:
        (WebCore::Document::setDocumentLoader):
        (WebCore::Document::loader):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::scriptCharset):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::setFrame):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::writer):
        * loader/DocumentWriter.h:
        (WebCore::DocumentWriter::setFrame):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::notifier):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestPreload):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::encodingFromAcceptCharset):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-12-06  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: Don't force WebCore to build against the 10.5 SDK.
        That's just plain wrong.

2010-12-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        HTML5 Slider does not work correctly with VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=50505

        Address a few problems with the Mac implementation for the accessibility slider.
            1) The value indicator is not hit testable.
            2) The value indicator does not return an AXValue.
            3) In the slider, the min/max values are not correct when min/max attributes are not present.
            4) When you change the value with the keyboard, it doesn't send out the right notification.
            5) Sliders were returning AXValue and AXTopLevelUIElement attributes twice in their list of attributes.
 
        Test: platform/mac/accessibility/html-slider-indicator.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::getAttribute):
            Use fastGetAttribute on Element, instead of getAttribute.
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isInputSlider):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::doAccessibilityHitTest):
        (WebCore::AccessibilitySlider::maxValueForRange):
        (WebCore::AccessibilitySlider::minValueForRange):
        * accessibility/AccessibilitySlider.h:
        (WebCore::AccessibilitySlider::isInputSlider):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::applyStep):

2010-12-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=49220 <<rdar://problem/8644849>, REGRESSION: transforms now
        O(n^3) from pathological behavior in lowestPosition, rightmostPosition, leftmostPosition and topmostPosition.

        This patch throws out the lowest/rightmost/leftmost/topmostPosition functions and re-architects layout overflow
        in the engine to cache all the information required to properly handle scrolling.

        In the old code, there were two types of overflow: layout overflow and visual overflow.  The former could
        affect scrolling and the latter could not.  The distinction was largely meaningless, since layout overflow
        wasn't actually used to determine scroll width or scroll height.  It didn't propagate across self-painting layer
        boundaries either.  In the old code, the term visible overflow meant the union of the layout overflow and
        visual overflow rects.

        In the new code, the two types of overflow remain, but the distinction between the two is now clear.  Visual overflow
        is used purely for painting and hit testing checks and layout overflow is used specifically for scrolling.  It has
        been expanded to propagate across self-painting layers, to factor in relative positioning and transforms, and to
        work with writing modes.

        In order to minimize layout test changes, layers no longer incorporate right/bottom overflow into their width/height members.
        Doing so uncovered two bugs where left/top overflow was ignored (proof that even having layer dimensions is harmful).
        A render tree dump hack has been put into the code to keep this overflow dumping for the RenderView's layer, since otherwise
        a huge number of tests would change.

        Added fast/overflow/overflow-rtl-vertical.html to test vertical writing-mode overflow.  Existing tests cover the rest.

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::forceLayoutForPagination):
        Changed to use RenderView's docTop/Left/Width/Height accessors, which simply grab the overflow and properly flip it
        to account for writing modes.

        * platform/graphics/IntRect.h:
        (WebCore::IntRect::shiftLeftEdgeTo):
        (WebCore::IntRect::shiftRightEdgeTo):
        (WebCore::IntRect::shiftTopEdgeTo):
        (WebCore::IntRect::shiftBottomEdgeTo):
        New helper functions for sliding the edge of a rectangle without moving any of the other three edges.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::frameRect):
        frameRect is a helper for obtaining the x, y, width, height of an InlineBox as an IntRect.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        All of the overflow setting in the inline direction has been removed from this function.  All line overflow is computed
        at once now in a single function: computeOverflow.

        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::addReplacedChildOverflow):
        Helper for propagating overflow from specific types of children that occur on a line into the InlineFlowBox's overflow.

        (WebCore::InlineFlowBox::computeOverflow):
        The new function that computes both horizontal and vertical overflow for a line box.

        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        (WebCore::InlineFlowBox::setOverflowFromLogicalRects):
        New functions that set the overflow computed by computeOverflow.  These replace setBlockDirectionOverflowPositions
        and setInlineDirectionOverflowPositions.  They essentially do the same thing, but they operate on rectangles.

        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        Changed to use visual overflow instead of visible overflow.  (Visible overflow as a union of layout and visual
        overflow is no longer necessary, since visual overflow is now equivalent to the old visible overflow concept.)

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::logicalLayoutOverflowRect):
        (WebCore::InlineFlowBox::logicalVisualOverflowRect):
        Helpers for obtaining logical overflow rectangles, since lines compute their overflow in logical terms before
        converting to block coordinates at the end.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::computeOverflow):
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::addOverflowFromPositionedObjects):
        Blocks now have a computeOverflow function called at the end of layout that adds in all the types of overflow.  The addOverflowFromChildren
        method is virtual so that RenderListItem and RenderTable can subclass it.  RenderListItem has to position its list marker and
        propagate marker overflow up, and RenderTable adds in overflow from its sections.

        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        (WebCore::RenderBlock::layoutPositionedObjects):
        When only positioned objects lay out, overflow must still be recomputed.  The refactoring of overflow computation into a single
        callable method: computeOverflow, makes it possible for this to be done easily.

        (WebCore::RenderBlock::paint):
        visible -> visual.

        (WebCore::RenderBlock::addOverhangingFloats):
        The propagation of float overflow has changed substantially.  The basic rules are:
            (1) The float must be in our floating objects list to contribute to overflow.
            (2) The float must be a descendant to contribute to overflow.
            (3) The block must have the outermost list that contains the float, or it has a self-painting layer and
                so the float needs to be included in its overflow.

        (WebCore::RenderBlock::nodeAtPoint):
        visible -> visual.

        (WebCore::RenderBlock::layoutColumns):
        Remove column overflow computation from layoutColumns and move it to computeOverflow.

        (WebCore::RenderBlock::adjustLinePositionForPagination):
        visible -> visual.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::scrollbarsChanged):
        Added a new virtual method used by table cells when scrollbars in an overflow:auto/scroll table cell come and go.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        (WebCore::RenderBlock::beforeSideVisualOverflowForLine):
        (WebCore::RenderBlock::afterSideVisualOverflowForLine):
        visible -> visual.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        Patched to use layoutOverflow functions instead of the old rightmost/leftmostPosition functions.

        (WebCore::RenderBox::paintRootBoxDecorations):
        Use docLeft and docTop here, so that writing modes are handled.

        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        visible -> visual.

        (WebCore::RenderBox::addOverflowFromChild):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::logicalVisualOverflowRectForPropagation):
        (WebCore::RenderBox::visualOverflowRectForPropagation):
        (WebCore::RenderBox::logicalLayoutOverflowRectForPropagation):
        (WebCore::RenderBox::layoutOverflowRectForPropagation):
        * rendering/RenderBox.h:
        The new overflow system for boxes.  Layout overflow now crosses self-painting layer boundaries and adjusts child boxes
        for transforms, relative positioning and writing mode differences.

        (WebCore::RenderBox::layoutOverflowRect):
        (WebCore::RenderBox::topLayoutOverflow):
        (WebCore::RenderBox::bottomLayoutOverflow):
        (WebCore::RenderBox::leftLayoutOverflow):
        (WebCore::RenderBox::rightLayoutOverflow):
        Changed the default rectangle for layout overflow to be the client box to match the scrollable areas of overflow regions.

        (WebCore::RenderBox::clientLogicalBottom):
        New helper for obtaining the logical bottom of the client box.

        (WebCore::RenderBox::clientBoxRect):
        New helper for obtaining the clientLeft/Top/Width/Height box.

        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::relativePositionLogicalOffset):
        Helper for obtaining the relative position offset transposed for vertical writing modes.  Used by line overflow.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        Changed flexible boxes to just call the base class computeOverflow method.

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        visible -> visual.

        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        Changed layers to no longer incorporate right/bottom overflow into width/height.  This is the reason many layout
        tests change.  (Not doing this makes the layout test changes far worse, since overflow propagates across self-painting
        layers now.)

        (WebCore::RenderLayer::overflowTop):
        (WebCore::RenderLayer::overflowBottom):
        (WebCore::RenderLayer::overflowLeft):
        (WebCore::RenderLayer::overflowRight):
        overflowTop/Bottom/Left/Right return overflow that accounts for writing modes, i.e., purely physical overflow that can be used
        to set up the scroll area.

        (WebCore::RenderLayer::computeScrollDimensions):
        Drastically simplified this method now that overflowTop/Bottom/Left/Right just do the right thing regarding unreachable overflow.

        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        Make sure to explicitly set the vertical scrollbar's position just as we did with horizontal scrollbars, so that clamping to the
        bottom works.

        (WebCore::performOverlapTests):
        (WebCore::RenderLayer::paintLayer):
        Fix a bug in performOverlapTests.  It incorrectly used the layer's bounds, and so it didn't account for left/top overflow out
        of the layer (see why I hate layers even having dimensions?).  Changed it to use the bounding box of the layer instead.

        (WebCore::RenderLayer::hitTest):
        Fix a bug in hit testing.  It incorrectly used the root layer's bounds as the limit of the hit test, and so it didn't account
        for left/top overflow in a ScrollView (hate hate hate layers having dimensions).  I changed it to use the hit test rect instead,
        so that the damage rect never stops the point from being tested (unless the hit test request says not to ignore clipping).

        (WebCore::RenderLayer::localBoundingBox):
        visible -> visual.

        * rendering/RenderLayer.h:
        Added the new overflowTop/Left/Right/Bottom accessors.

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::anyLineIntersectsRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        visible -> visual.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::addOverflowFromChildren):
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListItem.h:
        RenderListItem now positions the list marker when computing its overflow, since the marker propagates overflow back up to the list item.

        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        visible -> visual.

        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition):
        Changed to use overflow functions instead of rightmost/lowestPosition.

        * rendering/RenderMedia.cpp:
        * rendering/RenderMedia.h:
        Removed the lowest/topmost/rightmost/leftmostPosition functions, since control overflow is handled properly already.

        * rendering/RenderOverflow.h:
        (WebCore::RenderOverflow::RenderOverflow):
        (WebCore::RenderOverflow::setLayoutOverflow):
        (WebCore::RenderOverflow::setVisualOverflow):
        Add new setters for layout and visual overflow as rects.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        visible -> visual.

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::layout):
        Call computeOverflow to recompute our overflow information after we adjust the ruby.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::addOverflowFromChildren):
        (WebCore::RenderTable::paint):
        * rendering/RenderTable.h:
        Move section overflow propagation into addOverflowFromChildren, and change RenderTable to just call computeOverflow.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        visible -> visual.

        (WebCore::RenderTableCell::scrollbarsChanged):
        Adding unreachable overflow support (something that in the old code only existed for positioned objects in the root view) exposed
        a bug in table layout.  If scrollbars are added during the layout that occurs after intrinsic padding was incorporated into the
        cell, then the cell won't lay out properly the second time (after the scrollbars have been added).  We have to adjust the intrinsic
        padding accounting for the presence of the new scrollbar so the second layout will get the right dimensions.

        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::hasVisualOverflow):
        visible -> visual.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTableSection.h:
        visible -> visual.  Removed the leftmost/rightmost/topmost/bottommostPosition functions.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        Added a hack to render tree dumping to include right/bottom overflow for the root layer only.  This keeps a zillion layout tests
        from failing.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        (WebCore::RenderView::docTop):
        (WebCore::RenderView::docBottom):
        (WebCore::RenderView::docLeft):
        (WebCore::RenderView::docRight):
        * rendering/RenderView.h:
        (WebCore::RenderView::docHeight):
        (WebCore::RenderView::docWidth):
        RenderView now uses docLeft/Top/Height/Width functions, which are just overflow queries that account for writing modes.  These methods
        are now the preferred way to query for the physical dimensions of a document.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):
        Changed to call setOverflowFromLogicalRects instead of the block/inline position functions.

        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        Remove the computation of block direction overflow, since it now all happens at once after the line is built.

        (WebCore::RootInlineBox::paddedLayoutOverflowRect):
        * rendering/RootInlineBox.h:
        Added a new helper function for incorporating the end padding into a line.  This end padding also includes the single pixel for a caret
        in LTR if needed.

2010-12-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Replaced GraphicsLayerMac with GraphicsLayerCA. GraphicsLayerCA is essentially 
        identical to GraphicsLayerMac, but replaces all the CoreAnimation specific calls 
        with calls to PlatformCALayer and PlatformCAAnimation. This makes GraphicsLayerCA 
        platform neutral as long as implementations of those two classes are available. 
        Added implementations in PlatformCALayerMac and PlatformCAAnimationMac. Also got 
        rid of GraphicsLayer::nativeLayer() and replaced it with GraphicsLayer::platformLayer() 
        to avoid confusion since both names were used to refer to the same thing. 

        This patch is only for Mac. Windows implementation has not changed.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp: Copied from WebCore/platform/graphics/ca/GraphicsLayerCA.cpp.
        * platform/graphics/ca/GraphicsLayerCA.h: Copied from WebCore/platform/graphics/ca/GraphicsLayerCA.h.
        * platform/graphics/ca/PlatformCAAnimation.h: Copied from WebCore/platform/graphics/ca/PlatformCAAnimation.h.
        * platform/graphics/ca/PlatformCALayer.h: Copied from WebCore/platform/graphics/ca/PlatformCALayer.h.
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm: Copied from WebCore/platform/graphics/ca/mac/PlatformCAAnimationMac.mm.
        (toCAMediaTimingFunction):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Copied from WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm.
        (PlatformCALayer::PlatformCALayer):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/mac/GraphicsLayerMac.h: Removed.
        * platform/graphics/mac/GraphicsLayerMac.mm: Removed.
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer setNeedsDisplay]):
        (-[WebLayer setNeedsDisplayInRect:]):
        (-[WebLayer display]):
        (-[WebLayer drawInContext:]):
        * platform/graphics/mac/WebTiledLayer.h:
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer setNeedsDisplay]):
        (-[WebTiledLayer setNeedsDisplayInRect:]):
        (-[WebTiledLayer display]):
        (-[WebTiledLayer drawInContext:]):
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        * platform/graphics/qt/GraphicsLayerQt.h:
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        * platform/graphics/win/GraphicsLayerCACF.h:

2010-12-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Font antialiasing (smoothing) changes when elements are rendered into compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=23364

        Text rendered by Core Graphics over a transparent background looks bad because of 
        font smoothing, so turn off smoothing when rendering text into compositing layers.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setAllowsFontSmoothing):
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):

2010-12-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WINCE] Add build system
        https://bugs.webkit.org/show_bug.cgi?id=50522

        * CMakeListsWinCE.txt: Added.

2010-12-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        AX does not support HTML5 "required"
        https://bugs.webkit.org/show_bug.cgi?id=50507

        Test: platform/mac/accessibility/html5-required-attribute.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isRequired):

2010-12-06  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] using shadows leaks memory
        https://bugs.webkit.org/show_bug.cgi?id=50541

        Fixed leaks in the shadow code.
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::drawPatternToCairoContext): adoptRef instead of just
        getting a new reference.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawPathShadow): handle cairo_path_t with smart
        pointers.

2010-12-06  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: remove duplicate code for capturing stack trace
        https://bugs.webkit.org/show_bug.cgi?id=50461

        No new tests. Covered with existing inspector tests.

        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        * bindings/js/ScriptCallStackFactory.h:
        * bindings/v8/ScriptCallStackFactory.cpp:
        (WebCore::toScriptCallFrame):
        (WebCore::toScriptCallFramesVector):
        (WebCore::createScriptCallStack):
        * bindings/v8/ScriptCallStackFactory.h:
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::handler):
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        (WebCore::ScriptCallFrame::isEqual):
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h:
        (WebCore::ScriptCallFrame::sourceURL):
        * inspector/ScriptCallStack.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._populateStackTraceTreeElement):

== Rolled over to ChangeLog-2010-12-06 ==
