2009-11-10  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=30901
        [Gtk] Need to de-lint the Atk a11y code

        Removal of various and sundry style-violating nits.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-11-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=31047
        [GTK] Failing test media/video-played-ranges-1.html

        Fix playback rate setter by remembering the rate was changed. Also
        correctly handle reverse playback by doing a seek from end to
        beginning of the media.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::updateStates):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-11-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Rename 3D Canvas related classes to use WebGL prefix
        https://bugs.webkit.org/show_bug.cgi?id=29095

        Automatic rename of all WebGL related types from Canvas* to
        WebGL* per more recent version of the WebGL spec.

        Due to the automatic rename I've removed the 600+ line change list.

2009-11-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG feDisplacementMap is not implemented
        [https://bugs.webkit.org/show_bug.cgi?id=31255]

        This is the implementation of the SVG filter effect
        feDisplacementMap. 

        Test: svg/filters/feDisplacementMap.svg

        * svg/graphics/filters/SVGFEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::apply):

2009-11-09  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Add a comment about null strings and hash functions.
        https://bugs.webkit.org/show_bug.cgi?id=29118

        * platform/text/StringHash.h:

2009-11-09  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Darin Adler.

        Compiler warnings in InspectorResource.h
        https://bugs.webkit.org/show_bug.cgi?id=29231

        Fix compilation warnings by removing addition operation on an enum type.

        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::):
        (WebCore::InspectorResource::Changes::hasChange):
        (WebCore::InspectorResource::Changes::set):
        (WebCore::InspectorResource::Changes::setAll):

2009-11-09  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Dan Bernstein.

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

        When an object tag's style changes (for example when child nodes are added/removed),
        reuse its Frame (if it has one) instead of creating multiple Frames.

        Test: fast/dom/HTMLObjectElement/children-changed.html

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

2009-11-09  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Moved macro MMP_RULES (LINKEROPTION) into symbian instead of symbian-sbsv2,
        since adjustment of RW-section base address will be needed for all new symbian
        tool chains, specifically for arm and gcc compilation targets.
        Also, change target address to 0xE00000 to be sufficient for all targets.

        * WebCore.pro:

2009-11-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Crash when inspecting
        WebCore\manual-tests\inspector\dom-mutation.html

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Few classes have virtual functions but non-virtual destructor
        https://bugs.webkit.org/show_bug.cgi?id=31269

        No new tests as there is no functional change.

        * platform/qt/QWebPageClient.h:
        (QWebPageClient::~QWebPageClient): Add virtual destructor.

2009-11-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Allow setting HTTP headers with empty value in XMLHTTPRequest
        https://bugs.webkit.org/show_bug.cgi?id=31140

        QtNetwork interprets null string as request to remove the header, not add it.
        Replace null values with empty values before passing them to QtNetwork.

        Test: http/tests/xmlhttprequest/xmlhttprequest-setrequestheader-no-value.html

        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):

2009-11-09  Vadim Zeitlin  <vadim@wxwidgets.org>

        Reviewed by Kevin Ollivier.

        [wx] Fix handling of alpha channel when using wxWidgets 2.9: it was
        simply ignored before resulting in transparent areas being black in PNG
        images for example.
        
        https://bugs.webkit.org/show_bug.cgi?id=30823

        * platform/image-decoders/wx/ImageDecoderWx.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Use explicit parentheses to silence gcc 4.4 -Wparentheses warnings
        https://bugs.webkit.org/show_bug.cgi?id=31040

        No new tests as there is no functional change.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyleSelector):
        * editing/TextIterator.cpp:
        (WebCore::pushFullyClippedState):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::appendTrailingWhitespace):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontPlatformDataCacheKey::computeHash):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::handleRunInChild):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * svg/SVGAnimateElement.cpp:
        (WebCore::parseNumberValueAndUnit):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::startedActiveInterval):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::getCTM):

2009-11-09  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Dimitri Glazkov.

        Win chromium is slow to draw transparent texts
        https://bugs.webkit.org/show_bug.cgi?id=31258

        Clip graphics context to reduce calculation.

        No new tests because this change only affects performance.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):

2009-11-09  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        showTree(CounterNode*) generates too little info and has too many spaces.
        https://bugs.webkit.org/show_bug.cgi?id=31212

        No new tests as the change has no functional effect it is just for
        improved debugging.

        * rendering/CounterNode.cpp:
        (WebCore::showTreeAndMark):
        Changed to also show addresses of parent, next and previous
        siblings.

2009-11-09  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Darin Adler.

        Moves Mac implementation of setUseSecureKeyboardEntry to Frame.cpp and
        enables it PLATFORM(CHROMIUM) in addition to PLATFORM(MAC).

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

        No new tests; implementation is unchanged.

        * page/Frame.cpp:
        (WebCore::Frame::setUseSecureKeyboardEntry):
        * page/mac/FrameMac.mm:

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Jan Alonzo.

        Make XP_UNIX tests consistent
        https://bugs.webkit.org/show_bug.cgi?id=31250

        No new tests as there is no functional change.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect): Test if XP_UNIX is defined
        instead of the value of the macro

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded): Test if the XP_UNIX is
        defined instead of using the PLATFORM macro to be consistent
        (WebCore::PluginView::getValue): Ditto.

2009-11-09  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Darin Adler.

        Thunk to the main thread from ~Database to deref Database's m_document.

        If the Database was the Document's last referrer, then ~Document occurs on the
        Database thread, and ASSERT(!m_styleRecalcTimer.isActive()) hits a main thread
        ASSERT in debug builds.

        * storage/Database.cpp:
        (WebCore::derefDocument):
        (WebCore::Database::~Database):

2009-11-09  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dan Bernstein.

        Track "can have scrollbar" state within FrameView independently of the
        individual scrollbar states in ScrollView.

        rdar://problem/7215132, https://bugs.webkit.org/show_bug.cgi?id=29167
        REGRESSION (r48064): mint.com loses scrollbars after coming out of
        edit mode.

        rdar://problem/7314421, https://bugs.webkit.org/show_bug.cgi?id=30517
        REGRESSION (r48064): Extra scroll bars in GarageBand Lesson Store.

        Test: fast/overflow/scrollbar-restored.html

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::setCanHaveScrollbars):
        (WebCore::FrameView::updateCanHaveScrollbars):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        * platform/ScrollView.h:

2009-11-09  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: CSS syntax highlighter doesn't recognize negative numbers
        https://bugs.webkit.org/show_bug.cgi?id=31257

        * inspector/front-end/SourceFrame.js:

2009-11-09  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Debugger shortcuts (F8, F10, F11) have no effect if the Console view is open
        https://bugs.webkit.org/show_bug.cgi?id=31252

        Route F1-F12 keypresses in the Console view to the current panel if there is one.

        Test: manual-tests/inspector/debugger-shortcuts-with-console-opened.html

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._promptKeyDown):
        * inspector/front-end/utilities.js:
        ():
        * manual-tests/inspector/debugger-shortcuts-with-console-opened.html: Added.

2009-11-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Pass credentials provided by XMLHTTPRequest to the network request.
        https://bugs.webkit.org/show_bug.cgi?id=31208

        After r42483, the credentials are no longer passed to the network request
        in the URL of the request.
        Pass the credentials from XMLHTTPRequest to the network request, the same
        way that other ports do.

        After this patch LayoutTests/http/xmlhttprequest/basic-auth.html passes.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2009-11-09  Zoltan Horvath  <zoltan@webkit.org>

        Unreviewed.

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

        Roll back r50657 because it breaks the MAC builds.

        * loader/ImageLoader.cpp:
        * loader/ProgressTracker.cpp:
        * loader/RedirectScheduler.cpp:
        * loader/Request.h:
        * loader/ThreadableLoaderClient.h:
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/icon/IconDatabaseClient.h:

2009-11-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for the part of loader directory in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=31161

        Inherits the following classes from Noncopyable because these are instantiated
        by 'new' and these are no need to be copyable:

        class Request - WebCore/loader/loader.cpp:100
        struct ScheduledRedirection - WebCore/loader/RedirectScheduler.cpp:164
        class IconDatabaseClient - WebCore/loader/icon/IconDatabase.cpp:89
        class ApplicationCacheStorage - WebCore/loader/appcache/ApplicationCacheStorage.cpp:1121
        class ApplicationCacheHost -  WebCore/loader/DocumentLoader.cpp:151
        class ImageEventSender - WebCore/loader/ImageLoader.cpp:54
        struct ProgressItem - WebCore/loader/ProgressTracker.cpp:169

        Inherits ThreadableLoaderClient class from Noncopyable because (its child class) 
        MainThreadBridge is instantiated by 'new' in 
        WebCore/loader/WorkerThreadableLoader.cpp:59 it is no need to be copyable.

        ThreadableLoaderClient's inheriting has been changed to public.

        * loader/ImageLoader.cpp:
        * loader/ProgressTracker.cpp:
        * loader/RedirectScheduler.cpp:
        * loader/Request.h:
        * loader/ThreadableLoaderClient.h:
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/icon/IconDatabaseClient.h:

2009-11-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's DocLoader
        https://bugs.webkit.org/show_bug.cgi?id=31163

        Inherits DocLoader class from Noncopyable because it is
        instantiated by 'new' in WebCore/dom/Document.cpp:370 and 
        it is no need to be copyable.

        * loader/DocLoader.h:

2009-11-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's Tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=31162

        Inherits Tokenizer class from Noncopyable because (its child class)
        ImageTokenizer instantiated by 'new' in WebCore/loader/ImageDocument.cpp:178 
        and it is no need to be copyable.

        * dom/Tokenizer.h:

2009-11-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's DeleteButtonController
        https://bugs.webkit.org/show_bug.cgi?id=31105

        Inherits DeleteButtonController class from Noncopyable because it is 
        instantiated by 'new' in WebCore/editing/Editor.cpp:919 and
        it is no need to be copyable.  

        * editing/DeleteButtonController.h:

2009-11-09  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Expose Page::tabKeyCyclesThroughElements in the API
        https://bugs.webkit.org/show_bug.cgi?id=30482

        Expose Page::tabKeyCyclesThroughElements as a property of
        WebKitWebView.

        No new tests; fast/events/keypress-insert-tab.html is no longer skipped.

        * platform/gtk/KeyEventGtk.cpp: Correct m_text for tab key presses.
        (WebCore::singleCharacterString):

2009-11-09  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Fix a crasher that occurred with text which included newline
        chars in the markup.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (convertUniCharToUTF8):

2009-11-05  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Holger Freyther.

        [Qt] The XML tokenizer reports a parse error twice if it occurs before the document element is found.
        https://bugs.webkit.org/show_bug.cgi?id=31144

        XMLTokenizer::doEnd() uses an additional logic to report a parse failure in
        documents that end prematurely but are not considered invalid by QXmlStream.
        This is to stay compatible with the libxml2 implementation.
        However, that code path would be also hit in situations when it should not,
        i.e. the error would have already been caught and handled. As a result, the
        same error would be reported twice.

        No new tests, because the problem is already covered by
        fast/parser/xml-declaration-missing-ending-mark.html.

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

2009-11-08  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector should support copy() in the command line
        https://bugs.webkit.org/show_bug.cgi?id=31238

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::copyText): Added.
        * inspector/InspectorBackend.h: Added copyText
        * inspector/InspectorBackend.idl: Added copyText
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._copy): Added.
        (InjectedScript._ensureCommandLineAPIInstalled):

2009-11-08  Drew Wilson  <atwilson@chromium.org>

        Reviewed by Dimitri Glazkov.

        V8 WorkerContextExecutionProxy does not handle SharedWorkers
        https://bugs.webkit.org/show_bug.cgi?id=31226

        Now checks to see what type of context is active and creates the
        appropriate wrapper (DEDICATEDWORKERCONTEXT vs SHAREDWORKERCONTEXT).

        Added support for converting to SharedWorkers and SharedWorkerContexts.

        Test: Existing layout tests cover this case (start passing in Chrome).

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        Now generates the right type of DOMWrapper for SharedWorkerContexts.
        (WebCore::WorkerContextExecutionProxy::convertToV8Object):
        Added support for SHAREDWORKERCONTEXT.
        (WebCore::WorkerContextExecutionProxy::convertEventTargetToV8Object):
        Added support for SharedWorker and SharedWorkerContext.

2009-11-08  Johnny Ding  <johnnyding.webkit@gmail.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=31224
        [V8] Return StyleSheet object instead of HTMLStyleElement w/document.styleSheets named property getter.

        Test: fast/dom/StyleSheet/get-stylesheet-byname.html

        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):

2009-11-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: "Search again" on scripts panel switches
        to the script this search started with.

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

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.jumpToNextSearchResult):

2009-11-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Simplify Icon interface.
        https://bugs.webkit.org/show_bug.cgi?id=31154

        - Remove Icon::createIconForFile().  createIconForFiles() covers
          createIconForFile()'s role.
        - Remove FileChooser::chooseIcon()
        - Change the parameter types of FileChooser constructor and the
          factory method, String -> const Vector<String>&, in order to
          support initialization with multiple files.
        - Remove the icon loading code in IconChromiumWin.cpp, which
          doesn't work because of the sandbox.

        No tests because it's just a refactoring.

        * platform/FileChooser.cpp:
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::create):
        (WebCore::FileChooser::chooseFile):
        (WebCore::FileChooser::chooseFiles):
        * platform/FileChooser.h:
        * platform/graphics/Icon.h:
        * platform/graphics/chromium/IconChromiumLinux.cpp:
        * platform/graphics/chromium/IconChromiumMac.cpp:
        * platform/graphics/chromium/IconChromiumWin.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/gtk/IconGtk.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/haiku/IconHaiku.cpp:
        * platform/graphics/mac/IconMac.mm:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/wx/IconWx.cpp:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::RenderFileUploadControl):

2009-11-08  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Allows same-origin plugin-based content to load.

        Test: http/tests/security/xssAuditor/object-src-inject.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc): Modified to call XSSAuditor::isSameOriginResource.
        (WebCore::XSSAuditor::canLoadObject): Ditto.
        (WebCore::XSSAuditor::canSetBaseElementURL): Ditto. 
        (WebCore::XSSAuditor::isSameOriginResource): Added.
        * page/XSSAuditor.h:

2009-11-08  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (chromium build fix).

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseDate): Changed this to not
        use a date parser that needs ExecState passed.
        
2009-11-08  David Levin  <levin@chromium.org>

        Unreviewed build fix for chromium.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2009-11-08  David Levin  <levin@chromium.org>

        Unreviewed build fix for chromium.

        Build fix for https://bugs.webkit.org/show_bug.cgi?id=31219
        Clean up GraphicsContext's current concept of ColorSpace

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2009-11-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [REGRESSION] committing style edit
        clears elements panel selection.

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

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

2009-11-08  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Holger Freyther.

        ResourceRequest to be class instead of struct
        https://bugs.webkit.org/show_bug.cgi?id=30670

        Started as a compilation fix for Symbian where the compiler makes a distinction between
        class and struct in function argument signatures.
        Changed all forward declarations of ResourceRequest to have class in the forward
        declaration instead of struct and changed the definition of ResourceRequest to be class
        and added access qualifiers where missing. Additionally two references of friend
        struct ResourceRequestBase changed to class instead.

        * history/HistoryItem.h:
        * inspector/InspectorController.h:
        * inspector/InspectorResource.h:
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.h:
        * loader/ResourceLoadNotifier.h:
        * loader/SubresourceLoader.h:
        * loader/SubresourceLoaderClient.h:
        * loader/ThreadableLoader.h:
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheHost.h:
        * platform/CrossThreadCopier.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/chromium/ResourceRequest.h:
        * platform/network/curl/ResourceRequest.h:
        * platform/network/qt/ResourceRequest.h:
        * platform/network/soup/ResourceRequest.h:
        * xml/XMLHttpRequest.h:

2009-11-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7363434> Crash inside RenderObject::localToAbsolute
        below FrameView::layout
        https://bugs.webkit.org/show_bug.cgi?id=31093

        Test: fast/block/positioning/relative-positioned-inline-container.html

        In <http://trac.webkit.org/changeset/19148>, setStaticY() was changed
        to mark the object for layout, doing so without marking its ancestors.
        However, RenderBlock::skipLeadingWhitespace and
        RenderBlock::skipTrailingWhitespace() call setStaticY() on a relative-
        positioned inline container, causing it to be marked for layout without
        ever going back to give it layout, and thus layout could end with a
        dirty object still in the tree, leading to all sorts of badness.

        The fix is to revert setStaticY() to not marking the object dirty, and
        instead do it in the call sites that require it, which are in
        RenderBlock and RenderFlexibleBox.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustPositionedBlock):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::setStaticY):

2009-11-07  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20780
        
        Fixes an issue where the onchange event handler is not fired when the 
        input field is autocompleted.
        
        We cannot test this using DRT since DRT cannot emulate autocompletion.
        So, a manual-test is included.

        Tests: manual-tests/autocompletion-fire-onchange.html

        * manual-tests/autocompletion-fire-onchange.html: Added.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setInnerTextValue):

2009-11-07  Benjamin Otte  <otte@gnome.org>

        Reviewed by Holger Freyther.

        Mark redrawn areas on image surfaces as dirty.

        This is required to conform to the Cairo API, but is currently only
        used by debugging tools like cairo-trace.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::platformTransformColorSpace):
        (WebCore::putImageData):

2009-11-07  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30878
        [Gtk] atk_text_get_text() fails in entries when the end_offset is -1

        If the end_offset is -1, use the String length as the end_offset.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_text):

2009-11-06  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele Peterson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=31219 Clean up 
        GraphicsContext's current concept of ColorSpace

        ColorSpace is now called ColorType. The variables on the state we 
        appropriately re-named as well. I removed strokeColorSpace() and 
        fillColorSpace() from GraphicsContext since they were never called. 

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokeColor):
        (WebCore::GraphicsContext::setFillColor):
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        * platform/graphics/GraphicsContext.h:
        (WebCore::):
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::calculateDrawingMode):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):

2009-11-06  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Fixes <http://webkit.org/b/31177>.
        Web Inspector: Bind backspace to delete cookies and DOM Storage.
        
        Refactor editing code from DOMStorageDataGrid to DataGrid, so other
        places in the inspector can use editing in DataGrid (added a FIXME for
        some stuff that needs to be generalized).
        
        Also added deleting functionality to DataGrid, and implemented it for
        Cookies and DOM Storage. The reason this patch is so big is because of
        the refactoring of editing code, which won't be used yet in a cross-datagrid
        way, but should be able to.
        
        Additionally, moved the callbacks members from DOMStorageDataGrid to
        DOMStorageItemsView, which allowed us to delete DOMStorageDataGrid, to 
        make the architecture of DOM Storage look a lot more like the Cookies view.
        
        Lastly, added a preventDefault call in ElementsTreeOutline to prevent the 
        inspector from beeping at you when you delete an element.

        * WebCore.gypi: Removed DOMStorageDataGrid.
        * WebCore.vcproj/WebCore.vcproj: Removed DOMStorageDataGrid.
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype.dataGridForCookies):
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked):
        (WebInspector.CookieItemsView.prototype._deleteCookieCallback):
        * inspector/front-end/DOMStorageDataGrid.js: Removed.
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageEntries):
        (WebInspector.DOMStorageItemsView.prototype._deleteButtonClicked):
        (WebInspector.DOMStorageItemsView.prototype._refreshButtonClicked):
        (WebInspector.DOMStorageItemsView.prototype._editingCallback):
        (WebInspector.DOMStorageItemsView.prototype.deleteSelectedRow):
        (WebInspector.DOMStorageItemsView.prototype._deleteCallback):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.prototype._ondblclick): Moved from DOMStorageDataGrid to DataGrid + Refactoring.
        (WebInspector.DataGrid.prototype._startEditingColumnOfDataGridNode): Ditto.
        (WebInspector.DataGrid.prototype._startEditing): Ditto.
        (WebInspector.DataGrid.prototype._editingCommitted.moveToNextIfNeeded): Ditto.
        (WebInspector.DataGrid.prototype._editingCommitted): Ditto.
        (WebInspector.DataGrid.prototype._editingCancelled): Ditto.
        (WebInspector.DataGrid.prototype.handleKeyEvent): Added case for delete/backspace.
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.handleKeyEvent): Added preventDefault call.
        * inspector/front-end/WebKit.qrc: Removed DOMStorageDataGrid.
        * inspector/front-end/inspector.html: Removed DOMStorageDataGrid.

2009-11-06  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: added an ExecState parameter.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue):

2009-11-06  Geoffrey Garen  <ggaren@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=31197
        Implemented a timezone cache not based on Mac OS X's notify_check API.

        Updated for JavaScriptCore internal API change.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue): Updated for namespace change.

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseDate): Pass 0 for ExecState, since we don't have one.
        (This function probably shouldn't be using a JavaScript date parser
        to begin with, but oh well.)

2009-11-06  Anantanarayanan G Iyengar  <ananta@chromium.org>

        Reviewed by Adam Barth.

        The associated webkit bug is https://bugs.webkit.org/show_bug.cgi?id=31067,
        which affects Chromium only.
        
        Changes to V8HTMLDocumentCustom.cpp are as below:-
        1. The HTMLDocumentOpen function would cause a crash in Chromium if
           there was no calling javascript context. We now check for this case
           and pass in NULL to the HTMLDocument::open function which can handle
           a NULL document parameter.
        2. The other functions like HTMLDocumentWrite, HTMLDocumentWriteln, etc
           had ASSERTS for a NULL caller frame, which was bogus as it would crash
           anyway. We now check for this case and return a failure.
           
        Changes to V8DOMWindowCustom.cpp are as below:-
        1. Instead of failing the window.open call made by NPAPI for lack of a
           calling javascript context, we now use the entered context as the calling
           context.

        Tests: plugins/document-open.html
               plugins/window-open.html

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-11-06  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Geolocation error code UNKNOWN_ERROR is deprecated.
        https://bugs.webkit.org/show_bug.cgi?id=31184

        Remove this error code from PositionError, both for use from C++ code and from the JS object.

        Updated fast/dom/Geolocation/error.html to test this.

        * page/PositionError.h: Modified.
        (WebCore::PositionError::): Remove ErrorCode::UNKNOWN_ERROR.
        * page/PositionError.idl: Modified. Remove UNKNOWN_ERROR constant.
        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::startRequest): Replace UNKNOWN_ERROR with POSITION_UNAVAILABLE.
        * platform/gtk/GeolocationServiceGtk.cpp: Modified.
        (WebCore::GeolocationServiceGtk::startUpdating): Replace UNKNOWN_ERROR with POSITION_UNAVAILABLE.

2009-11-06  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        feMorphology filter is not implemented
        [https://bugs.webkit.org/show_bug.cgi?id=5863]

        The Implementation of feMorphology.
        
        Test: We have allready a test for feMorphology
              svg/W3C-SVG-1.1/filters-morph-01-f.svg

        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::FEMorphology::apply):

2009-11-06  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        V8DOMWindowCustom.cpp is missing WEB_SOCKETS guard on include.
        https://bugs.webkit.org/show_bug.cgi?id=31209

        Build fix only. No new tests possible.

        * bindings/v8/custom/V8DOMWindowCustom.cpp: Modified. Added WEB_SOCKETS guard on inclue of WebSockets.h.

2009-11-06  Drew Wilson  <atwilson@chromium.org>

        Reviewed by David Levin.

        V8 bindings do not support SharedWorkers as event targets
        https://bugs.webkit.org/show_bug.cgi?id=31199

        No new tests because existing layout tests suffice (they currently
        crash on Chromium)

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        Added clause to create a DOM wrapper for SharedWorkers.

2009-11-06  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Do not unnecessarly synchronzie in weak reference callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=31191

        * bindings/v8/DOMData.h:
        (WebCore::DOMData::handleWeakObject):

2009-11-06  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Fix resource content search.
        https://bugs.webkit.org/show_bug.cgi?id=31202

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        (WebInspector.AbstractTimelinePanel.prototype.removeItem):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelineGraph.prototype.refresh):

2009-11-05  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Eric Seidel.

        Fix ASSERT(currentStyle = renderStyle()).
        https://bugs.webkit.org/show_bug.cgi?id=31152

        * dom/Element.cpp:
        (WebCore::Element::pseudoStyleCacheIsInvalid): We should have used "==" instead of "=".

2009-11-05  Alpha Lam  <hclam@chromium.org>

        Revert 50562 because it broke Chromium. Not reviewed since this is a build fix and revert.

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::gcEpilogue):
        * bindings/v8/V8GCController.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):

2009-11-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Cross-domain access to stylesheet text should not be allowed
        https://bugs.webkit.org/show_bug.cgi?id=20527

        Check whether whether the current document can read the cssRules from
        the style sheet.  Firefox throws a security error here, but we return
        null instead because that's what we usually do in these cases.

        Test: http/tests/security/cannot-read-cssrules-redirect.html
              http/tests/security/cannot-read-cssrules.html

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::cssRules):

2009-11-05  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        If the Geolocation service fails to start, invoke the error callback asynchronously.
        https://bugs.webkit.org/show_bug.cgi?id=28276

        All Geolocation callbacks must be invoked asynchronously.
        See http://www.w3.org/TR/geolocation-API/#geolocation_interface

        No new tests possible with current LayoutTestController.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::getCurrentPosition): Modified. Asserts that startRequest returned a notifier.
        (WebCore::Geolocation::watchPosition): Modified. Asserts that startRequest returned a notifier.
        (WebCore::Geolocation::startRequest): Modified. If the Geolocation service fails to start, set a fatal error on the notifier.

2009-11-05  Chris Jerdonek  <chris.jerdonek@gmail.com>

        Reviewed by Eric Seidel.

        Removed the "this is part of the KDE project" comments from 
        all *.h, *.cpp, *.idl, and *.pm files.
        
        https://bugs.webkit.org/show_bug.cgi?id=31167
        
        The maintenance and architecture page in the project wiki lists
        this as a task.
        
        This change includes no changes or additions to test cases 
        since the change affects only comments.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/IDLStructure.pm:
        * css/CSSInheritedValue.cpp:
        * css/CSSInitialValue.cpp:
        * css/CSSMediaRule.cpp:
        * css/CSSNamespace.h:
        * css/CSSProperty.cpp:
        * css/CSSProperty.h:
        * css/CSSRuleList.cpp:
        * css/CSSRuleList.h:
        * css/CSSSelector.h:
        * css/CSSValueList.cpp:
        * css/FontValue.cpp:
        * css/MediaFeatureNames.cpp:
        * css/MediaFeatureNames.h:
        * css/Pair.h:
        * css/SVGCSSStyleSelector.cpp:
        * css/ShadowValue.cpp:
        * css/StyleSheet.cpp:
        * css/StyleSheetList.cpp:
        * css/maketokenizer:
        * dom/BeforeUnloadEvent.cpp:
        * dom/BeforeUnloadEvent.h:
        * dom/CSSMappedAttributeDeclaration.cpp:
        * dom/EventNames.cpp:
        * dom/EventTarget.cpp:
        * dom/MappedAttributeEntry.h:
        * dom/MouseRelatedEvent.h:
        * dom/RangeException.h:
        * dom/StyleElement.h:
        * dom/Tokenizer.h:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.cpp:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLImageLoader.h:
        * html/HTMLMetaElement.h:
        * html/HTMLModElement.cpp:
        * html/HTMLModElement.h:
        * html/HTMLOptionsCollection.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPreElement.cpp:
        * html/HTMLPreElement.h:
        * html/HTMLTableCellElement.cpp:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        * html/HTMLTableColElement.h:
        * html/HTMLTablePartElement.cpp:
        * html/HTMLTablePartElement.h:
        * html/HTMLTitleElement.h:
        * page/MouseEventWithHitTestResults.h:
        * platform/StaticConstructors.h:
        * platform/text/AtomicStringImpl.h:
        * platform/text/qt/TextBreakIteratorQt.cpp:
        * rendering/AutoTableLayout.h:
        * rendering/CounterNode.cpp:
        * rendering/EllipsisBox.cpp:
        * rendering/EllipsisBox.h:
        * rendering/FixedTableLayout.cpp:
        * rendering/FixedTableLayout.h:
        * rendering/HitTestRequest.h:
        * rendering/HitTestResult.h:
        * rendering/InlineRunBox.h:
        * rendering/PointerEventsHitRules.cpp:
        * rendering/PointerEventsHitRules.h:
        * rendering/RenderBR.cpp:
        * rendering/RenderBR.h:
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        * rendering/RenderFieldset.cpp:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderListItem.cpp:
        * rendering/RenderTableRow.cpp:
        * rendering/RenderView.h:
        * rendering/RootInlineBox.h:
        * rendering/SVGInlineTextBox.cpp:
        * rendering/SVGInlineTextBox.h:
        * rendering/TableLayout.h:
        * rendering/break_lines.h:
        * rendering/style/SVGRenderStyle.cpp:
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        * rendering/style/SVGRenderStyleDefs.h:
        * svg/GradientAttributes.h:
        * svg/LinearGradientAttributes.h:
        * svg/PatternAttributes.h:
        * svg/RadialGradientAttributes.h:
        * svg/SVGAElement.cpp:
        * svg/SVGAngle.idl:
        * svg/SVGAnimateColorElement.cpp:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.cpp:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedPathData.cpp:
        * svg/SVGAnimatedPathData.h:
        * svg/SVGAnimatedPoints.cpp:
        * svg/SVGAnimatedPoints.h:
        * svg/SVGAnimationElement.cpp:
        * svg/SVGCircleElement.cpp:
        * svg/SVGClipPathElement.cpp:
        * svg/SVGColor.cpp:
        * svg/SVGColor.idl:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        * svg/SVGDefsElement.cpp:
        * svg/SVGDescElement.cpp:
        * svg/SVGDescElement.h:
        * svg/SVGDocument.idl:
        * svg/SVGElement.idl:
        * svg/SVGElementInstanceList.cpp:
        * svg/SVGElementInstanceList.h:
        * svg/SVGEllipseElement.cpp:
        * svg/SVGExternalResourcesRequired.cpp:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFuncAElement.cpp:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.cpp:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.cpp:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.cpp:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        * svg/SVGGElement.cpp:
        * svg/SVGGradientElement.cpp:
        * svg/SVGHKernElement.idl:
        * svg/SVGLangSpace.cpp:
        * svg/SVGLangSpace.h:
        * svg/SVGLength.cpp:
        * svg/SVGLength.h:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.cpp:
        * svg/SVGLengthList.h:
        * svg/SVGLineElement.cpp:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGList.h:
        * svg/SVGListTraits.h:
        * svg/SVGLocatable.h:
        * svg/SVGMaskElement.cpp:
        * svg/SVGMatrix.idl:
        * svg/SVGMetadataElement.cpp:
        * svg/SVGMetadataElement.h:
        * svg/SVGMetadataElement.idl:
        * svg/SVGNumber.idl:
        * svg/SVGNumberList.cpp:
        * svg/SVGNumberList.h:
        * svg/SVGPaint.cpp:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathSeg.h:
        * svg/SVGPathSegArc.cpp:
        * svg/SVGPathSegArc.h:
        * svg/SVGPathSegClosePath.cpp:
        * svg/SVGPathSegClosePath.h:
        * svg/SVGPathSegCurvetoCubic.cpp:
        * svg/SVGPathSegCurvetoCubic.h:
        * svg/SVGPathSegCurvetoCubicSmooth.cpp:
        * svg/SVGPathSegCurvetoCubicSmooth.h:
        * svg/SVGPathSegCurvetoQuadratic.cpp:
        * svg/SVGPathSegCurvetoQuadratic.h:
        * svg/SVGPathSegCurvetoQuadraticSmooth.cpp:
        * svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * svg/SVGPathSegLineto.cpp:
        * svg/SVGPathSegLineto.h:
        * svg/SVGPathSegLinetoHorizontal.cpp:
        * svg/SVGPathSegLinetoHorizontal.h:
        * svg/SVGPathSegLinetoVertical.cpp:
        * svg/SVGPathSegLinetoVertical.h:
        * svg/SVGPathSegMoveto.cpp:
        * svg/SVGPathSegMoveto.h:
        * svg/SVGPatternElement.cpp:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.cpp:
        * svg/SVGPointList.h:
        * svg/SVGPolyElement.cpp:
        * svg/SVGPolygonElement.cpp:
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.cpp:
        * svg/SVGPolylineElement.h:
        * svg/SVGPreserveAspectRatio.cpp:
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRect.idl:
        * svg/SVGRectElement.cpp:
        * svg/SVGRenderingIntent.h:
        * svg/SVGSVGElement.idl:
        * svg/SVGScriptElement.cpp:
        * svg/SVGSetElement.cpp:
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.cpp:
        * svg/SVGStringList.cpp:
        * svg/SVGStringList.h:
        * svg/SVGStylable.cpp:
        * svg/SVGStylable.h:
        * svg/SVGStyleElement.cpp:
        * svg/SVGStyleElement.h:
        * svg/SVGStyledElement.h:
        * svg/SVGStyledLocatableElement.cpp:
        * svg/SVGStyledLocatableElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSwitchElement.cpp:
        * svg/SVGSymbolElement.cpp:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTSpanElement.cpp:
        * svg/SVGTSpanElement.h:
        * svg/SVGTests.h:
        * svg/SVGTextElement.cpp:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPositioningElement.cpp:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.cpp:
        * svg/SVGTitleElement.h:
        * svg/SVGTransform.cpp:
        * svg/SVGTransform.h:
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.cpp:
        * svg/SVGTransformList.h:
        * svg/SVGTransformable.h:
        * svg/SVGURIReference.h:
        * svg/SVGUnitTypes.h:
        * svg/SVGUseElement.cpp:
        * svg/SVGViewElement.cpp:
        * svg/SVGZoomAndPan.cpp:
        * svg/SVGZoomAndPan.h:
        * svg/SVGZoomEvent.cpp:

2009-11-05  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION Clean up security origin usage in DOM Storage.
        https://bugs.webkit.org/show_bug.cgi?id=31188

        Clean up security origin usage in DOM Storage.  This fixes a bug in my
        refactoring here: https://bugs.webkit.org/show_bug.cgi?id=31149

        Instead of having StorageAreaSync's constructor (which is called in the
        constructor for StorageAreaImpl) calling a method on StoargeAreaImpl to get the
        database identifier, simply have StorageAreaImpl pass the identifier into
        StorageAreaSync.

        No test because there's no change in externally observable behavior.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::create):
        (WebCore::StorageAreaSync::StorageAreaSync):
        * storage/StorageAreaSync.h:

2009-11-05  Scott Violet  <sky@google.com>

        Reviewed by Dimitri Glazkov.

        Need notification of scrolling frame
        https://bugs.webkit.org/show_bug.cgi?id=31145

        Adds FrameLoaderClient::didChangeScrollOffset that is called when
        the frame scrolls. This will be used to know when history state
        needs to be updated.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didChangeScrollOffset):
        * page/FrameView.cpp:
        (WebCore::FrameView::valueChanged):

2009-11-05  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        [V8] Update bindings to use new API for external arrays
        https://bugs.webkit.org/show_bug.cgi?id=31181

        No new tests; covered by existing WebGL tests.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setIndexedPropertiesToExternalArray):
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertToV8Object):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/custom/V8CanvasArrayCustom.h:
        (WebCore::constructCanvasArray):

2009-11-05  Alpha Lam  <hclam@chromium.org>

        Not reviewed, Chromium build fix.

        50561 introduces a custom method for SVGMatrix, we need to implement
        this in V8.

        * bindings/v8/custom/V8CustomBinding.h:
        Adding definition for V8SVGMatrixMultiply.
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Implement V8SVGMatrixMultiply according to the same method in JSC.

2009-11-05  Jeremy Orlow  <jorlow@chromium.org>

        Revert 50569 since it broke QT.  Build fix and just a revert, so no review.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setSessionStorageEnabled):
        * page/Settings.h:
        (WebCore::Settings::sessionStorageEnabled):

2009-11-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        REGRESSION: Web Inspector doesn't show CSS rules properly for iframes

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

        Test: inspector/styles-iframe.html

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getStyles):
        (InjectedScript.getComputedStyle):
        (InjectedScript.addStyleSelector):
        * inspector/front-end/TestController.js:
        (WebInspector.TestController.prototype.notifyDone):
        (WebInspector.TestController.prototype.runAfterPendingDispatches):
        (WebInspector.evaluateForTestInFrontend.invokeMethod):
        (WebInspector.evaluateForTestInFrontend):

2009-11-05  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Geoffrey Garen and Dimitri Glazkov.

        Rehashing of EventListenerMap leads to loss of EvenListenerList.
        https://bugs.webkit.org/show_bug.cgi?id=31027

        Tested by new fast/events/event-listener-map-rehash-crash.html.

        EventListenerMap modified to store pointers to listener vectors:
        * dom/EventTarget.cpp:
        (WebCore::EventTargetData::~EventTargetData):
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::fireEventListeners):
        (WebCore::EventTarget::getEventListeners):
        (WebCore::EventTarget::removeAllEventListeners):
        * dom/EventTarget.h:

        Usages updated after interface changes:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferEventListenersToShadowTree):

2009-11-05  Dan Kegel  <dank@chromium.org>

        Reviewed by Dmitri Titov.

        Add missing initialization for m_createdByParser.
        https://bugs.webkit.org/show_bug.cgi?id=31089

        Test: fast/dom/beforeload/pi-before-load.xhtml in Valgrind

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::ProcessingInstruction):

2009-11-04  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        DOM Storage runtime flag changes
        https://bugs.webkit.org/show_bug.cgi?id=30602

        Part 2/2.

        Revert my changes to Settings and instead implement DOM Storage enabling via
        the methods agreed upon in https://bugs.webkit.org/show_bug.cgi?id=30240

        This stuff was (intentionally) never exposed to web pages or DRT, so there's no
        LayoutTest visible changes and thus no tests.

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):
        * page/DOMWindow.idl:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * storage/Storage.cpp:
        (WebCore::Storage::setLocalStorageAvailable):
        (WebCore::Storage::localStorageAvailable):
        (WebCore::Storage::setSessionStorageAvailable):
        (WebCore::Storage::sessionStorageAvailable):
        * storage/Storage.h:

2009-11-05  Jian Li  <jianli@chromium.org>

        Reviewed by Pavel Feldman.

        Bug 31108 - [V8] REGRESSION: Pause on exception is broken
        https://bugs.webkit.org/show_bug.cgi?id=31108

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::reportException):

2009-11-05  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitri Titov.

        We should not bubble up events if we drag something to an iframe that
        has an invalid source.
        https://bugs.webkit.org/show_bug.cgi?id=30469

        Test: http/tests/misc/bubble-drag-events.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDragAndDropForTarget):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):
        * page/EventHandler.h:
        (WebCore::EventHandler::):

2009-11-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: speed up Timelines Clear by a factor of thousands.

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

        * inspector/front-end/utilities.js:
        (Element.prototype.removeChildren):

2009-11-05  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        If high memory usage is detected, hint to V8 that it might be due
        to external objects retained by V8 objects.
        https://bugs.webkit.org/show_bug.cgi?id=31051

        * bindings/v8/V8GCController.cpp:
        (WebCore::GetMemoryUsageInMB):
        (WebCore::V8GCController::gcEpilogue):
        (WebCore::V8GCController::checkMemoryUsage):
        * bindings/v8/V8GCController.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):

2009-11-05  Jeff Schiller  <codedread@gmail.com>

        Reviewed by Simon Fraser.

        Correct order of matrix multiplication for SVGMatrix.
        https://bugs.webkit.org/show_bug.cgi?id=16062

        Test: svg/dom/SVGMatrix-interface.xhtml

        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        * svg/SVGMatrix.idl:

2009-11-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make resource-related records in timeline
        actually take some time.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.prototype.reset):

2009-11-04  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Simplify LocalStorageThread
        https://bugs.webkit.org/show_bug.cgi?id=30935

        This is a re-submit of 50519.  LocalStorageTask should have never been ref
        counted.  I've removed that and switched a PassRefPtr over to a PassOwnPtr.

        On LocalStoragethread: Remove reference counting. Get rid of locking. Make some
        of the method names a bit more clear. Assert proper thread usage. Join rather
        than detaching the thread and doing an ad-hoc form of join. Avoid touching
        variables on the background thread when simple to do so.  Also create a generic
        scheduleTask function rather than one for each task.

        No behavior should have changed.

        * storage/LocalStorageTask.h:
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::create):
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::~LocalStorageThread):
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::threadEntryPointCallback):
        (WebCore::LocalStorageThread::threadEntryPoint):
        (WebCore::LocalStorageThread::scheduleTask):
        (WebCore::LocalStorageThread::terminate):
        (WebCore::LocalStorageThread::performTerminate):
        * storage/LocalStorageThread.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::~StorageSyncManager):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h:

2009-11-04  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Calling databaseIdentifier on LocalStorage's background thread is not safe.
        https://bugs.webkit.org/show_bug.cgi?id=31149

        Calling SecurityOrigin::databaseIdentifier on LocalStorage's background thread
        is not safe.  databaseIdentifier does a bunch of string concatenation which
        ref-counts StringImpls in some cases.  This was caught by valgrind thread
        sanitizer: http://code.google.com/p/chromium/issues/detail?id=25645

        There's no way to test for such racyness, unfortunately.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::performImport):
        * storage/StorageAreaSync.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::fullDatabaseFilename):
        * storage/StorageSyncManager.h:

2009-11-03  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Clean up StorageAreaSync
        https://bugs.webkit.org/show_bug.cgi?id=31100

        Major fixes: Break the ref count cycle for StorageArea on the main
        thread, not the background thread since the latter is not safe.
        Length() needs to block on the import completing.

        Small fixes: setItem needs to handle the copy on write case even if it
        has an exception.  setItem and removeItem should just bail from the
        the function if the value hasn't changed rather than wrapping the end
        in an if block.  Clear should only send an event if it wasn't already
        cleared.  StorageAreaSync should assert that the final sync was
        scheduled.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::length):
          Forgot to block on the import.
        (WebCore::StorageAreaImpl::key):
        (WebCore::StorageAreaImpl::setItem):
          Handle the copy on write case even when there's an exception.
        (WebCore::StorageAreaImpl::removeItem):
        (WebCore::StorageAreaImpl::clear):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::~StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::performImport):
        (WebCore::StorageAreaSync::markImported):
        (WebCore::StorageAreaSync::blockUntilImportComplete):
        * storage/StorageAreaSync.h:

2009-11-05  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for WebCore's CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=31114

        Inherits CachedResource class from Noncopyable because its (its child
        class) CachedCSSStyleSheet instantiated by 'new' in WebCore/loader/Cache.cpp:75 
        and it is no need to be copyable.

        * loader/CachedResource.h:

2009-11-04  Mark Mentovai  <mark@chromium.org>

        Reviewed by Mark Rowe.

        Separate the difference between HAVE(CGINTERPOLATION_MEDIUM), which
        is true when building on 10.6 or later, and USE(CGINTERPOLATION_MEDIUM)
        which is true when targeting 10.6 or later.

        HAVE(CGINTERPOLATION_MEDIUM) indicates that kCGInterpolationMedium
        is present in the CGInterpolationQuality enum, and must be handled
        by a switch that has cases for each enumerated value.

        USE(CGINTERPOLATION_MEDIUM) indicates that the product will only run
        on 10.6 or later, and that CoreGraphics will understand when
        InterpolationMedium is mapped to kCGInterpolationMedium at runtime.

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

2009-11-04  Dan Kegel  <dank@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix buffer overrun in WebCore::Page::userStyleSheetLocationChanged()
        https://bugs.webkit.org/show_bug.cgi?id=31138

        Test: LayoutTests/platform/mac/fast/loader/user-stylesheet-fast-path.html in Valgrind

        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):

2009-11-04  Timothy Hatcher  <timothy@apple.com>

        Update the Web Inspector Timeline panel to better match the mock-up.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.prototype._dragWindow):
        (WebInspector.TimelinePanel.prototype._resizeWindowLeft):
        (WebInspector.TimelinePanel.prototype._resizeWindowRight):
        (WebInspector.TimelineCategoryTreeElement.prototype.onattach):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        (WebInspector.TimelineRecordTreeElement.prototype.refresh):
        (WebInspector.TimelineCategoryGraph):
        * inspector/front-end/inspector.css:

2009-11-05  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=25439
        Deleting when in front of a block image removes character from previous paragraph

        Added editing/deleting/25439-{1,2,3}.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Block images, tables and HRs cannot 
        be made inline with other content.  Instead of merging, just move the caret to just before 
        the selection we deleted.
        * editing/htmlediting.cpp:
        (WebCore::firstInSpecialElement): Added a FIXME.  This function begins iterating up from pos.node(), which 
        doesn't necessarily contain pos (suppose pos was [img, 0]).
        (WebCore::lastInSpecialElement): Ditto.
        (WebCore::isRenderedAsNonInlineTableImageOrHR): Moved from visible_units.cpp.  Added a check for non-inline images.
        * editing/htmlediting.h:
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph): Use moved/renamed function.  Removed FIXME.  The problem causing 
        5027702 is now squarely in first/lastInSpecialElement
        (WebCore::endOfParagraph): Ditto.
        
2009-11-04  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Hang in Mail on attempting to change indent level.
        <rdar://problem/7131805>
        https://bugs.webkit.org/show_bug.cgi?id=31127

        The hang was caused by an infinite loop inside outdentRegion.
        The code did not account for the fact that, when a list item
        contains multiple paragraphs, outdent moves all paragraphs at
        once, invalidating some of the positions we keep track of in the loop.
        Some code refactoring has also been done to minimize duplicated code.
        
        Test: editing/execCommand/outdent-multiparagraph-list.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion): Moved code in common with
        outdentRegion to doApply.
        (WebCore::IndentOutdentCommand::outdentRegion): Fixed endless loop.
        (WebCore::IndentOutdentCommand::doApply): Some code refactoring.
        * editing/IndentOutdentCommand.h: Added VisiblePosition parameters to
        indentRegion and outdentRegion.

2009-11-04  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Carlson.

        Volume slider doesn't have a thumb
        https://bugs.webkit.org/show_bug.cgi?id=31135

        Fixed an incorrect if statement that prevents volume slider
        being updated.

        The statement checks if the slider value equals to the current
        volume value of the media control to avoid updating the volume
        slider. Updating the volume slider control shouldn't be within
        this condition because we explicitly set them to be equals
        during creation of the controls and also when mouse events are
        received on the volume control.

        No new tests because existing code breaks:
        LayoutTests/media/video-volume-slider.html

        It should now start passing on Chromium.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlVolumeSliderElement::update):
        Update the volume slider regardless of the current volume value
        of the media control.

2009-11-04  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by David Levin.

        Need to properly disable applicationCache at runtime
        https://bugs.webkit.org/show_bug.cgi?id=30417

        Adding applicationCacheEnabled bit to V8 RuntimeEnabledFeatures.

        No new exposed functionality, so no new tests.

        * bindings/v8/RuntimeEnabledFeatures.cpp:
        * bindings/v8/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setApplicationCacheEnabled):
        (WebCore::RuntimeEnabledFeatures::applicationCacheEnabled):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * page/DOMWindow.idl:

2009-11-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=31143
        Assertion failure in CredentialStorage::set() when proxy credentials are being set

        No test, cannot test proxy behavior.

        * platform/network/CredentialStorage.cpp: (WebCore::CredentialStorage::set): Account for the
        possibility of null url. Release mode changes are likely inconsequential - e.g. we used to
        add "://" to origin set, which is weird, but safe.

2009-11-04  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Leftover Breakpoints in the Sidebar Pane
        https://bugs.webkit.org/show_bug.cgi?id=30659

        No new tests.

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

2009-11-04  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Timothy Hatcher.

        WebInspector: Use a different method to identify the webkit port in
        InspectorBackent::platform().
        This corrects the inspector expected behavior with Qt on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=31116

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::platform):
        (WebCore::InspectorBackend::port):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/front-end/InspectorControllerStub.js:
        (.WebInspector.InspectorControllerStub.prototype.port):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.toolbarDragStart):

2009-11-04  Benjamin Otte  <otte@gnome.org>

        Reviewed by Gustavo Noronha.

        Update Cairo requirement to 1.6.

        Also remove all conditional code and workarounds for older versions of
        Cairo.
        In particular, gain image quality by removing the use of
        CAIRO_FILTER_NEAREST when rendering images and use the default
        bilinear filter instead.
        https://bugs.webkit.org/show_bug.cgi?id=19266

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipOut):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::isEmpty):
        (WebCore::Path::boundingRect):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozWidget):

2009-11-04  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Restore removed string conversion after cleanup.

        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::computeHash):

2009-11-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Need to implement ARIA role="combobox"
        https://bugs.webkit.org/show_bug.cgi?id=31096

        Test: accessibility/aria-combobox.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isComboBox):
        (WebCore::AccessibilityObject::isExpanded):
        (WebCore::AccessibilityObject::expandObject):
        (WebCore::AccessibilityObject::increment):
        (WebCore::AccessibilityObject::decrement):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::expandObject):
        (WebCore::AccessibilityRenderObject::isExpanded):
        (WebCore::createARIARoleMap):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityPerformShowMenuAction]):
        * html/HTMLAttributeNames.in:

2009-11-04  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Fixes naming inconsistencies in TimelineRecordFactory.
        https://bugs.webkit.org/show_bug.cgi?id=31132

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeRecord):
        (WebCore::TimelineRecordFactory::createXHRLoadRecord):
        (WebCore::TimelineRecordFactory::createEvaluateScriptRecord):
        (WebCore::TimelineRecordFactory::createMarkTimelineRecord):
        (WebCore::TimelineRecordFactory::createResourceSendRequestRecord):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseRecord):
        (WebCore::TimelineRecordFactory::createResourceFinishRecord):
        (WebCore::TimelineRecordFactory::createPaintRecord):
        * inspector/TimelineRecordFactory.h:

2009-11-04  Eric Z. Ayers  <zundel@google.com>

        Reviewed by Pavel Feldman.

        Followon to bug 31080, which protects Timeline
        instrumentation in the case where InspectorTimelineAgent
        is enabled or disabled during an event dispatch.
        
        https://bugs.webkit.org/show_bug.cgi?id=31121

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::inspectorTimelineAgent):
        (WebCore::DOMWindow::dispatchEvent):
        * page/DOMWindow.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2009-11-04  Jeremy Orlow  <jorlow@chromium.org>

        Revert 50519 while I work out what went wrong.

        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::create):
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::localStorageThreadStart):
        (WebCore::LocalStorageThread::localStorageThread):
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        (WebCore::LocalStorageThread::terminate):
        (WebCore::LocalStorageThread::performTerminate):
        * storage/LocalStorageThread.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::~StorageSyncManager):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h:

2009-11-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add basic support for resource events and marks.
        Couple of drive-by fixes. Enabling the panel!

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelineCategoryTreeElement.prototype._onCheckboxClicked):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2009-11-03  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Simplify LocalStorageThread
        https://bugs.webkit.org/show_bug.cgi?id=30935

        On LocalStoragethread: Remove reference counting. Get rid of locking. Make some
        of the method names a bit more clear. Assert proper thread usage. Join rather
        than detaching the thread and doing an ad-hoc form of join. Avoid touching
        variables on the background thread when simple to do so.  Also create a generic
        scheduleTask function rather than one for each task.

        No behavior should have changed.

        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::create):
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::~LocalStorageThread):
        (WebCore::LocalStorageThread::start):
        (WebCore::LocalStorageThread::threadEntryPointCallback):
        (WebCore::LocalStorageThread::threadEntryPoint):
        (WebCore::LocalStorageThread::scheduleTask):
        (WebCore::LocalStorageThread::terminate):
        (WebCore::LocalStorageThread::performTerminate):
        * storage/LocalStorageThread.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::~StorageSyncManager):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h:

2009-11-04  Vadim Zeitlin  <vadim@wxwidgets.org>

        Reviewed by Eric Seidel.

        [wx] Small cleanup: avoid unnecessary wxString::mb_str() calls.

        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::computeHash):

2009-11-04  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Adds lightweight network resources to InspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=31065

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createResourceSendRequestTimelineRecord):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseTimelineRecord):
        (WebCore::TimelineRecordFactory::createResourceFinishTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:

2009-11-04  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] ASSERT failure when receiving 401 HTTP Authentication response.
        https://bugs.webkit.org/show_bug.cgi?id=31077

        Allow sending the response body under the same conditions that we
        allow it to finish without reporting an error.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2009-11-04  Adam Roben  <aroben@apple.com>

        Sort WebCore.base.exp

        Rubber-stamped by Dan Bernstein.

        * WebCore.base.exp: Sorted.

2009-11-04  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rollout.

        Revert r50496 because it broke all layout tests on QtBuildBot.

        * WebCore.pro:
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::fontCache):
        (WebCore::FontCache::FontCache):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::isHashTableDeletedValue):
        (WebCore::FontPlatformDataCacheKey::):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::FontPlatformDataCacheKey::hash):
        (WebCore::FontPlatformDataCacheKey::computeHash):
        (WebCore::FontPlatformDataCacheKey::hashTableDeletedSize):
        (WebCore::FontPlatformDataCacheKeyHash::hash):
        (WebCore::FontPlatformDataCacheKeyHash::equal):
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue):
        (WebCore::FontPlatformDataCacheKeyTraits::constructDeletedValue):
        (WebCore::FontPlatformDataCacheKeyTraits::isDeletedValue):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::releaseFontData):
        (WebCore::FontCache::purgeInactiveFontData):
        (WebCore::FontCache::addClient):
        (WebCore::FontCache::removeClient):
        (WebCore::FontCache::invalidate):
        * platform/graphics/qt/FontFallbackListQt.cpp: Added.
        (WebCore::FontFallbackList::FontFallbackList):
        (WebCore::FontFallbackList::invalidate):
        (WebCore::FontFallbackList::releaseFontData):
        (WebCore::FontFallbackList::determinePitch):
        (WebCore::FontFallbackList::fontDataAt):
        (WebCore::FontFallbackList::fontDataForCharacters):
        (WebCore::FontFallbackList::setPlatformFont):
        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::pixelSize):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2009-11-04  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=31044
        [Gtk] assertion when webkit_accessible_get_index_in_parent attempts to get parent of the web view

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkParentOfWebView):
        (webkit_accessible_get_index_in_parent):
        (webkit_accessible_get_parent):

2009-11-04  Dominik Röttsches  <dominik.roettsches@access-company.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=15914
        [GTK] Implement Unicode functionality using GLib

        Initial version of this patch by Jürg Billeter and Naiem Shaik.
        Patch 2/4 - Moving TextCodecs to GLib
        
        Added probing for a hard-coded lists of text encodings.
        The basis of this list is taken from the encodings supported by iconv,
        then extended by e.g. tis-620, windows-1251, euc-kr, windows-1253 and
        a number of Chinese ones.

        Probing is necessary with the current design of text codecs
        as iconv/GLib do not support enumerating available encodings.

        * GNUmakefile.am:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):
        * platform/text/gtk/TextCodecGtk.cpp: Added.
        (WebCore::):
        (WebCore::newTextCodecGtk):
        (WebCore::TextCodecGtk::isEncodingAvailable):
        (WebCore::TextCodecGtk::registerEncodingNames):
        (WebCore::TextCodecGtk::registerCodecs):
        (WebCore::TextCodecGtk::registerBaseEncodingNames):
        (WebCore::TextCodecGtk::registerBaseCodecs):
        (WebCore::TextCodecGtk::registerExtendedEncodingNames):
        (WebCore::TextCodecGtk::registerExtendedCodecs):
        (WebCore::TextCodecGtk::TextCodecGtk):
        (WebCore::TextCodecGtk::~TextCodecGtk):
        (WebCore::TextCodecGtk::releaseIConv):
        (WebCore::TextCodecGtk::createIConvDecoder):
        (WebCore::TextCodecGtk::createIConvEncoder):
        (WebCore::TextCodecGtk::decode):
        (WebCore::TextCodecGtk::encode):
        * platform/text/gtk/TextCodecGtk.h: Added.

2009-11-04  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Unify redudant methods which will always return the same value.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeSelection):
        * platform/gtk/PasteboardHelper.h:

2009-11-04  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=31035
        [GTK] some accessibility tests hitting assertion in debug builds

        Removes the assertions in webkit_accessible_ref_child; adds sanity checks.
        Any app or AT can attempt to ref a child at a bogus index.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_ref_child):

2009-11-04  Benjamin Otte  <otte@gnome.org>

        Reviewed by Jan Alonzo.

        [gtk] Use gst_element_class_set_details_simple()

        Cosmetic change, just code simplification

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_base_init):
2009-11-04  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Adds paint rectangle information to TimelineAgent's didPaint callback.
        https://bugs.webkit.org/show_bug.cgi?id=31087

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willPaint):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createPaintTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):

2009-11-04  Jaime Yap  <jaimeyap@google.com>

        Reviewed by Timothy Hatcher.

        This patch adds API to the console object for annotating the
        inspector timeline. This allows developers to mark logical
        checkpoints in their apps and have them overlaid in the event
        record tree.

        tests updated: LayoutTests/fast/dom/Window/window-properties.html
        https://bugs.webkit.org/show_bug.cgi?id=31082


        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::markTimeline):
        * inspector/InspectorController.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createMarkTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:
        * page/Console.cpp:
        (WebCore::Console::markTimeline):
        * page/Console.h:
        * page/Console.idl:

2009-11-03  Simon Hausmann  <hausmann@webkit.org>

        Unreviewed build fix for WebInspector with Qt build.

        Simply re-generate the Qt resource file by running
        WebKitTools/Scripts/generate-qt-inspector-resource

        * inspector/front-end/WebKit.qrc:

2009-11-02  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Handle fonts like the other ports

        Remove FontFallbackListQt and rely on the common FontFallbackList
        to handle the fonts. FontCache and FontPlatformData have been
        updated to work with the common FontFallbackList.

        In the previous implementation, FontPlatformDataCacheKey
        was a clone of FontPlatformData with the hashing
        capabilities added in order to use it as a key in the cache's
        hashmap. FontPlatformData has been modified to handle the hashing
        function directly so the data are not copied twice in memory.

        FontFallbackList::fontDataAt() from FontFallbackListQt was a copy of
        code from FontCache::getFontData() and FontFallbackList::fontDataAt().
        The behavior is similar except currFamily->family().length() was
        not tested and the fallback fonts selector were not used.

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

        Test: svg/text/text-font-invalid.html

        * WebCore.pro:
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/qt/FontFallbackListQt.cpp:
        Removed. We now use the implementation from FontFallbackList.cpp
        * platform/graphics/qt/FontPlatformData.h:
        Add hashing capabilities to be able to use the data with the FontCache.
        This was previously done in FontCacheQt.cpp
        (WebCore::FontPlatformData::FontPlatformData):
        Added a boolean to identify deleted value in the hash table.
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2009-11-03  Dan Bernstein  <mitz@apple.com>

        Leopard build fix

        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac):
        (WebCore::core):

2009-11-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        Fix an assertion failure in core(NSURLProtectionSpace *) by handling NTLM
        authentication in AuthenticationMac

        * platform/network/mac/AuthenticationMac.mm:

2009-11-03  Eric Z. Ayers  <zundel@google.com>

        Reviewed by Timothy Hatcher.

        Fixes a problem where the timeline instrumentation crashes if
        timeline profiling is enabled or disabled in the middle of an
        event dispatch.

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

        Test: inspector/timeline-trivial.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::processingUserGestureEvent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):

2009-11-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Allow a frame to go back to copy-on-scroll when it ceases being overlapped

        The code was not testing slow-scrolling frames for overlappedness, thinking the answer
        would not matter. That is not the case if the only reason for the slow-scrolling is
        being overlapped.

        * page/FrameView.cpp:
        (WebCore::FrameView::useSlowRepaintsIfNotOverlapped): Added. Returns whether there is any
        reason besides being overlapped that the frame would need to fully repaint on scroll.
        * page/FrameView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint): Use useSlowRepaintsIfNotOverlapped().

2009-11-03  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, Qt build fix.

        Need to use right capitalization for include file.

        * page/Navigator.cpp:

2009-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Migrate from top bar filters to check boxes in Timeline.

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

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.showCategory):
        (WebInspector.AbstractTimelinePanel.prototype.hideCategory):
        (WebInspector.AbstractTimelinePanel.prototype.filter):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelineCategoryTreeElement.prototype.onattach):
        (WebInspector.TimelineCategoryTreeElement.prototype._onCheckboxClick):
        (WebInspector.TimelineCategoryGraph.prototype.clearChunks):
        (WebInspector.TimelineCategoryGraph.prototype.set dimmed):
        * inspector/front-end/inspector.css:

2009-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: clear overview on Clear action and panel reset.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.prototype.reset):

2009-11-03  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Dimitri Glazkov.

        Imported action and rules python files that WebCore.gyp depends on. 
        These files used to live in chromium.org and deal mostly with auto-generation
        of code by wrapping existing webkit perl scripts.

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

        * WebCore.gyp/WebCore.gyp: Fixed paths in actions and rules.
        * WebCore.gyp/scripts/action_csspropertynames.py: Added.
        * WebCore.gyp/scripts/action_cssvaluekeywords.py: Added.
        * WebCore.gyp/scripts/action_makenames.py: Added.
        * WebCore.gyp/scripts/action_maketokenizer.py: Added.
        * WebCore.gyp/scripts/action_useragentstylesheets.py: Added.
        * WebCore.gyp/scripts/rule_binding.py: Added.
        * WebCore.gyp/scripts/rule_bison.py: Added.
        * WebCore.gyp/scripts/rule_gperf.py: Added.

2009-11-03  Bradley Green  <brg@chromium.org>

        Reviewed by Dmitry Titov.

        Implement window.navigator.registerProtocolHandler in webkit,
        https://bugs.webkit.org/b/29651

        Also implemented its sister API window.navigator.registerContentHandler.

        These methods are as described in the HTML5 specification which can be
        found here,
        http://dev.w3.org/html5/spec/Overview.html#dom-navigator-registerprotocolhandler
        http://dev.w3.org/html5/spec/Overview.html#dom-navigator-registercontenthandler

        As specified in the document, the behavior of the browser is determined
        by the current registered handler.  The state of a registered handler
        can change at any time, with the user clearing a registered handler,
        registering a different page as handler, or deferring the hander to the
        OS.  If webkit was to track the state of the currently registered
        handlers, it would need more APIs and complexity to keep in sync with
        user actions reported to webkit from the UA.  For simplicity, the state
        of protocol handlers should be kept isolated from webkit and webkit only
        notifies the UA that a page has made the call.  The UA is then
        responsible for correctly handling the registerProtocolHandler call and
        the redirects which result from registration.

        We do however follow the specification in insuring that the reserved
        schemes and mimeTypes are not passed to the UA as custom handler
        registration tests.  We also insure that the "%s" token is present as
        required by the specification.

        Updated test expectations for window.clientInformation and navigator
        objects.

        Tests: fast/dom/registerContentHandler.html
               fast/dom/registerProtocolHandler.html

        * page/Chrome.cpp:
        (WebCore::Chrome::registerProtocolHandler):
        (WebCore::Chrome::registerContentHandler):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::registerProtocolHandler):
        (WebCore::ChromeClient::registerContentHandler):
        * page/Navigator.cpp:
        (WebCore::verifyCustomHandlerURL):
        (WebCore::verifyProtocolHandlerScheme):
        (WebCore::Navigator::registerProtocolHandler):
        (WebCore::verifyProtocolHandlerMimeType):
        (WebCore::Navigator::registerContentHandler):
        * page/Navigator.h:
        * page/Navigator.idl:

2009-11-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=31079 - Remove #include "Page.h" from Document.h

        No new tests. (No change in functionality)

        * dom/Document.cpp:
        (WebCore::Document::inspectorTimelineAgent): Moved from Document.h
        * dom/Document.h:

        Include "Page.h" directly:
        * html/HTMLVideoElement.cpp:
        * loader/RedirectScheduler.cpp:
        * page/History.cpp:
        * rendering/MediaControlElements.cpp:
        * storage/StorageAreaImpl.cpp:

2009-11-03  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: hover over JS "things" in source and see their values
        https://bugs.webkit.org/show_bug.cgi?id=30913

        * inspector/front-end/SourceFrame.js:

2009-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: update timeline content boundaries on timer.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.refresh):
        (WebInspector.TimelinePanel.prototype._setWindowPosition):

2009-11-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson and Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=31070
        Fix <rdar://problem/7194735> Crashes at RenderText::RenderText()
        Fix <rdar://problem/6937089> Crashes at RenderWidget::destroy()

        Tests: plugins/attach-during-destroy.html
               plugins/destroy-reentry.html

        These crashes were caused by plug-in code running during detach(),
        causing re-entry into RenderWidget::destroy() in one case and a call
        into attach() in the other. The fix is to prevent plug-in code from
        being called at certain unsafe times (during attach(), detach(), and
        recalcStyle()) by deferring changes to the widget hierarchy.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Suspend widget hierarchy updates
            during style recalculation.

        * dom/Element.cpp:
        (WebCore::Element::attach): Suspend widget hierarchy updates during
            attach().
        (WebCore::Element::detach): Suspend widget hierarchy updates during
            detach().

        * rendering/RenderWidget.cpp:
        (WebCore::widgetNewParentMap): Returns a static map of pending changes
            to the widget hierarchy.
        (WebCore::RenderWidget::suspendWidgetHierarchyUpdates): Increments the
            suspend count.
        (WebCore::RenderWidget::resumeWidgetHierarchyUpdates): Decrements the
            suspend count. If the count is going to be zero, updates the widget
            hierarchy by executing the pending changes stored in the map.
        (WebCore::moveWidgetToParentSoon): Updates the widget hierarchy
            immediately or makes or updates an entry in the map, depending on
            whether updates are suspended.
        (WebCore::RenderWidget::destroy): Removed earlier bandaid fix for
            <rdar://problem/6937089>.
        (WebCore::RenderWidget::setWidgetGeometry): Assert that widget updates
            are not suspended, because this function updates the widget’s
            bounds, which can result in arbitrary native and JavaScript code
            execution. I think this assertion is true thanks to some deferred-
            update mechanisms that have already been deployed in other places
            in the code.
        (WebCore::RenderWidget::setWidget): Call moveWidgetToParentSoon instead
            of changing the widget hierarchy directly.
        * rendering/RenderWidget.h: Declared suspendWidgetHierarchyUpdates()
            and resumeWidgetHierarchyUpdates().

2009-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: only show timeline records that contribute
        to the current window.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.refresh):
        (WebInspector.TimelineGraph):
        (WebInspector.TimelineGraph.prototype.refresh):

2009-11-03  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Watch expression editor should stay open after Add button was clicked
        https://bugs.webkit.org/show_bug.cgi?id=31049

        No new tests, was a regression, use existing manual test.

        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        (WebInspector.WatchExpressionsSection.prototype.addExpression):

2009-11-03  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        Fix an off-by-one in the CSS lexer that causes memory corruption in
        hard-to-trigger circumstances.

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

        Test: fast/css/end-of-buffer-crash.html

        * css/maketokenizer: Add comments, fix off-by-one.

2009-11-02  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Crash due to double-destroy related to CSS run-in property
        https://bugs.webkit.org/show_bug.cgi?id=31034
        rdar://problem/7328458

        Test: fast/css/run-in-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::destroy): Reorder destruction so the
        continuation is destroyed after anonymous children. See comment
        in the code for more details of why this is right.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::destroy): Ditto.

2009-11-03  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Fix exception in ElementsPanel.js when moving pointer out of crumbs and window

        There might be no new node under mouse if the pointer is moved out of the window
        in which case we get an exception.
        https://bugs.webkit.org/show_bug.cgi?id=31061

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._mouseMovedOutOfCrumbs):

2009-11-03  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for the dom directory of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=31053

        Inherits the following classes from Noncopyable because these are
        instantiated by 'new' and these are no need to be copyable:

        class EventNames - 'new' call: WebCore/platform/ThreadGlobalData.cpp:73
        struct PerformTaskContext - 'new' call: WebCore/dom/Document.cpp:4581
        class EventData - 'new' call: WebCore/dom/MessagePortChannel.cpp:38
        struct NodeListsNodeData - 'new' call: WebCore/dom/NodeRareData.h:51 
        struct EventTargetData - 'new' call: WebCore/dom/NodeRareData.h:100
        class NodeRareData - 'new' call: WebCore/dom/Node.cpp:552

        Inherits QualifiedName class from FastAllocBase because it is
        instantiated by 'new' in WebCore/editing/markup.cpp:319

        * dom/Document.cpp:
        * dom/EventNames.h:
        * dom/EventTarget.h:
        * dom/MessagePortChannel.h:
        * dom/NodeRareData.h:
        * dom/QualifiedName.h:

2009-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement timeline summary panel.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._createOverview):
        (WebInspector.TimelinePanel.prototype.refresh):
        (WebInspector.TimelineCategoryGraph):
        (WebInspector.TimelineCategoryGraph.prototype.get graphElement):
        (WebInspector.TimelineCategoryGraph.prototype.addChunk):
        (WebInspector.TimelineCategoryGraph.prototype.clearChunks):
        (WebInspector.TimelineGraph.prototype.refresh):
        * inspector/front-end/inspector.css:

2009-11-03  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Toggle off 'Search for node' when the Inspector window is closing

        Searching for node should be toggled off when the Inspector window is closed,
        in a platform-independent manner.
        https://bugs.webkit.org/show_bug.cgi?id=31059

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):

2009-11-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Prepare for heap profiles upstreaming:
        - pass profile type id from InspectorController;
        - this makes WebInspector.CPUProfile redundant---removed;
        - support multiple profile types when populating profiles.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::createProfileHeader):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileView):
        (WebInspector.CPUProfileView.prototype._sortData):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        * inspector/front-end/inspector.js:
        (WebInspector.addProfileHeader):

2009-11-03  Dan Kegel  <dank@chromium.org>

        Reviewed by Dimitri Glazkov.

        UMR in WebCore::AccessibilityRenderObject::children(); m_childrenDirty uninitialized in constructor
        https://bugs.webkit.org/show_bug.cgi?id=31063

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):

2009-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement Timeline Window, wire it to the bottom timeline.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.get items):
        (WebInspector.AbstractTimelinePanel.prototype.createInterface):
        (WebInspector.AbstractTimelinePanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.AbstractTimelinePanel.prototype._updateDividersLabelBarPosition):
        (WebInspector.AbstractTimelinePanel.prototype.invalidateAllItems):
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        (WebInspector.AbstractTimelinePanel.prototype.adjustScrollPosition):
        (WebInspector.AbstractTimelinePanel.prototype.addExtraDivider):
        (WebInspector.TimelineGrid):
        (WebInspector.TimelineGrid.prototype.get itemsGraphsElement):
        (WebInspector.TimelineGrid.prototype.updateDividers):
        (WebInspector.TimelineGrid.prototype.addExtraDivider):
        (WebInspector.TimelineGrid.prototype.setScrollAndDividerTop):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.ResourcesPanel.prototype.get _resources):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get categories):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelinePanel.prototype._createOverview):
        (WebInspector.TimelinePanel.prototype.setSidebarWidth):
        (WebInspector.TimelinePanel.prototype.updateMainViewWidth):
        (WebInspector.TimelinePanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.TimelinePanel.prototype.refresh):
        (WebInspector.TimelinePanel.prototype._resizeWindow):
        (WebInspector.TimelinePanel.prototype._windowResizeDragging):
        (WebInspector.TimelinePanel.prototype._dragWindow):
        (WebInspector.TimelinePanel.prototype._windowDragging):
        (WebInspector.TimelinePanel.prototype._resizeWindowLeft):
        (WebInspector.TimelinePanel.prototype._resizeWindowRight):
        (WebInspector.TimelinePanel.prototype._setWindowPosition):
        (WebInspector.TimelinePanel.prototype._endWindowDragging):
        (WebInspector.TimelineCategoryTreeElement):
        (WebInspector.TimelineCategoryTreeElement.prototype.onattach):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.get minimumBoundary):
        (WebInspector.TimelineCalculator.prototype.get maximumBoundary):
        (WebInspector.TimelineCalculator.prototype.reset):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineCalculator.prototype.formatValue):
        * inspector/front-end/inspector.css:

2009-11-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Make QWebPluginDatabase private API for now.

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

        * WebCore.pro:

2009-11-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Extended the conversion of the WebCore ResourceRequest to the
        QNetworkRequest with a mandatory originating object argument,
        which is meant to be the QWebFrame the request belongs to.

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

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/ResourceRequest.h:
        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):

2009-11-03  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        Web Inspector: monitorEvent should be monitorEvents
        https://bugs.webkit.org/show_bug.cgi?id=31042

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

2009-11-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Antti Koivisto.

        [Qt] Build fix for Windows CE

        * plugins/PluginDatabase.cpp:

2009-11-02  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Levin.

        fix accessibility webkit-style-check errors
        https://bugs.webkit.org/show_bug.cgi?id=29672

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::platformGenerateAXID):
        (WebCore::AXObjectCache::removeAXID):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::enableAccessibility):
        (WebCore::AXObjectCache::enableEnhancedUserInterfaceAccessibility):
        (WebCore::AXObjectCache::accessibilityEnabled):
        (WebCore::AXObjectCache::accessibilityEnhancedUserInterfaceEnabled):
        (WebCore::AXObjectCache::isIDinUse):
        (WebCore::AXObjectCache::objectFromAXID):
        (WebCore::AXObjectCache::):
        (WebCore::AXObjectCache::handleActiveDescendantChanged):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::selectedChildrenChanged):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::cellForColumnAndRow):
        * accessibility/AccessibilityAllInOne.cpp:
        * accessibility/AccessibilityImageMapLink.cpp:
        * accessibility/AccessibilityList.h:
        (WebCore::AccessibilityList::isList):
        * accessibility/AccessibilityListBox.cpp:
        * accessibility/AccessibilityListBox.h:
        (WebCore::AccessibilityListBox::isListBox):
        * accessibility/AccessibilityListBoxOption.cpp:
        * accessibility/AccessibilityListBoxOption.h:
        (WebCore::AccessibilityListBoxOption::isListBoxOption):
        * accessibility/AccessibilityMediaControls.h:
        (WebCore::AccessibilityMediaControl::~AccessibilityMediaControl):
        (WebCore::AccessibilityMediaTimeline::~AccessibilityMediaTimeline):
        (WebCore::AccessibilityMediaTimeline::isMediaTimeline):
        (WebCore::AccessibilityMediaControlsContainer::~AccessibilityMediaControlsContainer):
        (WebCore::AccessibilityMediaControlsContainer::roleValue):
        (WebCore::AccessibilityMediaControlsContainer::accessibilityIsIgnored):
        (WebCore::AccessibilityMediaTimeDisplay::~AccessibilityMediaTimeDisplay):
        (WebCore::AccessibilityMediaTimeDisplay::roleValue):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::parentObjectUnignored):
        (WebCore::AccessibilityObject::rightLineVisiblePositionRange):
        (WebCore::replacedNodeNeedsCharacter):
        (WebCore::AccessibilityObject::stringForVisiblePositionRange):
        (WebCore::AccessibilityObject::lengthForVisiblePositionRange):
        (WebCore::AccessibilityObject::actionVerb):
        * accessibility/AccessibilityObject.h:
        (WebCore::PlainTextRange::isNull):
        (WebCore::AccessibilityObject::isAccessibilityRenderObject):
        (WebCore::AccessibilityObject::isAnchor):
        (WebCore::AccessibilityObject::isAttachment):
        (WebCore::AccessibilityObject::isHeading):
        (WebCore::AccessibilityObject::isLink):
        (WebCore::AccessibilityObject::isImage):
        (WebCore::AccessibilityObject::isNativeImage):
        (WebCore::AccessibilityObject::isImageButton):
        (WebCore::AccessibilityObject::isPasswordField):
        (WebCore::AccessibilityObject::isTextControl):
        (WebCore::AccessibilityObject::isNativeTextControl):
        (WebCore::AccessibilityObject::isWebArea):
        (WebCore::AccessibilityObject::isCheckboxOrRadio):
        (WebCore::AccessibilityObject::isListBox):
        (WebCore::AccessibilityObject::isFileUploadButton):
        (WebCore::AccessibilityObject::isProgressIndicator):
        (WebCore::AccessibilityObject::isSlider):
        (WebCore::AccessibilityObject::isControl):
        (WebCore::AccessibilityObject::isList):
        (WebCore::AccessibilityObject::isDataTable):
        (WebCore::AccessibilityObject::isTableRow):
        (WebCore::AccessibilityObject::isTableColumn):
        (WebCore::AccessibilityObject::isTableCell):
        (WebCore::AccessibilityObject::isFieldset):
        (WebCore::AccessibilityObject::isGroup):
        (WebCore::AccessibilityObject::isChecked):
        (WebCore::AccessibilityObject::isEnabled):
        (WebCore::AccessibilityObject::isSelected):
        (WebCore::AccessibilityObject::isFocused):
        (WebCore::AccessibilityObject::isHovered):
        (WebCore::AccessibilityObject::isIndeterminate):
        (WebCore::AccessibilityObject::isLoaded):
        (WebCore::AccessibilityObject::isMultiSelect):
        (WebCore::AccessibilityObject::isOffScreen):
        (WebCore::AccessibilityObject::isPressed):
        (WebCore::AccessibilityObject::isReadOnly):
        (WebCore::AccessibilityObject::isVisited):
        (WebCore::AccessibilityObject::isRequired):
        (WebCore::AccessibilityObject::canSetFocusAttribute):
        (WebCore::AccessibilityObject::canSetTextRangeAttributes):
        (WebCore::AccessibilityObject::canSetValueAttribute):
        (WebCore::AccessibilityObject::hasIntValue):
        (WebCore::AccessibilityObject::accessibilityShouldUseUniqueId):
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::isMenuRelated):
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::isFocused):
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine):
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange):
        (WebCore::AccessibilityRenderObject::doAXRangeForLine):
        (WebCore::AccessibilityRenderObject::doAXStringForRange):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::isPresentationalChildOfAriaRole):
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        (WebCore::AccessibilityRenderObject::canHaveChildren):
        (WebCore::AccessibilityRenderObject::actionVerb):
        (WebCore::shouldReturnTagNameAsRoleForMSAA):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::isAccessibilityRenderObject):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::orientation):
        * accessibility/AccessibilitySlider.h:
        (WebCore::AccessibilitySlider::~AccessibilitySlider):
        (WebCore::AccessibilitySlider::roleValue):
        (WebCore::AccessibilitySlider::accessibilityIsIgnored):
        (WebCore::AccessibilitySlider::isSlider):
        (WebCore::AccessibilitySlider::canSetValueAttribute):
        (WebCore::AccessibilitySliderThumb::~AccessibilitySliderThumb):
        (WebCore::AccessibilitySliderThumb::roleValue):
        (WebCore::AccessibilitySliderThumb::accessibilityIsIgnored):
        (WebCore::AccessibilitySliderThumb::setParentObject):
        (WebCore::AccessibilitySliderThumb::parentObject):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        * accessibility/AccessibilityTableColumn.cpp:
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/AccessibilityTableRow.cpp:
        * accessibility/mac/AccessibilityObjectWrapper.h:

2009-11-02  Darin Fisher  <darin@chromium.org>

        Fixing JSC build bustage.

        * bindings/js/ScriptController.cpp: Added missing #include

2009-10-30  Darin Fisher  <darin@chromium.org>

        Reviewed by Adam Barth.

        Give the FrameLoaderClient the ability to override Settings::isJavaScriptEnabled.
        https://bugs.webkit.org/show_bug.cgi?id=30967

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::isEnabled):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::isEnabled):
        * bindings/v8/V8Proxy.cpp: Move implementation of isEnabled to ScriptController
        * bindings/v8/V8Proxy.h: Ditto
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::allowJavaScript):
        * platform/chromium/ChromiumBridge.h: Delete uiResourceProtocol function

2009-11-02  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Mark Rowe.

        Fix a typo in Mark's last commit.

        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes):

2009-11-02  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Brady Eidson.

        Re-enable support for web archives on Windows.  It was mistakenly disabled in r50438.

        * loader/archive/ArchiveFactory.cpp:
        (WebCore::archiveMIMETypes):

2009-11-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        PLATFORM(CF) should be set when building for Qt on Darwin
        https://bugs.webkit.org/show_bug.cgi?id=23671

        * WebCore.pro: Add SharedBufferCF.cpp and SmartReplaceCF.cpp
        to the Darwin build.
        * loader/archive/ArchiveFactory.cpp: Change the support for 
        legacy WebArchive from all CF platforms to Mac and Chromium 
        CF platforms.
        (WebCore::archiveMIMETypes):
        * platform/text/AtomicString.h: Remove PLATFORM(QT) &&
        PLATFORM(DARWIN) test as it is redundant now.
        * platform/text/PlatformString.h: Ditto.
        * platform/text/StringImpl.h: Ditto.
        * platform/text/cf/StringCF.cpp: Ditto.
        * platform/text/cf/StringImplCF.cpp: Ditto.

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

        Reviewed by David Levin.

        [Chromium] Actually declare getPluginMimeTypeFromExtension in a header.
        https://bugs.webkit.org/show_bug.cgi?id=30985

        Our current code does not conform to our style guide.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        * plugins/chromium/PluginDataChromium.cpp:
        * plugins/chromium/PluginDataChromium.h: Added.

2009-11-02  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7038305> REGRESSION (Safari 4.0.2 - ToT): After navigating back to a known phishy page, the "Ignore warning" button appears highlighted (along with the "Go Back" button)

        This bug is timing dependent, and not always reproducible.  I could not think of a way to add a 
        layout test that would demonstrate the problem and fix.

        * platform/mac/ThemeMac.mm:
        (WebCore::checkbox): Update style.
        (WebCore::paintCheckbox): ditto.
        (WebCore::radio): ditto.
        (WebCore::paintRadio): ditto.
        (WebCore::setupButtonCell): Added convenience method.
        (WebCore::button): Use a separate NSButtonCell for defaultButtons and regular buttons.
        (WebCore::paintButton): Don't check for the key window here.  Consider that when deciding if the button should have the default style in RenderTheme.
        * rendering/RenderTheme.cpp: (WebCore::RenderTheme::isDefault): Only consider a button to be default if the page is active.  This fixes 
        a problem I noticed where the button would flicker crazily if the page with the default button was in the background.

2009-11-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Minor RenderWidget clean-up in preparation for deferring widget tree
        mutation when it is not safe.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::RenderWidget): Initialize m_refCount to 1
        instead of calling ref().
        (WebCore::RenderWidget::destroy): Call setWidget(0) instead of
        repeating what it does.
        (WebCore::RenderWidget::setWidgetGeometry): Now returns a boolean
        indicating whether the bounds have changed.
        (WebCore::RenderWidget::setWidget): Replaced all-encompassing if
        statement with an early return.
        (WebCore::RenderWidget::updateWidgetPosition): Call setWidgetGeometry().
        * rendering/RenderWidget.h:

2009-11-02  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding Chromium's DatabaseTracker and SQLTransactionClient
        implementations.

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

        * storage/chromium: Added.
        * storage/chromium/DatabaseObserver.h: Added.
        * storage/chromium/DatabaseTrackerChromium.cpp: Added.
        * storage/chromium/QuotaTracker.cpp: Added.
        * storage/chromium/QuotaTracker.h: Added.
        * storage/chromium/SQLTransactionClientChromium.cpp: Added.

2009-11-02  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson and Dan Bernstein.

        Safari crashes when calling execCommand on formatted html in special case
        <rdar://problem/7318656>
        https://bugs.webkit.org/show_bug.cgi?id=31023

        Test: editing/execCommand/align-in-span.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock): Modified comment on containingBlock returning NULL.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setSelectionState): Added check for NULL return from containingBlock,
        since it is possible when dealing with orphaned trees.

2009-11-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Exception checks were being too aggressive
        https://bugs.webkit.org/show_bug.cgi?id=31005

        Several calls in CanvasRenderingContext3D are allowed to
        have a null value passed, which indicated that the 
        object is being unbound. Handle this case and the corresponding
        null handling in GraphicsContext3DMac.

        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::bindBuffer):
        (WebCore::CanvasRenderingContext3D::bindFramebuffer):
        (WebCore::CanvasRenderingContext3D::bindRenderbuffer):
        (WebCore::CanvasRenderingContext3D::bindTexture):
        (WebCore::CanvasRenderingContext3D::framebufferRenderbuffer):
        (WebCore::CanvasRenderingContext3D::framebufferTexture2D):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):

2009-11-02  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Each JS execution in console adds extra item into "scripts" combo
        https://bugs.webkit.org/show_bug.cgi?id=30212

        Added manual test

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * manual-tests/inspector/hidden-evals.html: Added.

2009-11-02  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Adds a missed case for InspectorTimeline, DOMWindow dispatch of DOM events.
        https://bugs.webkit.org/show_bug.cgi?id=31030

        * dom/Node.cpp:
        (WebCore::eventHasListeners): Checks DOMWindow for listeners.
        (WebCore::Node::dispatchGenericEvent):

2009-11-02  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Remove threadsafe refcounting from tasks used with WTF::MessageQueue.
        https://bugs.webkit.org/show_bug.cgi?id=30612

        No new tests since no new functionality. Storage, MessagePorts and Workers tests cover this.

        There are a lot of files but most changes are simply replace RefPtr and PassRefPtr with
        OwnPtr and PassOwnPtr when dealing with Tasks.

        ScriptExecutionContext::Task, DatabaseTask and WorkerRunLoop::Task are no longer
        threadsafe refcounted, but simply Noncopyable.

        * dom/Document.cpp:
        (WebCore::ScriptExecutionContextTaskTimer::ScriptExecutionContextTaskTimer):
        (WebCore::PerformTaskContext::PerformTaskContext):
        (WebCore::Document::postTask):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ProcessMessagesSoonTask::create):
        * dom/ScriptExecutionContext.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::PlatformMessagePortChannel::tryGetMessageFromRemote):
        * dom/default/PlatformMessagePortChannel.h:
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::tryGetMessage):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::appendAndCheckEmpty):
        * loader/FrameLoader.cpp:
        (WebCore::HashChangeEventTask::create):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::CallCacheListenerTask::create):
        * storage/Database.cpp:
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::scheduleTransaction):
        (WebCore::Database::scheduleTransactionStep):
        (WebCore::Database::tableNames):
        * storage/DatabaseTask.h:
        (WebCore::DatabaseOpenTask::create):
        (WebCore::DatabaseCloseTask::create):
        (WebCore::DatabaseTransactionTask::create):
        (WebCore::DatabaseTableNamesTask::create):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):
        (WebCore::DatabaseThread::scheduleTask):
        (WebCore::DatabaseThread::scheduleImmediateTask):
        (WebCore::SameDatabasePredicate::operator()):
        * storage/DatabaseThread.h:
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::createImport):
        (WebCore::LocalStorageTask::createSync):
        (WebCore::LocalStorageTask::createTerminate):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::localStorageThread):
        * storage/LocalStorageThread.h:
        * websockets/WebSocket.cpp:
        (WebCore::ProcessWebSocketEventTask::create):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerContext):
        (WebCore::SharedWorkerConnectTask::create):
        * workers/GenericWorkerTask.h:
        (WebCore::GenericWorkerTask1::create):
        (WebCore::GenericWorkerTask2::create):
        (WebCore::GenericWorkerTask3::create):
        (WebCore::GenericWorkerTask4::create):
        (WebCore::GenericWorkerTask5::create):
        (WebCore::GenericWorkerTask6::create):
        (WebCore::GenericWorkerTask7::create):
        (WebCore::GenericWorkerTask8::create):
        (WebCore::createCallbackTask):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::postTask):
        * workers/WorkerContext.h:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::create):
        (WebCore::MessageWorkerTask::create):
        (WebCore::WorkerExceptionTask::create):
        (WebCore::WorkerContextDestroyedTask::create):
        (WebCore::WorkerTerminateTask::create):
        (WebCore::WorkerThreadActivityReportTask::create):
        (WebCore::WorkerMessagingProxy::postTaskForModeToWorkerContext):
        (WebCore::WorkerMessagingProxy::postTaskToLoader):
        (WebCore::WorkerMessagingProxy::workerThreadCreated):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerRunLoop.cpp:
        (WebCore::ModePredicate::operator()):
        (WebCore::WorkerRunLoop::runInMode):
        (WebCore::WorkerRunLoop::postTask):
        (WebCore::WorkerRunLoop::postTaskForMode):
        (WebCore::WorkerRunLoop::Task::create):
        (WebCore::WorkerRunLoop::Task::performTask):
        (WebCore::WorkerRunLoop::Task::Task):
        * workers/WorkerRunLoop.h:
        (WebCore::WorkerRunLoop::Task::~Task):
        (WebCore::WorkerRunLoop::Task::mode):

2009-11-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Jan Alonzo.

        [GTK] Failing media/video-played-reset.html
        https://bugs.webkit.org/show_bug.cgi?id=30589

        new m_seekTime attribute to keep track of the seek position

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::currentTime):
        (WebCore::MediaPlayerPrivate::seek):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-11-02  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        [GTK] Remove Referer when redirecting to non-secure site
        https://bugs.webkit.org/show_bug.cgi?id=31021

        Remove referer from HTTP headers when redirecting to a non-secure
        site.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

2009-11-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=18539
        multipart/form-data not being parsed correctly on server due to '+' in boundary string

        No test - the characters that the boundary is made of are not deterministic.

        * platform/network/FormDataBuilder.cpp: (WebCore::FormDataBuilder::generateUniqueBoundaryString):
        Don't ever put a '+' in boundary string, either. Removed a FIXME to bring '/' back once
        GMail is fixed - I don't think we'll ever want to allow non-alphanumeric characters, as
        they cause problems on many web sites.

2009-10-30  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30969
        A no-prefix XPath node test should not match no-namespace elements in HTML document

        Test: fast/xpath/null-namespace-in-html.html

        * xml/XPathStep.cpp: (WebCore::XPath::nodeMatchesBasicTest): Special case non-HTML elements
        in HTML documents (as these are the ones that can have null namespace).

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

        Reviewed by Timothy Hatcher.

        Web Inspector: [REGRESSION] No timeline marks on resources panel.

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

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.updateGraphDividersIfNeeded):

2009-11-02  David Levin  <levin@chromium.org>

        Reviewed by Dan Bernstein.

        Possible crash in RenderSlider::layout.
        https://bugs.webkit.org/show_bug.cgi?id=31016

        Fix out of place line of code.

        Test: scrollbars/overflow-scrollbar-combinations.html
        This crash only seems to repro when WebKit draws the play controls,
        so the crash repros in chromium running this test but not WebKit
        nightlies which use QuickTime to draw the controls.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout):

2009-11-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix Qt build on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=30905

        * WebCore.pro:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::create):

2009-11-02  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Adam Barth.

        QWebView crash fix.

        The QWebView should not crash if the stop() method is called from
        a function triggered by the loadProgress signal.

        A null pointer protection was added in the ProgressTracker::incrementProgress.

        New autotest was created.

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

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):

2009-11-02  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Fix a leftover from profiles panel generalization.

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

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.get searchableViews):

2009-11-02  Kai Koehne  <kai.koehne@nokia.com>

        Reviewed by Holger Freyther.

        Remove implementation of ImageDecocerQt::clearFrameBufferCache.
        The implementation was buggy, and will visually break repeating
        animations anyway.

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

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::clearFrameBufferCache):

2009-11-02  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=30964
        [Gtk] Implemment AtkDocument

        Provides access to the reported content language.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_document_get_locale):

2009-11-02  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Rewrite CSSSourceSyntaxHighlighter so it shares more code
        https://bugs.webkit.org/show_bug.cgi?id=30907

        Test: inspector/css-syntax-highlight.html

        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.syntaxHighlightCSS):
        (WebInspector.SourceSyntaxHighlighter):
        (WebInspector.SourceSyntaxHighlighter.prototype.process.processChunk):
        (WebInspector.SourceSyntaxHighlighter.prototype.process.moveToNextLine):
        (WebInspector.SourceSyntaxHighlighter.prototype.process):
        (WebInspector.SourceSyntaxHighlighter.prototype.lex):
        (WebInspector.SourceSyntaxHighlighter.prototype.appendNonToken):
        (WebInspector.SourceSyntaxHighlighter.prototype.syntaxHighlightNode):
        (WebInspector.CSSSourceSyntaxHighlighter):
        * inspector/front-end/inspectorSyntaxHighlight.css:

2009-11-02  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Support ARIA "tab" roles
        https://bugs.webkit.org/show_bug.cgi?id=30842

        Implement support for ARIA "tab", "tabpanel" and "tablist".
        As a consequence, we also needed to implement aria-selected
        and aria-controls.

        Tests: accessibility/aria-controls-with-tabs.html
               accessibility/aria-tab-roles.html

        * accessibility/AXObjectCache.cpp:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * html/HTMLAttributeNames.in:

2009-10-27  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dmitry Titov.

        This is the WebKit-side change needed to fix canvas.getImageData() for
        Chromium.  The unpremultiply code in Skia assumes that unpremultiplied
        values should be rounded, while CG does not.  In addition, the fixed
        point inversion used by Skia introduces slight inaccuracies that make
        us fail this test.  This change brings Chromium in line with
        the CG path.
        https://bugs.webkit.org/show_bug.cgi?id=30825

        Covered by LayoutTests/fast/canvas/canvas-getImageData.html

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

2009-11-01  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Adds window event dispatches to InspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=31002

        * English.lproj/localizedStrings.js:
        * dom/Node.cpp: Updated call site to willDispatchEvent and didDispatchEvent.
        (WebCore::Node::dispatchGenericEvent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willDispatchEvent): Renamed.
        (WebCore::InspectorTimelineAgent::didDispatchEvent): Renamed.
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createEventDispatchRecord): Renamed.
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._getRecordDetails):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):

2009-11-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Convert script tag event into a more generic
        script eval event in timeline.

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

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createEvaluateScriptTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype._getRecordDetails):

2009-11-01  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Mark Rowe.

        Fix for loop to use an size_t instead of unsigned and some spacing
        style fixes.

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

2009-11-01  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Does not send DOM dispatches to the InspectorTimelineAgent if there
        are no event listeners.
        https://bugs.webkit.org/show_bug.cgi?id=30995

        * dom/Node.cpp:
        (WebCore::eventHasListeners):
        (WebCore::Node::dispatchGenericEvent):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2009-11-01  Roland Steiner  <rolandsteiner@chromium.org>

        No review (build fix).

        Add missing files for Ruby implementation to WebCore.vcproj
        (Fix build break after 50397)
        https://bugs.webkit.org/show_bug.cgi?id=31001

        No new tests. (No functional change)

        * WebCore.vcproj/WebCore.vcproj:

2009-11-02  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dave Hyatt.

        Bug 28420 -  Implement HTML5 <ruby> rendering
        (https://bugs.webkit.org/show_bug.cgi?id=28420)

        First rudimentary implementation of HTML5 ruby rendering support.

        Following the HTML 5 spec, the box object model for a <ruby> element allows several runs of ruby
        bases with their respective ruby texts looks as follows:

        1 RenderRuby object, corresponding to the whole <ruby> HTML element
             1+ RenderRubyRun (anonymous)
                 0 or 1 RenderRubyText - shuffled to the front in order to re-use existing block layouting
                     0-n inline object(s)
                 0 or 1 RenderRubyBase - contains the inline objects that make up the ruby base
                     1-n inline object(s)

        Note: <rp> elements are defined as having 'display:none' and thus normally are not assigned a renderer.
        
        New layout tests will be committed in a follow-up patch under fast/ruby.

        Makefiles, etc.
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:

        CSS
        * css/html.css: Added <ruby> and <rt>

        Existing render files:
        * rendering/RenderBlock.cpp: make moveChild a member function moveChildTo
        (WebCore::RenderBlock::moveChildTo):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject): instantiate ruby renderers based on element name
        * rendering/RenderObject.h: add query methods for ruby renderers
        (WebCore::RenderObject::isRuby):
        (WebCore::RenderObject::isRubyBase):
        (WebCore::RenderObject::isRubyRun):
        (WebCore::RenderObject::isRubyText):

        New ruby renderers:
        * rendering/RenderRuby.cpp: Added.
        (WebCore::lastRubyRun):
        (WebCore::findRubyRunParent):
        (WebCore::RenderRubyAsInline::RenderRubyAsInline):
        (WebCore::RenderRubyAsInline::~RenderRubyAsInline):
        (WebCore::RenderRubyAsInline::isChildAllowed):
        (WebCore::RenderRubyAsInline::addChild):
        (WebCore::RenderRubyAsInline::removeChild):
        (WebCore::RenderRubyAsBlock::RenderRubyAsBlock):
        (WebCore::RenderRubyAsBlock::~RenderRubyAsBlock):
        (WebCore::RenderRubyAsBlock::isChildAllowed):
        (WebCore::RenderRubyAsBlock::addChild):
        (WebCore::RenderRubyAsBlock::removeChild):
        * rendering/RenderRuby.h: Added.
        (WebCore::RenderRubyAsInline::renderName):
        (WebCore::RenderRubyAsInline::isRuby):
        (WebCore::RenderRubyAsBlock::renderName):
        (WebCore::RenderRubyAsBlock::isRuby):
        * rendering/RenderRubyBase.cpp: Added.
        (WebCore::RenderRubyBase::RenderRubyBase):
        (WebCore::RenderRubyBase::~RenderRubyBase):
        (WebCore::RenderRubyBase::isChildAllowed):
        (WebCore::RenderRubyBase::splitToLeft):
        (WebCore::RenderRubyBase::mergeWithRight):
        * rendering/RenderRubyBase.h: Added.
        (WebCore::RenderRubyBase::renderName):
        (WebCore::RenderRubyBase::isRubyBase):
        * rendering/RenderRubyRun.cpp: Added.
        (WebCore::RenderRubyRun::RenderRubyRun):
        (WebCore::RenderRubyRun::~RenderRubyRun):
        (WebCore::RenderRubyRun::hasRubyText):
        (WebCore::RenderRubyRun::hasRubyBase):
        (WebCore::RenderRubyRun::isEmpty):
        (WebCore::RenderRubyRun::rubyText):
        (WebCore::RenderRubyRun::rubyBase):
        (WebCore::RenderRubyRun::rubyBaseSafe):
        (WebCore::RenderRubyRun::firstLineBlock):
        (WebCore::RenderRubyRun::updateFirstLetter):
        (WebCore::RenderRubyRun::isChildAllowed):
        (WebCore::RenderRubyRun::addChild):
        (WebCore::RenderRubyRun::removeChild):
        (WebCore::RenderRubyRun::createRubyBase):
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        * rendering/RenderRubyRun.h: Added.
        (WebCore::RenderRubyRun::renderName):
        (WebCore::RenderRubyRun::isRubyRun):
        * rendering/RenderRubyText.cpp: Added.
        (WebCore::RenderRubyText::RenderRubyText):
        (WebCore::RenderRubyText::~RenderRubyText):
        (WebCore::RenderRubyText::isChildAllowed):
        * rendering/RenderRubyText.h: Added.
        (WebCore::RenderRubyText::renderName):
        (WebCore::RenderRubyText::isRubyText):

2009-11-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=30992
        Node.isDefaultNamespace doesn't convert empty strings to null

        Test: fast/dom/Node/default-namespace-empty-argument.html

        * dom/Node.cpp: (WebCore::Node::isDefaultNamespace): Per DOM 3 Core, treat empty input
        as null.

2009-11-01  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Don't add '/' to the URL path if the it does not include '/' after the protocol component
        https://bugs.webkit.org/show_bug.cgi?id=30971

        Match IE8 behaviour, that does not add '/' if there is none after the protocol component.

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

2009-10-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Fix layering violations in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=30986

        Remove uses of HTMLImageElement and HTMLCanvasElement

        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::texImage2D):
        (WebCore::CanvasRenderingContext3D::texSubImage2D):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):

2009-11-01  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=30964
        [Gtk] Implemment AtkDocument

        Provides access to expected document attributes.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (documentAttributeValue):
        (webkit_accessible_document_get_document_attribute_value):
        (webkit_accessible_document_get_document_attributes):

2009-11-03  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=30964
        [Gtk] Implemment AtkDocument

        Implements what has been implemented in AT-SPI.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (GetAtkInterfaceTypeFromWAIType):
        (getInterfaceMaskFromObject):
        (atk_document_interface_init):
        (webkit_accessible_document_get_document_attribute_value):
        (webkit_accessible_document_get_document_attributes):
        (webkit_accessible_document_get_locale):

2009-11-01  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Turn on warnings for QtWebKit for gcc
        https://bugs.webkit.org/show_bug.cgi?id=30958

        No new tests as there is no functional change.

        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::RGBA32Buffer): Reorder 
        initialization list to fix compiler warnings.


2009-11-01  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        [Regression] monitorEvent doesn't work

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

2009-11-01  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        Fix Web Inspector: Bug with Message Bubble in Syntax Highlighter
        https://bugs.webkit.org/show_bug.cgi?id=30990

        * inspector/front-end/SourceFrame.js:

2009-10-31  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=30982
        createHTMLDocument doesn't escape ampersand and less-than in title

        Test: fast/dom/DOMImplementation/createHTMLDocument-title.html

        * dom/DOMImplementation.cpp: (WebCore::DOMImplementation::createHTMLDocument):
        Set document title after creating the document, avoiding parser intricacies.

2009-11-01  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Double clicking on a breakpoints should not select text
        https://bugs.webkit.org/show_bug.cgi?id=30950

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._documentMouseDown):

2009-11-01  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Darin Adler.

        Fix assertion falure in RenderObjectChildList::updateBeforeAfterContent().

        [Crash (debug)] Combination of list-item and :after causes assertion failure
        https://bugs.webkit.org/show_bug.cgi?id=30944

        Test: fast/css/list-item-pseudo-nocrash.html

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):

2009-11-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=30586
        [GTK] Failing test media/video-src-empty.html

        Correctly set network/ready state depending on GStreamer errors
        received on the bus.

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

2009-10-31  Oliver Hunt  <oliver@apple.com>

        Build fix

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::attachShader):

2009-10-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Remove obsolete null checks from CanvasRenderingContext3DMac
        https://bugs.webkit.org/show_bug.cgi?id=30983

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderi):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getUniformLocation):

2009-10-31  Oliver Hunt  <oliver@apple.com>

        Reviewed by Jon Honeycutt.

        WebGL allows objects to be used with the wrong context
        https://bugs.webkit.org/show_bug.cgi?id=30981

        Simply add null checks and a few context guards to ensure we don't
        deref null or attempt to use an object from a different context.

        Tests: fast/canvas/webgl/incorrect-context-object-behaviour.html
               fast/canvas/webgl/null-object-behaviour.html

        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::attachShader):
        (WebCore::CanvasRenderingContext3D::bindAttribLocation):
        (WebCore::CanvasRenderingContext3D::bindBuffer):
        (WebCore::CanvasRenderingContext3D::bindFramebuffer):
        (WebCore::CanvasRenderingContext3D::bindRenderbuffer):
        (WebCore::CanvasRenderingContext3D::bindTexture):
        (WebCore::CanvasRenderingContext3D::compileShader):
        (WebCore::CanvasRenderingContext3D::detachShader):
        (WebCore::CanvasRenderingContext3D::framebufferRenderbuffer):
        (WebCore::CanvasRenderingContext3D::framebufferTexture2D):
        (WebCore::CanvasRenderingContext3D::getProgrami):
        (WebCore::CanvasRenderingContext3D::getProgramiv):
        (WebCore::CanvasRenderingContext3D::getProgramInfoLog):
        (WebCore::CanvasRenderingContext3D::getShaderi):
        (WebCore::CanvasRenderingContext3D::getShaderiv):
        (WebCore::CanvasRenderingContext3D::getShaderInfoLog):
        (WebCore::CanvasRenderingContext3D::getShaderSource):
        (WebCore::CanvasRenderingContext3D::getUniformf):
        (WebCore::CanvasRenderingContext3D::getUniformfv):
        (WebCore::CanvasRenderingContext3D::getUniformi):
        (WebCore::CanvasRenderingContext3D::getUniformiv):
        (WebCore::CanvasRenderingContext3D::getUniformLocation):
        (WebCore::CanvasRenderingContext3D::isBuffer):
        (WebCore::CanvasRenderingContext3D::linkProgram):
        (WebCore::CanvasRenderingContext3D::shaderSource):
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasRenderingContext3D.idl:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's MediaQueryResult
        https://bugs.webkit.org/show_bug.cgi?id=30857

        Inherits MediaQueryResult class from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSStyleSelector.cpp:5984 and
        it is no need to be copyable.

        * css/CSSStyleSelector.h:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's MediaQueryEvaluator
        https://bugs.webkit.org/show_bug.cgi?id=30854

        Inherits MediaQueryEvaluator class from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSStyleSelector.cpp:401 and   
        it is no need to be copyable.

        * css/MediaQueryEvaluator.h:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSRuleSet
        https://bugs.webkit.org/show_bug.cgi?id=30852

        Inherits CSSRuleSet class from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSStyleSelector.cpp:455 and
        it is no need to be copyable.

        * css/CSSStyleSelector.cpp:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSRuleData
        https://bugs.webkit.org/show_bug.cgi?id=30851

        Inherits CSSRuleData class from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSStyleSelector.h:320 and
        it is no need to be copyable.

        * css/CSSStyleSelector.h:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSRuleDataList
        https://bugs.webkit.org/show_bug.cgi?id=30850

        Inherits CSSRuleDataList class from Noncopyable because it has been
        instantiated by 'new' in WebCore/css/CSSStyleSelector.cpp:2715 and
        it is no need to be copyable.

        * css/CSSStyleSelector.h:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSNamespace
        https://bugs.webkit.org/show_bug.cgi?id=30849

        Inherits CSSNamespace struct from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSStyleSheet.cpp:141 and
        it is no need to be copyable.

        * css/CSSNamespace.h:

2009-10-30  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Refactor DatabaseTask in preparation for removing threadsafe refcounting from it.
        Move the synchronizer object out of the DatabaseTask so there is no need to keep
        the pointer to Databasetask around after passing it to MessageQueue.
        Also pass the references to return parameters to the task so it can update them.
        https://bugs.webkit.org/show_bug.cgi?id=30941

        No new tests, since this is just moving the code around, no change in functionality.

        * storage/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::openAndVerifyVersion): Use new DatabaseTaskSynchronizer to wait for task completion.
        (WebCore::Database::markAsDeletedAndClose): Ditto.
        (WebCore::Database::tableNames): Ditto.
        (WebCore::Database::stop): Use the boolean flag rather then 'killed' flag built into MessageQueue.
        (WebCore::Database::scheduleTransaction): Transaction queue is a Deque now, change the way to fetch the transaction.
        * storage/Database.h: Change the SQLTransaction queue to be a Deque rather then a MessageQueue.
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseTaskSynchronizer::DatabaseTaskSynchronizer):
        (WebCore::DatabaseTaskSynchronizer::waitForTaskCompletion):
        (WebCore::DatabaseTaskSynchronizer::taskCompleted):
        (WebCore::DatabaseTask::DatabaseTask): Ctor takes DatabaseTaskSynchronizer which can be 0.
        (WebCore::DatabaseTask::performTask): Signal completion. m_synchronizer should still be around since main thread is waiting on it.
        (WebCore::DatabaseOpenTask::DatabaseOpenTask): Pass synchronizer and return parameters via constructor.
        (WebCore::DatabaseCloseTask::DatabaseCloseTask): Ditto.
        (WebCore::DatabaseTransactionTask::DatabaseTransactionTask): Ditto.
        (WebCore::DatabaseTableNamesTask::DatabaseTableNamesTask): Ditto.
        * storage/DatabaseTask.h:
        (WebCore::DatabaseOpenTask::create):
        (WebCore::DatabaseCloseTask::create):
        (WebCore::DatabaseTransactionTask::create):
        (WebCore::DatabaseTableNamesTask::create):

2009-10-30  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: In Mail, Undo does not restore some characters I have deleted at the end of a line
        https://bugs.webkit.org/show_bug.cgi?id=30955
        <rdar://problem/7067033>
        
        When the command is deleteWordBackward or deleteWordForward
        we should not add to the open typing command, but
        create a new one.
        
        Test: editing/undo/undo-deleteWord.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Always start a new command if the granularity is
        not CharacterGranularity. 
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Always start a new command if the granularity is
        not CharacterGranularity. 

2009-10-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Make MediaPlayer constructor private
        https://bugs.webkit.org/show_bug.cgi?id=30965

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): 
        (WebCore::HTMLMediaElement::finishParsingChildren): Use MediaPlayer::create.

        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::create): New.

2009-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility of headings is not correct

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

        Reviewed by Alice Liu.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::stringRoleForMSAA):
        (WebCore::AccessibilityObject::descriptionForMSAA):

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::shouldReturnTagNameAsRoleForMSAA):
        If the element's tag name is one of h1, h2, h3, h4, h5, h6, return
        true.
        (WebCore::AccessibilityRenderObject::stringRoleForMSAA):
        If the element should return its tag name as the role, return the tag
        name.
        (WebCore::AccessibilityRenderObject::positionalDescriptionForMSAA):
        If the object is a heading, return the string "L" followed by the
        heading level.
        (WebCore::AccessibilityRenderObject::descriptionForMSAA):
        If the object has a positional description, return it. Otherwise, get
        the accessibility description, and prefix it with "Description" so that
        MSAA clients know that it's not a positional description.

        * accessibility/AccessibilityRenderObject.h:

2009-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility of links is wrong

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

        Reviewed by Darin Adler.

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::stringValueForMSAA):
        Return the URL.
        (WebCore::AccessibilityImageMapLink::nameForMSAA):
        Return the alt text.

        * accessibility/AccessibilityImageMapLink.h:
        (WebCore::AccessibilityImageMapLink::isLinked):
        Return true.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isLinked):
        (WebCore::AccessibilityObject::stringValueForMSAA):
        (WebCore::AccessibilityObject::nameForMSAA):

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::isLinkable):
        Return true if the element is considered "linkable" with respect to
        accessibility.
        (WebCore::AccessibilityRenderObject::stringValueForMSAA):
        If the element is linkable, check whether it has a parent anchor
        element. If so, return the anchor element's href.
        (WebCore::AccessibilityRenderObject::isLinked):
        Return true if the element is linkable and if it's parent anchor tag's
        href is non-empty.
        (WebCore::AccessibilityRenderObject::nameForMSAA):
        For text nodes, return the text.

        * accessibility/AccessibilityRenderObject.h:

2009-10-30  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        Notify the chrome when the focused node has changed.
        https://bugs.webkit.org/show_bug.cgi?id=30832

        This is similar to AX code that is already in place, except that this also informs the
        chrome when there stops being a focused node. This is needed for a browser to show the
        anchor for links that have keyboard focus.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::focusedNodeChanged):
        * page/Chrome.cpp:
        (WebCore::Chrome::focusedNodeChanged):
        * page/Chrome.h:
        * page/ChromeClient.h:

2009-10-30  Ben Murdoch  <benm@google.com>

        Reviewed by David Kilzer.

        openDatabase() with empty version sets db version up incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=28417

        Test: storage/open-database-set-empty-version.html

        * storage/Database.cpp:
        (WebCore::Database::performOpenAndVerify): Raise an exception if the current database version does not match the expected version when the current version is the empty string.

2009-10-30  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Need to turn off notifications properly at runtime
        https://bugs.webkit.org/show_bug.cgi?id=30409

        Moving the notificationsEnabled bit from NotificationCenter
        to the new V8 RuntimeEnabledFeatures object.

        Just moving a bit around, so no new tests.

        * bindings/v8/RuntimeEnabledFeatures.cpp:
        * bindings/v8/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setNotificationsEnabled):
        (WebCore::RuntimeEnabledFeatures::notificationsEnabled):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * notifications/NotificationCenter.cpp:
        * notifications/NotificationCenter.h:

2009-10-30  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] More cleanup after r49949: remove ListenerGuard.
        ListenerGuard is no longer needed since EventListeners do not depend on frame or v8 context.
        https://bugs.webkit.org/show_bug.cgi?id=30943

        Covered by fast/events/add-event-without-document.html which will now pass in Chromium.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getEventListener):
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findOrCreateWrapper):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::disconnectFrame):
        (WebCore::V8Proxy::clearForNavigation):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::V8WorkerContextEventListener):
        (WebCore::V8WorkerContextEventListener::handleEvent):
        (WebCore::V8WorkerContextEventListener::reportError):
        * bindings/v8/V8WorkerContextEventListener.h:
        (WebCore::V8WorkerContextEventListener::create):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::WorkerContextExecutionProxy):
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):
        * bindings/v8/custom/V8CustomEventListener.h:
        (WebCore::V8EventListener::create):

2009-10-30  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        counterValueForElementById should return space-separated string for multiple counters
        https://bugs.webkit.org/show_bug.cgi?id=30939

        Test: fast/css/counters/counterValueForElementById.html

        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeCounterValuesFromChildren):
        (WebCore::counterValueForElement):

2009-10-30  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::paint):
        Add some comments to explain what is happening here.

2009-10-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Fix Web Inspector crash on the errors/warnings counter click

        RenderObject::createVisiblePosition(const Position& position)
        understands "null Positions", so we can construct such a Position manually.

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

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionForPoint):

2009-10-30  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25534
        [GTK] Objects of ROLE_TABLE should implement the accessible table interface

        Third part of the implementation of AtkTable.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (nameFromChildren):
        (webkit_accessible_get_name):
        New convenience function to construct an object's name using the name(s) of
        any children it has.

        (atk_table_interface_init):
        (webkit_accessible_table_get_column_description):
        (webkit_accessible_table_get_row_description):
        Implemented.

        (webkit_accessible_table_get_column_header):
        Stub function added so that webkit_accessible_table_get_column_description
        could be implemented in the meantime.

2009-10-30  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25534
        [GTK] Objects of ROLE_TABLE should implement the accessible table interface

        Second part of the implementation of AtkTable.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (cellAtIndex):
        (webkit_accessible_table_get_column_at_index):
        (webkit_accessible_table_get_row_at_index):
        (webkit_accessible_table_get_caption):
        (atk_table_interface_init):

2009-10-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add TimelinePanel into the panels enum.

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

        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::showPanel):
        * inspector/front-end/inspector.js:
        (WebInspector.showTimelinePanel):

2009-10-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Holger Hans Peter Freyther.

        If the owner widget of the page has a palette set, we
        should use that one. This was only working when the
        owner was a QWebView. This patch fixes that.

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

2009-10-30  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: Wire CookieJarChromium to the cookies
        backend. This is a final step of a 3-steps raw cookies
        access implementation in Chromium.

        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):

2009-10-30  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Fix Chromium crash in console.log in "deeply recursive" function 

        Check that result of 'frameSourceName' is not null handle
        before casting it to String. 
      
        Allow V8Proxy::sourceName/sourceLineNumber() to report
        that they have failed due to JavaScript stack overflow.

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::create):
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::sourceLineNumber):
        (WebCore::V8Proxy::sourceName):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's MediaQuery
        https://bugs.webkit.org/show_bug.cgi?id=30856

        Inherits MediaQuery class from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSParser.cpp:4905 and
        it is no need to be copyable.

        * css/CSSStyleSelector.h:

2009-10-30  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's MediaQueryExp
        https://bugs.webkit.org/show_bug.cgi?id=30855

        Inherits MediaQueryExp class from FastAllocBase because it is
        instantiated by 'new' in WebCore/css/CSSParser.cpp:4874.

        * css/MediaQueryExp.h:

2009-10-30  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Eric Seidel.

        Remove ENABLE_RUBY guards as discussed with Dave Hyatt and Maciej Stachowiak.

        Bug 28420 -  Implement HTML5 <ruby> rendering
        (https://bugs.webkit.org/show_bug.cgi?id=28420)

        No new tests (no functional change).

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

2009-10-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        Removed test for an impossible condition (a glyph in a right-to-left run not having
        the RTL flag 0x800)

        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation):

2009-10-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Out-of-memory crash in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=30906

        We need to handle the fact that creating a V8:Context might fail.  I
        don't know how to test this change because creating a context usually
        only fails when V8 decides it's using too much memory.

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::evaluateInNewContext):

2009-10-29  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Eric Seidel.

        Make links mouse focusable only on GTK and QT.

        Links are now always mouse focusable on GTK and QT. On other platforms
        the link needs a tabIndex or it needs to be contentEditable.

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

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isMouseFocusable):

2009-10-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Complete the fix for hit-testing and selection highlighting in ligatures for the ATSUI
        code path.

        * platform/graphics/mac/ComplexTextController.h: Added m_ltr member to ComplexTextRun.
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation): Skip over deleted
        glyphs, but update indexes and advances correctly.
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Initialize m_ltr.

2009-10-29  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(3.2.3 - 4.0.2): Message composing: when I undo a color change to text in Mail, undo/redo behaves strangely
        <rdar://problem/7115041>
        https://bugs.webkit.org/show_bug.cgi?id=30892

        This problem shows in any scenario where it is necessary to split a text
        node to apply a style. SplitElementCommand and WrapContentsInDummySpanCommand both
        have member variables initialized in the constructor to keep reference to elements
        they need to operate upon. These reference are not updated when reapplying the command.
        For this reason it is necessary to guarantee that unapply doesn not delete the references
        and that these commands implement doReapply to correctly reuse the existing
        elements.

        Test: editing/undo/redo-style.html

        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply): Added.
        (WebCore::SplitElementCommand::doApply): Modified to call executeApply. 
        (WebCore::SplitElementCommand::doUnapply): Doesn't release m_element1.
        (WebCore::SplitElementCommand::doReapply): Added.
        * editing/SplitElementCommand.h: Added doReapply and executeApply.
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::executeApply): Added.
        (WebCore::WrapContentsInDummySpanCommand::doApply): Modified to call executeApply.
        (WebCore::WrapContentsInDummySpanCommand::doUnapply): Doesn't release m_dummySpan.
        (WebCore::WrapContentsInDummySpanCommand::doReapply): Added.
        * editing/WrapContentsInDummySpanCommand.h: Added doReapply and executeApply.

2009-10-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        DOM Storage's condition variable needs to handle spurious wakeups
        https://bugs.webkit.org/show_bug.cgi?id=30920

        Add a boolean to keep track of whether it's been terminated.  Clean
        up the locking code a tiny bit to make it easier to read.  There's
        no way to reproduce this reliably in a LayoutTest.

        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::LocalStorageThread):
        (WebCore::LocalStorageThread::terminate):
        (WebCore::LocalStorageThread::performTerminate):
        * storage/LocalStorageThread.h:

2009-10-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Include ComplextTextController into Chromium Mac project.

        * WebCore.gyp/WebCore.gyp: Added include rule for ComplextText* files.

2009-10-29  Timothy Hatcher  <timothy@apple.com>

        Fix tabbing through element attributes in the Web Insector.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted): Don't call _updateTitle,
        it is called for us when removeAttribute succeeds in the back-end.
        (WebInspector.ElementsTreeElement.prototype._textNodeEditingCommitted): Ditto except for nodeValue.
        (WebInspector.ElementsTreeElement.prototype._editingCancelled): Don't call _updateTitle, editing code reverts.
        (WebInspector.ElementsTreeElement.prototype._updateTitle): Return early if we are editing.

2009-10-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Problem editing or selecting text containing ligatures
        https://bugs.webkit.org/show_bug.cgi?id=30025

        Test: platform/mac/fast/text/ligature-subdivision.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController): Initialize
        m_characterInCurrentGlyph.
        (WebCore::ComplexTextController::offsetForPosition): If the hit glyph spans multiple
        characters, compute the hit character based on dividing the glyph’s total advance into
        a number of equal intervals equal to the number of characters and assigning the hit to the
        character corresponding to the hit interval.
        (WebCore::ComplexTextController::advance): If the final offset occurs mid-glyph, advance
        by a fraction of the glyph’s total advance.
        * platform/graphics/mac/ComplexTextController.h: Added m_characterInCurrentGlyph.

2009-10-29  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30918>.
        Web Inspector: Datagrid Rows on Windows not properly aligned.
        
        Use line-height for the table rows to make sure the height
        of our text and the height of the table rows are consistent.

        * inspector/front-end/inspector.css:

2009-10-29  Adam Barth  <abarth@webkit.org>

        No review, rolling out r50296.
        http://trac.webkit.org/changeset/50296

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::evaluateInNewContext):

2009-10-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Out-of-memory crash in isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=30906

        We need to handle the fact that creating a V8:Context might fail.  I
        don't know how to test this change because creating a context usually
        only fails when V8 decides it's using too much memory.

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::evaluateInNewContext):

2009-10-29  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Remove build warning introduced by r50284.

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

2009-10-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Remove random crashes by removing retrieval of V8 context during garbage collection.

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

        Unfortunately, I haven't been able to trigger this crash explicitly, so no test :(.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::jsWrapperForDOMObject): Added new "assume-it's-there" getter.
        * bindings/v8/V8DOMWrapper.h: Added getter decl.
        * bindings/v8/V8GCController.cpp:
        (WebCore::GCPrologueVisitor::visitDOMWrapper): Changed to use explicit getter.

2009-10-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Adjust the project files to sync up with
        http://trac.webkit.org/changeset/50259

        * WebCore.gypi: Renamed and added files.

2009-10-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Implement DELETE HTTP method for XmlHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=30894

        No new tests as this functionality is already tested by the 
        xmlhttprequest LayoutTests. As this patch depends on an unreleased
        version of the dependent QtNetwork library and the tests will be
        enabled later once the dependent library is released (and the
        buildbot is updated).

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::start):

2009-10-29  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Part of <http://webkit.org/b/30483>.
        Web Inspector: Always show the Local and Session Storage Views.
        
        Even if the length of the DOM Storage entry array is 0, still
        generate the Datagrid because users can add things storage items
        through the UI, so we should allow them to even if there isn't
        anything there currently.

        * English.lproj/localizedStrings.js: Removed "This Storage is Empty".
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):

2009-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add TimelinePanel into the panels enum.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::specialPanelForJSName):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::):

2009-10-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Oliver Hunt.

        [GTK] Threading problems with some of the tests
        https://bugs.webkit.org/show_bug.cgi?id=30814

        Create strings shared among threads with crossThreadString
        constructor method.

        * storage/Database.cpp:
        (WebCore::Database::Database):

2009-10-29  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=30308
        
        Add support for ARGB videos.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::paint):
        Create the Cairo image surface for ARGB32 or RGB24
        depending on the buffer's caps.
        
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_timeout_func):
        (webkit_video_sink_render):
        Handle ARGB video and convert GStreamer's ARGB to
        Cairo's for displaying.

2009-10-29  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        [chromium] expose a method to access memory usage information in ChromiumBridge
        Declare a static method to be implemented by http://codereview.chromium.org/332010/
        https://bugs.webkit.org/show_bug.cgi?id=30829

        * platform/chromium/ChromiumBridge.h:

2009-10-29  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25679
        [Gtk] Improve accessibility of focusable lists

        Implements the AtkSelection interface and enables the corresponding
        (and expected) object:selection-changed event.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (optionFromList):
        (optionFromSelection):
        (atk_selection_interface_init):
        (webkit_accessible_selection_add_selection):
        (webkit_accessible_selection_clear_selection):
        (webkit_accessible_selection_ref_selection):
        (webkit_accessible_selection_get_selection_count):
        (webkit_accessible_selection_is_child_selected):
        (webkit_accessible_selection_remove_selection):
        (webkit_accessible_selection_select_all_selection):
        (GetAtkInterfaceTypeFromWAIType):
        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (AXObjectCache::postPlatformNotification):

2009-10-29  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        Bug 30655 - Only plain text should be copied to clipboard for TextArea.
        https://bugs.webkit.org/show_bug.cgi?id=30655

        * editing/Editor.cpp:
        (WebCore::nodeIsInTextFormControl):
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):

2009-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: hide timeline for now - not yet ready.

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

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

2009-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: deploy Web Inspector's images in WebCore.gypi.

        * WebCore.gypi:

2009-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: get rid of timelineProfilerEnabled method.

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

        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):
        * inspector/InspectorController.h:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClicked):

2009-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Darin Fisher.

        Create stub methods for raw cookies access in ChromiumBridge.h

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

        * platform/chromium/ChromiumBridge.h:

2009-10-29  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's RareData
        https://bugs.webkit.org/show_bug.cgi?id=30858

        Inherits RareData struct from Noncopyable because it is
        instantiated by 'new' in WebCore/css/CSSSelector.h:259 and 
        it is no need to be copyable.

        * css/CSSSelector.h:

2009-10-29  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's ShorthandScope
        https://bugs.webkit.org/show_bug.cgi?id=30859

        Inherits ShorthandScope class from FastAllocBase because it is 
        instantiated by 'new' in WebCore/css/CSSParser.cpp:902 and 
        it is no need to be copyable.        

        * css/CSSParser.h:

2009-10-29  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's AXObjectCache
        https://bugs.webkit.org/show_bug.cgi?id=30848

        Inherits AXObjectCache class from FastAllocBase because it is
        instantiated by 'new' in WebCore/dom/Document.cpp:1537 and                                
        it is no need to be copyable.

        * accessibility/AXObjectCache.h:

2009-10-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't run JavaScript URLs in view source mode
        https://bugs.webkit.org/show_bug.cgi?id=30881

        Just say no.

        Test: http/tests/security/view-source-no-javascript-url.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):

2009-10-29  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Fixes style problems pointed out by Evan Martin.

        * platform/gtk/Language.cpp:
        (WebCore::defaultLanguage):

2009-10-29  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        64-bit Leopard build fix after r50259
        
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        Declared ATSUTextInserted in 64-bit.
        (WebCore::fontHasMirroringInfo): Use %d format and cast to int.
        (WebCore::disableLigatures): Ditto.
        (WebCore::initializeATSUStyle): Ditto.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Ditto.

2009-10-29  Dan Bernstein  <mitz@apple.com>

        Tiger build fix after r50259

        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:

2009-10-29  Dan Bernstein  <mitz@apple.com>

        Attempted Tiger build fix after r50259

        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:

2009-10-28  Steve Falkenburg  <sfalken@apple.com>

        Rubber stamped by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=30899
        WebKit fails to build release on 32-bit Windows systems

        * WebCore.vcproj/WebCore.vcproj: Excluded files from project.
        * bindings/js/JSBindingsAllInOne.cpp: Added.

2009-10-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jon Honeycutt.

        Fixed typos in color names.

        * inspector/front-end/Color.js:

2009-10-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Share code between the ATSUI- and Core Text-based Font implementations by doing the
        following:
        - Generalize CoreTextController as ComplexTextController, keeping the Core Text-specific
          parts in ComplexTextControllerCoreText.cpp.
        - Generalize FontMacCoreText as FontComplexTextMac using ComplexTextController
        - Implement ATSUI-specific parts of ComplexTextController in ComplexTextControllerATSUI.
        - Remove FontMacATSUI.

        * WebCore.xcodeproj/project.pbxproj: Removed CoreTextController.{cpp,h}, FontMacATSUI.mm,
        and FontMacCoreText.cpp, and added ComplexTextController.{cpp,h},
        ComplexTextControllerATSUI.cpp, ComplexTextControllerCoreText.cpp, and
        FontComplexTextMac.cpp.

        * platform/graphics/mac/ComplexTextController.cpp: Copied from CoreTextController.cpp and
        kept the non-Core Text-specific bits.
        (WebCore::ComplexTextController::ComplexTextController): Updated for renames, including
        its own.
        (WebCore::ComplexTextController::offsetForPosition): Updated for renames and for
        m_complexTextRuns holding references instead of objects.
        (WebCore::ComplexTextController::collectComplexTextRuns): Updated for renames, including
        its own.
        (WebCore::ComplexTextController::advance): Updated for renames.
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Updated for renames and for
        m_complexTextRuns holding references instead of objects, and changed to use the glyphs()
        and advances() accessors.

        * platform/graphics/mac/ComplexTextController.h: Copied from CoreTextController.h and
        renamed CoreTextController to ComplexTextController and CoreTextRun to ComplexTextRun. Made
        the latter RefCounted, added ATSUI-specific members to it, and made some other members
        Core Text-specific. Renamed m_coreTextRuns to m_complexTextRuns and made it hold references
        rather than objects.
        (WebCore::ComplexTextController::ComplexTextRun::create):
        (WebCore::ComplexTextController::ComplexTextRun::glyphs):
        (WebCore::ComplexTextController::ComplexTextRun::advances):

        * platform/graphics/mac/ComplexTextControllerATSUI.cpp: Added. Includes ATSUI-specific
        parts of the ComplexTextController implementation. 
        (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation): This ATSUI
        callback populates the ComplexTextRun’s glyphs, advances and indices vectors. It is invoked
        when the ComplexTextRun constructor calls ATSUGetGlyphBounds().
        (WebCore::isArabicLamWithAlefLigature): Helper function, copied from FontMacATSUI.mm.
        (WebCore::shapeArabic): Helper function, adapted from FontMacATSUI.mm.
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Sets up the
        ATSUTextLayout, substituting the text buffer if necessary for things like shaping Arabic,
        mirroring glyphs or directionality overrides, then calls ATSUGetGlyphBounds() in order to
        get the glyphs, advances and indices vectors populated.
        (WebCore::fontHasMirroringInfo): Helper function, copied from FontMacATSUI.mm.
        (WebCore::disableLigatures): Ditto.
        (WebCore::initializeATSUStyle): Ditto, somewhat cleaned up and simplified.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Constructs
        ComplexTextRuns, either missing-glyphs ones or ATSUTextLayout-based ones.

        * platform/graphics/mac/ComplexTextControllerCoreText.cpp: Copied from
        CoreTextController.cpp and kept the Core Text-specific bits.
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Updated for renames,
        including its own, and moved the code to initialize m_glyphs and m_advances here. Previously
        this was done in adjustGlyphsAndAdvances().
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters): Updated for renames,
        including its own.
        * platform/graphics/mac/CoreTextController.cpp: Removed.
        * platform/graphics/mac/CoreTextController.h: Removed.
        * platform/graphics/mac/FontComplexTextMac.cpp: Renamed FontMacCoreText.cpp to this.
        (WebCore::Font::selectionRectForComplexText): Changed to use ComplexTextController instead
        of CoreTextController.
        (WebCore::Font::drawComplexText): Ditto.
        (WebCore::Font::floatWidthForComplexText): Ditto.
        (WebCore::Font::offsetForPositionForComplexText): Ditto.
        * platform/graphics/mac/FontMacATSUI.mm: Removed.
        * platform/graphics/mac/FontMacCoreText.cpp: Removed.

2009-10-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WAI-ARIA: add support for 'option' role
        https://bugs.webkit.org/show_bug.cgi?id=30843

        Test: accessibility/aria-option-role.html

        * accessibility/AccessibilityListBoxOption.h:
        (WebCore::AccessibilityListBoxOption::canHaveChildren):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::RoleEntry::):
        (WebCore::AccessibilityRenderObject::canHaveChildren):

2009-10-28  Jens Alfke  <snej@chromium.org>

        Reviewed by Eric Seidel.

        Fix GCC compiler warnings in WebCore, and enable -Wall and -Werror for Chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=30716

        * WebCore.gyp/WebCore.gyp:  Enable "chromium_code" flag, just on Mac build for now.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::createARIARoleMap):  Fix struct visibiity warning.
        * bindings/v8/ScriptCallStack.h:  Fix out-of-order member initialization warning.
        * bindings/v8/V8Collection.h:
        (WebCore::getV8Object):  Function in header should not be 'static' (fixes unused-static warning.)
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):  Fix signed/unsigned comparison warning.
        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectGrouperVisitor::applyGrouping):  Fix unused-variable warning.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):  Enable ListButtonPart case to avoid
            warning about missing cases in 'switch' statement.
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):  Fix struct visibiity warning.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::State::State):  Fix out-of-order member initialization warning.
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::shouldRenderMediaControlPart):  Add empty 'default' case in
            'switch' statement to avoid missing-case warning.
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):  Ditto.
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::createFunctionMap):  Fix struct visibiity warning.

2009-10-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION: crashes in WebCore::RedirectScheduler::timerFired(WebCore::Timer<WebCore::RedirectScheduler>*)
        https://bugs.webkit.org/show_bug.cgi?id=30839

        Added null check for the case when the frame is detached from the page.

        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::timerFired):

2009-10-28  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30817
        Use parentObjectUnignored instead of parentObject in webkit_accessible_get_parent

        Also removes the hack I had originally added to solve bug 25411, because
        the fix here is what I should have done in the first place.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_parent):

2009-10-28  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=30805
        Add MessageQueue::removeIf(Predicate&) to remove certain tasks without pulling them from the queue.
        Existing Database tests cover this, no change in functionality.

        * storage/DatabaseThread.cpp:
        (WebCore::SameDatabasePredicate::SameDatabasePredicate): Added predicate that flags the tasks belonging to a specified database.
        (WebCore::SameDatabasePredicate::operator()):
        (WebCore::DatabaseThread::unscheduleDatabaseTasks): changed to use the new removeIf method.

2009-10-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Glue subsequent timeline records with same category
        and title together.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        (WebInspector.TimelineRecordTreeElement.prototype.refresh):

2009-10-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Fails new test fast/js/navigator-language.html
        https://bugs.webkit.org/show_bug.cgi?id=30440

        Reimplement WebCore::defaultLanguage to account for changes in
        locale done by setLocale.

        Already existing test: fast/js/navigator-language.html

        * platform/gtk/Language.cpp:
        (WebCore::defaultLanguage):

2009-10-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7303145> 
        Can't exit full screen mode or restart movie after pressing command -R.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFromDocument):
        (WebCore::HTMLMediaElement::documentWillBecomeInactive):
            Exit from fullscreen if necessary.
        * html/HTMLMediaElement.h:

2009-10-28  Alexey Proskuryakov  <ap@apple.com>

        Unreviewed - a trivial fix to get Windows bots running.

        https://bugs.webkit.org/show_bug.cgi?id=30841
        <rdar://problem/7342730> WebKit should not pass Referer header through a redirect to a non-secure site

        * platform/network/cf/ResourceRequestCFNet.cpp: (WebCore::setHeaderFields): Don't try to
        access empty vector's data.

2009-10-28  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25897
        [Gtk] Extraneous object of ROLE_PANEL in hierarchy for entries

        Remove the extraneous object of ROLE_PANEL.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):

2009-10-28  Jonathan Dixon  <joth@chromium.org>

        Reviewed by Eric Seidel.

        Bug 30547: (Chromium) searchbox not rendered properly due to the css property -webkit-border-radius
        https://bugs.webkit.org/show_bug.cgi?id=30547

        Test: fast/css/text-input-with-webkit-border-radius.html

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
          Implemented rounded border rendering in Chromium Windows theme renderer.

2009-10-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Pull items collections from resources panel and
        timeline panel into AbstractTimelinePanel.

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

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel):
        (WebInspector.AbstractTimelinePanel.prototype.populateSidebar):
        (WebInspector.AbstractTimelinePanel.prototype.createItemTreeElement):
        (WebInspector.AbstractTimelinePanel.prototype.createItemGraph):
        (WebInspector.AbstractTimelinePanel.prototype._showCategory):
        (WebInspector.AbstractTimelinePanel.prototype._hideCategory):
        (WebInspector.AbstractTimelinePanel.prototype.filter):
        (WebInspector.AbstractTimelinePanel.prototype._createGraph):
        (WebInspector.AbstractTimelinePanel.prototype.updateMainViewWidth):
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        (WebInspector.AbstractTimelinePanel.prototype.reset):
        (WebInspector.AbstractTimelinePanel.prototype.get calculator):
        (WebInspector.AbstractTimelinePanel.prototype.set calculator):
        (WebInspector.AbstractTimelinePanel.prototype.addItem):
        (WebInspector.AbstractTimelinePanel.prototype.removeItem):
        (WebInspector.AbstractTimelinePanel.prototype.refreshItem):
        (WebInspector.AbstractTimelinePanel.prototype.revealAndSelectItem):
        (WebInspector.AbstractTimelinePanel.prototype.sortItems):
        (WebInspector.AbstractTimelinePanel.prototype.adjustScrollPosition):
        (WebInspector.AbstractTimelineCategory):
        (WebInspector.AbstractTimelineCategory.prototype.toString):
        * inspector/front-end/ResourceCategory.js:
        (WebInspector.ResourceCategory):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.createItemTreeElement):
        (WebInspector.ResourcesPanel.prototype.createItemGraph):
        (WebInspector.ResourcesPanel.prototype.isCategoryVisible):
        (WebInspector.ResourcesPanel.prototype.populateSidebar):
        (WebInspector.ResourcesPanel.prototype.get searchableViews):
        (WebInspector.ResourcesPanel.prototype.get searchResultsSortFunction.sortFuction):
        (WebInspector.ResourcesPanel.prototype.get searchResultsSortFunction):
        (WebInspector.ResourcesPanel.prototype.searchMatchFound):
        (WebInspector.ResourcesPanel.prototype.searchCanceled):
        (WebInspector.ResourcesPanel.prototype.performSearch):
        (WebInspector.ResourcesPanel.prototype.refresh):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.removeResource):
        (WebInspector.ResourcesPanel.prototype.addMessageToResource):
        (WebInspector.ResourcesPanel.prototype.clearMessages):
        (WebInspector.ResourcesPanel.prototype.refreshResource):
        (WebInspector.ResourcesPanel.prototype.recreateViewForResourceIfNeeded):
        (WebInspector.ResourcesPanel.prototype.showResource):
        (WebInspector.ResourcesPanel.prototype._sortResourcesIfNeeded):
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        (WebInspector.ResourcesPanel.prototype.get _resources):
        (WebInspector.ResourceTimeCalculator.prototype._upperBound):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get categories):
        (WebInspector.TimelinePanel.prototype.populateSidebar):
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype.createItemTreeElement):
        (WebInspector.TimelinePanel.prototype.createItemGraph):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelineCategory):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-10-28  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Resets InspectorFrontend in InspectorTimelineAgent instead of removing it so
        that it remains active on refreshs and page transitions.
        https://bugs.webkit.org/show_bug.cgi?id=30874

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontendProxyObject):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::resetFrontendProxyObject):
        * inspector/InspectorTimelineAgent.h:

2009-10-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get counter values with layoutTestContoller
        https://bugs.webkit.org/show_bug.cgi?id=30555

        Expose WebCore::counterValueForElement as a WebCore API.

        * WebCore.base.exp:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeCounterValuesFromChildren):
        (WebCore::counterValueForElement):
        * rendering/RenderTreeAsText.h:

2009-10-28  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium build fix for r50225.

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

2009-10-28  Eric Z. Ayers  <zundel@google.com>

        Reviewed by Pavel Feldman.

        Adds InspectorTimelineAgent  instrumentation for encountering a
        <SCRIPT> tag when parsing an HTML document. 

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

        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::startLine):
        (WebCore::ScriptSourceCode::url):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::willScriptTag):
        (WebCore::InspectorTimelineAgent::didScriptTag):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createScriptTagTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:

2009-10-28  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Makes sure that Geolocation watch IDs remain positive on overflow.
        https://bugs.webkit.org/show_bug.cgi?id=30122

        No new tests possible.

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::watchPosition): Modified. Reset the watch ID to 1 on overflow.

2009-10-28  George Staikos  <george.staikos@torchmobile.com>

        Attempt to fix the Mac debug build after 50225.

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

2009-10-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30841
        <rdar://problem/7342730> WebKit should not pass Referer header through a redirect to a non-secure site

        Tests: http/tests/ssl/referer-301.html
               http/tests/ssl/referer-303.html

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):
        Remove Referer header if redirecting from https to another protocol.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::clearHTTPReferrer): Update request counterparts, as it is
        always done when changing or adding header fields.
        (WebCore::ResourceRequestBase::clearHTTPOrigin): Ditto.

        * platform/network/ResourceRequestBase.h: clearHTTPReferrer() and clearHTTPOrigin() are
        no longer inline, since they have non-trivial implementations.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Fixed to synchronize header field removals.
        (WebCore::ResourceRequest::doUpdateResourceRequest): Ditto.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        Match Mac changes.
        
2009-10-28  Joe Mason  <jmason@rim.com>

        Reviewed by Adam Treat.

        Add FrameLoader::defaultObjectContentType, containing common code for
        implementing FrameLoaderClient::objectContentType.  (Currently the gtk
        and win ports have copied this code, and the qt port uses similar code
        with a few extra clauses.  Moving this to a utility function cuts down
        on copied code.)   This causes no behavioural change.

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

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):
        * loader/FrameLoader.h:

2009-10-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] QWebHistory::saveState() is inconsistent with the Qt API
        https://bugs.webkit.org/show_bug.cgi?id=30710

        Enforce the versioning, by ignoring any version different
        from 1.

        * history/qt/HistoryItemQt.cpp:
        (WebCore::HistoryItem::restoreState):
        (WebCore::HistoryItem::saveState):

2009-10-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: follow up fix to InspectorControllerStub.
        Define it after inspector.js due to namespace

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

        * inspector/front-end/inspector.html:

2009-10-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add InspectorController stub in order to
        support opening in standalone mode.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/InspectorControllerStub.js: Added.
        (.WebInspector.InspectorControllerStub):
        (.WebInspector.InspectorControllerStub.prototype.wrapCallback):
        (.WebInspector.InspectorControllerStub.prototype.isWindowVisible):
        (.WebInspector.InspectorControllerStub.prototype.platform):
        (.WebInspector.InspectorControllerStub.prototype.closeWindow):
        (.WebInspector.InspectorControllerStub.prototype.attach):
        (.WebInspector.InspectorControllerStub.prototype.detach):
        (.WebInspector.InspectorControllerStub.prototype.storeLastActivePanel):
        (.WebInspector.InspectorControllerStub.prototype.clearMessages):
        (.WebInspector.InspectorControllerStub.prototype.searchingForNode):
        (.WebInspector.InspectorControllerStub.prototype.search):
        (.WebInspector.InspectorControllerStub.prototype.toggleNodeSearch):
        (.WebInspector.InspectorControllerStub.prototype.setAttachedWindowHeight):
        (.WebInspector.InspectorControllerStub.prototype.moveByUnrestricted):
        (.WebInspector.InspectorControllerStub.prototype.addResourceSourceToFrame):
        (.WebInspector.InspectorControllerStub.prototype.addSourceToFrame):
        (.WebInspector.InspectorControllerStub.prototype.getResourceDocumentNode):
        (.WebInspector.InspectorControllerStub.prototype.highlightDOMNode):
        (.WebInspector.InspectorControllerStub.prototype.hideDOMNodeHighlight):
        (.WebInspector.InspectorControllerStub.prototype.inspectedWindow):
        (.WebInspector.InspectorControllerStub.prototype.loaded):
        (.WebInspector.InspectorControllerStub.prototype.localizedStringsURL):
        (.WebInspector.InspectorControllerStub.prototype.windowUnloading):
        (.WebInspector.InspectorControllerStub.prototype.hiddenPanels):
        (.WebInspector.InspectorControllerStub.prototype.debuggerEnabled):
        (.WebInspector.InspectorControllerStub.prototype.enableResourceTracking):
        (.WebInspector.InspectorControllerStub.prototype.disableResourceTracking):
        (.WebInspector.InspectorControllerStub.prototype.resourceTrackingEnabled):
        (.WebInspector.InspectorControllerStub.prototype.enableDebugger):
        (.WebInspector.InspectorControllerStub.prototype.disableDebugger):
        (.WebInspector.InspectorControllerStub.prototype.addBreakpoint):
        (.WebInspector.InspectorControllerStub.prototype.removeBreakpoint):
        (.WebInspector.InspectorControllerStub.prototype.updateBreakpoint):
        (.WebInspector.InspectorControllerStub.prototype.pauseInDebugger):
        (.WebInspector.InspectorControllerStub.prototype.pauseOnExceptions):
        (.WebInspector.InspectorControllerStub.prototype.setPauseOnExceptions):
        (.WebInspector.InspectorControllerStub.prototype.resumeDebugger):
        (.WebInspector.InspectorControllerStub.prototype.profilerEnabled):
        (.WebInspector.InspectorControllerStub.prototype.enableProfiler):
        (.WebInspector.InspectorControllerStub.prototype.disableProfiler):
        (.WebInspector.InspectorControllerStub.prototype.startProfiling):
        (.WebInspector.InspectorControllerStub.prototype.stopProfiling):
        (.WebInspector.InspectorControllerStub.prototype.getProfileHeaders):
        (.WebInspector.InspectorControllerStub.prototype.getProfile):
        (.WebInspector.InspectorControllerStub.prototype.takeHeapSnapshot):
        (.WebInspector.InspectorControllerStub.prototype.databaseTableNames):
        (.WebInspector.InspectorControllerStub.prototype.stepIntoStatementInDebugger):
        (.WebInspector.InspectorControllerStub.prototype.stepOutOfFunctionInDebugger):
        (.WebInspector.InspectorControllerStub.prototype.stepOverStatementInDebugger):
        (.WebInspector.InspectorControllerStub.prototype.setSetting):
        (.WebInspector.InspectorControllerStub.prototype.dispatchOnInjectedScript):
        (.WebInspector.InspectorControllerStub.prototype.releaseWrapperObjectGroup):
        (.WebInspector.InspectorControllerStub.prototype.setting):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.UIString):

2009-10-28  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25897
        [Gtk] Extraneous object of ROLE_PANEL in hierarchy for entries

        Expands upon the new funtionality which allows platforms to indicate
        that a particular object should not be ignored, so that they can
        specify that an object should be ignored or that it should be left up
        to the default handling to decide.

        * accessibility/AccessibilityObject.h:
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        * accessibility/mac/AccessibilityObjectMac.mm:
        * accessibility/qt/AccessibilityObjectQt.cpp:
        * accessibility/win/AccessibilityObjectWin.cpp:
        * accessibility/wx/AccessibilityObjectWx.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::accessibilityIsIgnored):


2009-10-28  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25534
        [GTK] Objects of ROLE_TABLE should implement the accessible table interface

        Expose the table summary as the accessible description because there is no summary object.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_description):

2009-10-28  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Adds ScriptController::intializeThreading(), with both JSC and V8 implementations.
        https://bugs.webkit.org/show_bug.cgi?id=30678

        This new method is used from common code, rather than calling JSC::initializeThreading() (or the V8 equivalent) directly.

        Build fix, no new tests required.

        * bindings/js/ScriptController.cpp: Modified.
        (WebCore::ScriptController::initializeThreading): Added.
        * bindings/js/ScriptController.h: Modified. Adds ScriptController::initializeThreading().
        * bindings/v8/ScriptController.cpp: Modified.
        (WebCore::ScriptController::initializeThreading): Added.
        * bindings/v8/ScriptController.h: Modified. Adds ScriptController::initializeThreading().
        * loader/icon/IconDatabase.cpp: Modified.
        (WebCore::iconDatabase): Call ScriptController::initializeThreading(), rather than JSC::initializeThreading().
        * storage/Database.cpp: Modified.
        (WebCore::Database::Database): Call ScriptController::initializeThreading(), rather than JSC::initializeThreading().

2009-10-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Document a feature of the m_liveDecodedResources list.
        https://bugs.webkit.org/show_bug.cgi?id=30209

        The code made the assumption that the list is sorted by
        the m_lastDecodedAccessTime property of the CachedResource.
        The above is not true when CachedResource::setDecodedSize
        is called and the item is inserted the first time. In this
        case the m_lastDecodedAccessTime is still zero and the
        m_liveDecodedResources list becomes unsorted.

        It is impossible that Cache::pruneLiveResources will
        stop to process the list too early due this feature and
        the alternatives of updating m_lastDecodedAccessTime in
        CachedResource::setDecodedSize or changing the insert
        to search the right position have a negative impact on
        performance. The best solution for now is to document
        this feature.

        * loader/Cache.cpp:
        (WebCore::Cache::pruneLiveResources):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setDecodedSize):

2009-10-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        [Gtk] Extraneous object of ROLE_PANEL in hierarchy for entries
        https://bugs.webkit.org/show_bug.cgi?id=25897

        Make text controls always implement the text interface, and the
        editable text interface when they are not read only. This is what
        ATK-users expect.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getInterfaceMaskFromObject):

2009-10-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Fraser.

        Change HitTestResult methods to use (3d) transformation aware methods
        https://bugs.webkit.org/show_bug.cgi?id=27347

        The current HitTestResult methods are not using the (3d)
        transformation aware routines. This can lead to an assertion
        SVGRenderBase::mapLocalToContainer method.

        Change HitTestResult::imageRect to use the (3d) transformation
        aware RenderBox::absoluteContentQuad to avoid running into
        an assertion with SVG content.

        Remove HitTestResult::boundingBox() as it is only used in
        two places and conceptually doesn't belong into a HitTest
        which is operating on points.

        A classic test case is not possible as the methods are not excercised
        from within HTML/SVG but from the WebKit API Layer. A unittest
        for Qt/Gtk+/Mac would need to be written but Qt/Gtk+ currently
        do not support 3d transformations making it impossible to write
        a reliable test case and the Mac port is currently not doing
        unit testing.


        * rendering/HitTestResult.cpp: Remove boundingBox() method
        (WebCore::HitTestResult::imageRect): Use transformation aware method
        * rendering/HitTestResult.h: Remove boundingBox()

2009-10-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Eric Seidel.

        [Qt] Custom Cursor doesn't use hotspot.
        https://bugs.webkit.org/show_bug.cgi?id=30820

        Cursors loaded from a QPixmap didn't specifiy the
        hotspot. Take the hotspot values from the mac
        implementation.

        * platform/qt/CursorQt.cpp:

2009-10-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Initial revision of the Timeline grid.

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

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype.populateSidebar):
        (WebInspector.AbstractTimelinePanel.prototype.refresh):
        (WebInspector.AbstractTimelineCalculator):
        * inspector/front-end/Images/timelineBarBlue.png: Added.
        * inspector/front-end/Images/timelineBarGray.png: Added.
        * inspector/front-end/Images/timelineBarGreen.png: Added.
        * inspector/front-end/Images/timelineBarOrange.png: Added.
        * inspector/front-end/Images/timelineBarPurple.png: Added.
        * inspector/front-end/Images/timelineBarRed.png: Added.
        * inspector/front-end/Images/timelineBarYellow.png: Added.
        * inspector/front-end/Images/timelineCheckmarks.png: Added.
        * inspector/front-end/Images/timelineDots.png: Added.
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceTimeCalculator):
        (WebInspector.ResourceTransferSizeCalculator):
        * inspector/front-end/TimelineAgent.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype.get categories):
        (WebInspector.TimelinePanel.prototype.populateSidebar):
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        (WebInspector.TimelinePanel.prototype.addItemToTimeline):
        (WebInspector.TimelinePanel.prototype.refresh):
        (WebInspector.TimelinePanel.prototype._toggleTimelineButtonClick):
        (WebInspector.TimelinePanel.prototype.reset):
        (WebInspector.TimelinePanel.prototype._formatRecord):
        (WebInspector.TimelinePanel.prototype.showCategory):
        (WebInspector.TimelinePanel.prototype.hideCategory):
        (WebInspector.TimelineRecordTreeElement):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.computePercentageFromEventTime):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphLabels):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineCalculator.prototype.formatValue):
        (WebInspector.TimelineGraph):
        (WebInspector.TimelineGraph.prototype.get graphElement):
        (WebInspector.TimelineGraph.prototype.refreshLabelPositions):
        (WebInspector.TimelineGraph.prototype.refresh):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2009-10-27  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Move runAfterPendingDispatches to TestController for Clarity
        https://bugs.webkit.org/show_bug.cgi?id=30844

        * inspector/front-end/TestController.js:
        (WebInspector.TestController.prototype.runAfterPendingDispatches):
        * inspector/front-end/inspector.js: moved runAfterPendingDispatches

2009-10-27  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add missing forward declaration of FramelessScrollView.
        https://bugs.webkit.org/show_bug.cgi?id=30824

        * platform/chromium/FramelessScrollViewClient.h:

2009-10-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Adele Peterson.

        WAI-ARIA: add support for 'presentation' role
        https://bugs.webkit.org/show_bug.cgi?id=30806

        Test: accessibility/aria-presentational-role.html

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

2009-10-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        ARIA menu/menu item need AXRoleDescription
        https://bugs.webkit.org/show_bug.cgi?id=30804

        Make sure that role descriptions will default to the system's first, before
        returning an unknown role.

        Test: platform/mac/accessibility/aria-menu-role-descriptions.html

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper roleDescription]):

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: migrated away from API that no longer exists.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: migrated away from API that no longer exists.

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

2009-10-27  Oliver Hunt  <oliver@apple.com>

        Fix wording in comment.

        * bridge/objc/objc_instance.mm:
        (allocateAutoReleasePool):

2009-10-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Crash occurs after launching Newsfire 1.6 for the first time
        https://bugs.webkit.org/show_bug.cgi?id=30807

        We allocate an autorelease pool but then store it off the stack. In a
        GC environment this led to it being collected, and thus caused badness
        to ensue.  To work around this we simply avoid using a pool at all in
        a GC environment as it would be a no-op anyway.

        * bridge/objc/objc_instance.mm:
        (allocateAutoReleasePool):
        (ObjcInstance::virtualBegin):

2009-10-27  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        When a Geolocation method is called, immediately calls the error calback asynchronously if permissions
        have already been denied.
        https://bugs.webkit.org/show_bug.cgi?id=27944.

        Tests: fast/dom/Geolocation/permission-denied-already-error.html
               fast/dom/Geolocation/permission-denied-already-success.html

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::GeoNotifier::GeoNotifier): Modified. GeoNotifier takes Geolocation object as constructor argument.
        (WebCore::Geolocation::GeoNotifier::setFatalError): Added. Sets a fatal error for this notifier, causing it to terminate immediately and call the error callback asynchronously.
        (WebCore::Geolocation::GeoNotifier::timerFired): Added. Used to call the error callback asynchronously on fatal error.
        (WebCore::Geolocation::getCurrentPosition): Modified. Calls startRequest.
        (WebCore::Geolocation::watchPosition): Modified. Calls startRequest.
        (WebCore::Geolocation::startRequest): Added. Common functionality for starting a one-shot or watch request. Sets a fatal error on the notifier if permissions have already been denied.
        (WebCore::Geolocation::fatalErrorOccurred): Added. Registers that a notifier has encountered a fatal error and should be destroyed.
        (WebCore::Geolocation::setIsAllowed): Modified. Uses a standard error message for the error callback when permissions are denied.
        * page/Geolocation.h: Modified.
        (WebCore::Geolocation::isDenied): Added. Determines whether permissions have been denied.

2009-10-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Fixed a bug where I was using the wrong Canvas pointer to do a cross-domain check
        https://bugs.webkit.org/show_bug.cgi?id=30840

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

2009-10-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGStyledElement::getPresentationAttribute() can return a shared CSSValue (some SVG tests randomly fail on the bot, and in release builds)
        https://bugs.webkit.org/show_bug.cgi?id=29620

        SVG was modifying CSSValues cached of off CSSMappedAttributeDeclarations.
        This patch fixes the check to make sure that a new CSSMappedAttributeDeclaration is
        created before returning a CSSValue that JavaScript can modify.

        Test: svg/dom/getPresentationAttribute-cache-corruption.svg

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute):

2009-10-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Incomplete repaint of text field in relative positioned inline at imdb.com
        https://bugs.webkit.org/show_bug.cgi?id=30047

        Test: fast/repaint/inline-relative-positioned.html

        Implemented offsetFromContainer(), mapLocalToContainer() and
        mapAbsoluteToLocalPoint() in RenderInline.

        * rendering/RenderBox.h: Fixed argument names in the declaration of
        mapLocalToContainer().
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::offsetFromContainer):
        (WebCore::RenderInline::mapLocalToContainer):
        (WebCore::RenderInline::mapAbsoluteToLocalPoint):
        * rendering/RenderInline.h:

2009-10-27  Jeremy Orlow  <jorlow@chromium.org>

        Speculative build fix for Chromium.

        * platform/graphics/GraphicsContext3D.h:

2009-10-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.
        
        Make WebGL context failure more robust and make it succeed in more cases
        https://bugs.webkit.org/show_bug.cgi?id=30349

        Bubble a failure to get a CGLContext up to HTMLContextElement so it can
        return null from getContext. Also added a more robust pixel format choosing 
        mechanism and can render correctly when a SW renderer is chosen.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext3D.cpp:
        * html/canvas/CanvasRenderingContext3D.h:
        (WebCore::CanvasRenderingContext3D::graphicsContext3D):
        (WebCore::CanvasRenderingContext3D::cleanupAfterGraphicsCall):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/Canvas3DLayer.mm:
        (-[Canvas3DLayer copyCGLPixelFormatForDisplayMask:]):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::setPixelFormat):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::ensureContext):

2009-10-27  Geoffrey Garen  <ggaren@apple.com>

        Mac build fix: a forwarding header.

        * ForwardingHeaders/wtf/DateInstanceCache.h: Added.

2009-10-27  Ryosuke Niwa  <rniwa@webkit.org>

        No Review.

        Making fontWeightIsBold static to fix Snow Leopard build.

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

2009-10-27  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        WebKit cannot remove nested bold tags
        https://bugs.webkit.org/show_bug.cgi?id=30784

        This patch modifies getPropertiesNotInComputedStyle so that it compares font-weight
        more flexibly. Instead of comparing cssText, it uses fontWeightIsBold which converts
        all font weights to either bold or unbold state.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::fontWeightIsBold):
        (WebCore::getPropertiesNotInComputedStyle): Removes font-weight property
        if two style have the same value under getFontWeightValue

2009-10-27  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

        Give an ability to WebKit to free statically allocated pointers
        before quit.
        https://bugs.webkit.org/show_bug.cgi?id=27980

        No new tests for this as the change does not affect WebKit
        functionality, but only memory usage.

        * JavaScriptCore/wtf/StdLibExtras.h:
        Allowed for the override of DEFINE_STATIC_LOCAL via compiler 
        commandline options or elsewhere in the code. Useful for 
        implementing custom builds that free resources allocated via
        DEFINE_STATIC_LOCAL.

2009-10-27  Dumitru Daniliuc  <dumi@chromium.org>

        Build fix, no review needed.

        Fixing the BUILD. m_estimatedSize in Database.h should be of type
        'unsigned long' instead of 'unsigned long long'.

        No tests required.

        * storage/Database.h:

2009-10-27  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Refactoring the Database class to not depend on
        OriginQuotaManager. Also, adding a SecurityOrigin copy to each
        Database instance, that is safe to use on the file
        thread. Finally, adding new simple fields and getters to the
        Database object for storing/getting the display name and estimated
        size specified by the user in the openDatabase() call.

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

        * page/SecurityOrigin.h:
        * storage/Database.cpp:
        (WebCore::Database::openDatabase): Storing the display name and
        the estimated size in the Database object.
        (WebCore::Database::Database): Storing the display name and the
        estimated size in the Database object, as well as a SecurityOrigin
        instance that is safe to use on the DB thread.
        (WebCore::Database::maximumSize): Delegate the call to
        DatabaseTracker::getMaxSizeForDatabase().
        (WebCore::Database::databaseThreadSecurityOrigin): Return the
        SecurityOrigin instance that's safe to use on the DB thread.
        (WebCore::Database::threadSafeSecurityOrigin): Return the
        SecurityOrigin instance that's safe to use on the current thread.
        (WebCore::Database::displayName): Return the display name
        specified by the user in the openDatabase() call.
        (WebCore::Database::estimatedSize): Return the estimated size
        specified by the user in the openDatabase() call.
        (WebCore::Database::fileName): Return the name of the file where
        the current Database is tored.
        * storage/Database.h:
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase): Returns the
        maximum size for a DB file based on the current size of that file
        and the space available for that origin.
        * storage/DatabaseTracker.h:
        * storage/SQLTransaction.cpp:
        * storage/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didCommitTransaction): Use the
        correct SecurityOrigin instance.

2009-10-27  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Pretty Print all HTML Collection Types like we do for NodeList
        https://bugs.webkit.org/show_bug.cgi?id=30709

        Test: inspector/console-format-collections.html

        * inspector/front-end/InjectedScript.js:
        (Object.type): check for instances of HTMLCollection like we do for NodeList
        * inspector/front-end/inspector.js: added WebInspector.pendingDispatches counter
        (WebInspector.dispatch): increment and decrement dispatch counter
        (WebInspector.runAfterPendingDispatches): run when there are no more dispatches

2009-10-27  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Adds XMLHttpRequest support to InspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=30578

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::didChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::didLoadXHR):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeTimelineRecord):
        (WebCore::TimelineRecordFactory::createXHRLoadTimelineRecord):
        * inspector/TimelineRecordFactory.h:
        * inspector/front-end/TimelineAgent.js:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2009-10-27  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (Safari 4.0.3-ToT): After pressing Shift-PageDown, pressing Shift-Up 
        extends the top of the selection upwards (but should shrink the selection instead)
        <rdar://problem/7269075>
        https://bugs.webkit.org/show_bug.cgi?id=29981

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify): Added setting m_lastChangeWasHorizontalExtension.

2009-10-27  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by Tim Hatcher.
        
        Removed an extra console.log from ElementsTreeOutline.

        * inspector/front-end/ElementsTreeOutline.js:

2009-10-27  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Rewrote JavaScriptSourceSyntaxHighlighter to be more accurate
        https://bugs.webkit.org/show_bug.cgi?id=27147

        Tests: LayoutTests/inspector/javascript-syntax-highlight.html

        * inspector/front-end/ElementsTreeOutline.js:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.JavaScriptSourceSyntaxHighlighter.process): Added. Processes 100 tokens at a time.
        (WebInspector.JavaScriptSourceSyntaxHighlighter.lex): Added. Scans for a token.
        (WebInspector.JavaScriptSourceSyntaxHighlighter.appendNonToken): Added. Appends the non-token characters that lex ignored.
        (WebInspector.JavaScriptSourceSyntaxHighlighter.syntaxHighlightNode): Added. To syntax highlight node in ElementsTreeOutline.

2009-10-27  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        [V8] Missing null check after string conversion in error reporting
        https://bugs.webkit.org/show_bug.cgi?id=30774

        Add null check after string conversion in error reporting code.
        ToString conversion can fail for instance when an exception is
        thrown during conversion.

        Test: fast/dom/error-to-string-stack-overflow.html

        * bindings/v8/V8Utilities.cpp:
        (WebCore::reportException):

2009-10-27  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Use a pair of maps to store Geolocation watchers.
        https://bugs.webkit.org/show_bug.cgi?id=29178

        The pair of maps allows us to look up a watcher either by its ID or by its GeoNotifier object.
        The ability to look up by a watcher by its GeoNotifier object will be required when implementing
        Geolocation::fatalErrorOccurred. See https://bugs.webkit.org/show_bug.cgi?id=27944

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::Watchers::set): Added. Adds a watcher with the given ID.
        (WebCore::Geolocation::Watchers::remove): Added. Removes a watcher by ID.
        (WebCore::Geolocation::Watchers::remove): Added. Removes a watcher by GeoNotifier object.
        (WebCore::Geolocation::Watchers::clear): Added. Removes all watchers.
        (WebCore::Geolocation::Watchers::isEmpty): Added. Determines if there are no watchers.
        (WebCore::Geolocation::Watchers::getNotifiersVector): Added. Gets a vector of the GeoNotifier objects.
        (WebCore::Geolocation::watchPosition): Modified. Rename watcher identifier static variable.
        (WebCore::Geolocation::stopTimersForWatchers): Modified. Use Watchers::getNotifiersVector.
        (WebCore::Geolocation::handleError): Modified. Use Watchers::getNotifiersVector.
        (WebCore::Geolocation::makeSuccessCallbacks): Modified. Use Watchers::getNotifiersVector.
        * page/Geolocation.h: Modified. Adds Geolocation::Watchers class.

2009-10-27  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] DOM Storage runtime flag should default to on
        https://bugs.webkit.org/show_bug.cgi?id=30828

        The DOM Storage runtime flag was supposed to default to on.  I accidentally
        changed the logic to default to false when I moved the flag.

        * bindings/v8/RuntimeEnabledFeatures.cpp:

2009-10-27  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix crash found in chromium test_shell.
        https://bugs.webkit.org/show_bug.cgi?id=30808

        When WebSocket is deleted without close, webkit would crash
        when it handles didClose.

        Check scriptExecutionContext before post task for event.
        Use WebSocketChannel::disconnect() instead of close() in WebSocket
        destructor, so that WebSocketChannel should not call deleted WebSocket
        back in didClose().
        To make sure WebSocketChannel alive while it is processing WebSocket
        protocol over SocketStreamHandle, ref() in connect() and deref() in
        didClose().

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::~WebSocket):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::didReceiveData):
        * websockets/WebSocketChannel.h:

2009-10-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Updated Apple license

        * LICENSE-APPLE:

2009-10-27  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig.

        Re-enable the check that disallows pages with unload handlers in the page cache.

        <rdar://problem/7196485> and http://webkit.org/b/29021 

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):

2009-10-27  Timothy Hatcher  <timothy@apple.com>

        Remove more empty files that didn't get removed earlier.

        * inspector/DOMDispatchTimelineItem.cpp: Removed.
        * inspector/DOMDispatchTimelineItem.h: Removed.

2009-10-27  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix assertion crashes introduced by changes made in r50110.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseEndElement): only call popCurrentNode() if there are nodes left in the stack.

2009-10-27  Timothy Hatcher  <timothy@apple.com>

        Remove empty files that didn't get removed earlier.

        * inspector/TimelineItem.cpp: Removed.
        * inspector/TimelineItem.h: Removed.

2009-10-27  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25534
        [GTK] Objects of ROLE_TABLE should implement the accessible table interface

        First part of the implementation of AtkTable.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getCell):
        (getCellIndex):
        (webkit_accessible_table_ref_at):
        (webkit_accessible_table_get_index_at):
        (webkit_accessible_table_get_n_columns):
        (webkit_accessible_table_get_n_rows):
        (webkit_accessible_table_get_column_extent_at):
        (webkit_accessible_table_get_row_extent_at):
        (webkit_accessible_table_get_row_header):
        (atk_table_interface_init):
        (AtkInterfacesInitFunctions):
        (GetAtkInterfaceTypeFromWAIType):

2009-10-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Lars Knoll.

        [Qt] Don't lose remainder when computing wheel event deltas

        * platform/qt/WheelEventQt.cpp:

2009-10-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Antti Koivisto.

        Fix QtWebKit build for WIN_OS if Netscape plug-in support
        is turned off and refactor some related code
        https://bugs.webkit.org/show_bug.cgi?id=30786

        No new tests as there is no new functionality introduced.

        * platform/FileSystem.h: Refactor to make sure that each different
        type definition is only repeated once.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::compareFileVersion): Move it out from the
        ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH guard and combine it with the
        function body from PluginPackageWin.

        * plugins/win/PluginPackageWin.cpp: Remove compareFileVersion as
        it is now in PluginPackage.cpp.

2009-10-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=27011
        [Gtk] Implement support for get_index_in_parent

        Implement atk_object_get_index_in_parent.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_index_in_parent):

2009-10-27  Eric Seidel  <eric@webkit.org>

        No review, rolling out r50131.
        http://trac.webkit.org/changeset/50131

        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance):
        (ObjcInstance::virtualEnd):

2009-10-26  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

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

        Fixes an issue where pressing return/enter on the keyboard 
        in <isindex> does not submit it if is not within a <form>.

        According to the HTML 2.0 thru HTML 4.01 spec 
        (http://www.w3.org/MarkUp/html-spec/html-spec_7.html#SEC7.5), the 
        <isindex> element does not need to be within a <form> element in 
        order to submit it. It can submitted on its own. Also, if present,
        the href property of the <base> element will dictate where to submit
        the value of the <isindex> element (this is analogous to the action 
        property of the <form> element).

        Tests: http/tests/misc/isindex-with-no-form-base-href.html
               http/tests/misc/isindex-with-no-form.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): Calls createTemporaryFormForIsIndex()
        to create a <form> if none is present and we are an <isindex> element.
        (WebCore::HTMLInputElement::createTemporaryFormForIsIndex): Added.
        * html/HTMLInputElement.h:

2009-10-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Crash occurs after launching Newsfire 1.6 for the first time
        https://bugs.webkit.org/show_bug.cgi?id=30807

        Use a RetainPtr in ObjcBinding to ensure that we adequately
        protect the autorelease pool from GC in GC'd applications.

        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance):
        (ObjcInstance::virtualEnd):

2009-10-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Build fix for QtWebKit after r50125.

        * WebCore.pro: Rename TimelineItem to TimelineRecord.

2009-10-26  Matt Mueller  <mattm@chromium.org>

        Reviewed by Darin Adler.

        Refactor synchronizable property handling to store one shouldSynchronize flag per set of properties rather than one per property.

        Fixes reading uninitialized memory in SynchronizableProperty hash function as well as simplifying the code.

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

        Covered by running various svg tests under valgrind, ex:
        LayoutTests/svg/custom/js-late-mask-and-object-creation.svg

        * svg/SynchronizablePropertyController.cpp:
        (WebCore::SynchronizableProperties::addProperty):
        (WebCore::SynchronizableProperties::synchronize):
        (WebCore::SynchronizableProperties::startAnimation):
        (WebCore::SynchronizableProperties::stopAnimation):
        (WebCore::SynchronizablePropertyController::registerProperty):
        (WebCore::SynchronizablePropertyController::setPropertyNeedsSynchronization):
        (WebCore::SynchronizablePropertyController::synchronizeProperty):
        (WebCore::SynchronizablePropertyController::synchronizeAllProperties):
        (WebCore::SynchronizablePropertyController::startAnimation):
        (WebCore::SynchronizablePropertyController::stopAnimation):
        * svg/SynchronizablePropertyController.h:
        (WebCore::SynchronizableProperties::SynchronizableProperties):
        (WebCore::SynchronizableProperties::setNeedsSynchronization):

2009-10-26  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Renames TimelineItem to TimelineRecord and updates all call sites.
        https://bugs.webkit.org/show_bug.cgi?id=30785

        * GNUmakefile.am: 
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addRecordToTimeline):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::didDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::willFireTimer):
        (WebCore::InspectorTimelineAgent::didFireTimer):
        (WebCore::InspectorTimelineAgent::reset):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        (WebCore::InspectorTimelineAgent::RecordEntry::RecordEntry):
        * inspector/TimelineItemFactory.cpp: Removed.
        * inspector/TimelineItemFactory.h: Removed.
        * inspector/TimelineRecordFactory.cpp: Added.
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createDOMDispatchRecord):
        (WebCore::TimelineRecordFactory::createGenericTimerRecord):
        (WebCore::TimelineRecordFactory::createTimerInstallRecord):
        * inspector/TimelineRecordFactory.h: Added.
        (WebCore::TimelineRecordFactory::TimelineRecordFactory):
        * inspector/front-end/TimelineAgent.js:
        (WebInspector.addRecordToTimeline):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype.addRecordToTimeline):
        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
        (WebInspector.TimelinePanel.prototype.getRecordTypeName):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):

2009-10-26  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Antti Koivisto.

        [Qt] Windowless Plugins : Print preview shows only part of flash when view is scrolled
        
        When printing, QPrinter's preview mode uses a QPicture to capture the output. The
        QPicture holds a reference to the X Pixmap. As a result, the print preview would
        update itself when the X Pixmap changes. To prevent the print preview from updating
        whenever m_drawable is updated (i.e when the view updates), we create a copy.
        
        We require that a QPixmap::copy() result in a QPixmap backed by a XPixmap
        regardless of the graphicssystem. This is taken care of by
        commit d310f7c710ecb331a9689861f0551eabd38e946e in Qt (4.6)
        
        The beauty of this patch is that the newly created X Pixmap is managed by Qt and
        it will free the Pixmap whenever the user closes the print preview dialog and
        handles the case of displaying multiple preview dialogs nicely.
        
        All credit to Samuel Rødal for suggesting usage of QPixmap::copy().
        
        https://bugs.webkit.org/show_bug.cgi?id=30714

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paint):

2009-10-26  Benjamin Otte  <otte@gnome.org>

        Reviewed by Gustavo Noronha.

        Don't store properties in the MediaPlayerPrivate class

        Access them via the MediaPlayer class instead.
        https://bugs.webkit.org/show_bug.cgi?id=30462

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::seek):
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setRate):
        (WebCore::MediaPlayerPrivate::setVisible):
        (WebCore::MediaPlayerPrivate::paint):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-10-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30801>.
        Web Inspector: Control + ]/[ on Windows doesn't change Panels.
        
        In my testing, Windows uses "U+00DB" and "U+00DD" to represent
        [ and ], so we should honor those as well.

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

2009-10-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Make .rc files compile on Windows without depending on MFC headers
        https://bugs.webkit.org/show_bug.cgi?id=30750

        * WebCore.vcproj/QTMovieWin.rc: Use winresrc.h because it exists 
        even when MFC is not installed, and is all that's needed here.

2009-10-26  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Darin Adler.

        Build corrections for ENABLE_FILTERS in Windows.
        https://bugs.webkit.org/show_bug.cgi?id=30797

        Build correction for ENABLE_FILTERS feature.  No new tests needed.

        * platform/graphics/filters/FEColorMatrix.cpp: Use MathExtras.h and
          its piDouble constant.
        * platform/graphics/filters/FEGaussianBlur.cpp: Use MathExtras.h and
          its piDouble constant.  Remove unnecessary call to floor used in
          the division of an unsigned, converting to int.
        * platform/graphics/win/SimpleFontDataCairoWin.cpp: Correct include
          style for MathExtras.h.

2009-10-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7289467> and http://webkit.org/b/30798 - REGRESSION (r48687): www.myuhc.com doesn't load.

        Test: fast/loader/grandparent-completion-starts-redirect.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::completed): Notify all descendants that the load completed, not just direct children.

2009-10-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        Re-add CSSPropertyWebkitBackgroundSize in one more place

        Fixes transitions/multiple-background-size-transitions.html, transitions/background-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):

2009-10-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Tidy up the DOM Storage runtime flag stuff
        https://bugs.webkit.org/show_bug.cgi?id=30794

        Clean up the DOM Storage runtime flag stuff to match the new way of doing
        things.  No behavioral changes.

        * bindings/v8/RuntimeEnabledFeatures.cpp:
        * bindings/v8/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDatabaseEnabled):
        (WebCore::RuntimeEnabledFeatures::databaseEnabled):
        (WebCore::RuntimeEnabledFeatures::setLocalStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::localStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::setSessionStorageEnabled):
        (WebCore::RuntimeEnabledFeatures::sessionStorageEnabled):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * storage/Storage.cpp:
        * storage/Storage.h:

2009-10-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7308952> and http://webkit.org/b/30424 - REGRESSION (r48687): Pages on ucas.com appear blank.

        Test: fast/loader/history-forward-in-head.html

        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleHistoryNavigation): Restore the moved canGoBackOrForward() check.
          This restores the side effect of an invalid history navigation canceling previous scheduled redirects
          and also fixes the bug of scheduling an invalid history navigation canceling parsing of the current document.
        (WebCore::RedirectScheduler::timerFired): Removed the canGoBackOrForward() check as it is now made before
          the redirect is scheduled.

2009-10-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30049
        <rdar://problem/7286002> Manipulating DOM from a script while parsing XHTML can cause a crash

        Tests: fast/parser/remove-current-node-parent-x-2.xhtml
               fast/parser/remove-current-node-parent-x.xhtml

        * dom/XMLTokenizer.h: Store the whole stack of parent nodes - element.parentNode() is
        unreliable after DOM manipulation.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::pushCurrentNode): Push the new node onto stack.
        (WebCore::XMLTokenizer::popCurrentNode): This is now called instead of setCurrentNode when
        exiting a node.
        (WebCore::XMLTokenizer::clearCurrentNodeStack): We're aborting; or just done parsing. This
        replaces setCurrentNode(0).
        (WebCore::XMLTokenizer::enterText): Call pushCurrentNode().
        (WebCore::XMLTokenizer::exitText): Call popCurrentNode(), removing a long-standing FIXME
        (not sure if it was ever practical though - how can a parent become null while adding text?)

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::~XMLTokenizer): Call clearCurrentNodeStack().
        (WebCore::XMLTokenizer::startElementNs): Call pushCurrentNode().
        (WebCore::XMLTokenizer::endElementNs): Call popCurrentNode() to safely get to a parent. Also
        added a check fo script element still being in document - Firefox parses those that aren't,
        but doesn't execute them.

        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::~XMLTokenizer):
        (WebCore::XMLTokenizer::parseStartElement):
        (WebCore::XMLTokenizer::parseEndElement):
        Match libxml2 version changes.

2009-10-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        background-size: X treated as background-size: X X, not background-size: X auto
        https://bugs.webkit.org/show_bug.cgi?id=28440

        Updated fast/backgrounds/size/resources/parsing-background-size-values.js
        and fast/backgrounds/size/resources/parsing-inherit.js

        Reinstated -webkit-background-size and kept its behavior of filling in
        the second value with the first one; and changed background-size to have
        the behavior of filling in the second value with 'auto'.

        * css/CSSComputedStyleDeclaration.cpp:
        (computedProperties): Re-added CSSPropertyWebkitBackgroundSize.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Ditto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Ditto.
        (WebCore::CSSParser::parseFillSize): Adapted for the new parsing rule.
        (WebCore::CSSParser::parseFillProperty): Re-added
        CSSPropertyWebkitBackgroundSize.
        (WebCore::cssPropertyID): Removed mapping of -webkit-background-size to
        background-size.
        * css/CSSParser.h:
        * css/CSSPropertyNames.in: Re-added -webkit-background-size.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Re-added
        CSSPropertyWebkitBackgroundSize.

2009-10-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Use "%lli" to format "long long" on WIN_OS to fix HTML5 WebDB crash
        https://bugs.webkit.org/show_bug.cgi?id=30777

        No new tests as the crash can be reproduced by existing storage
        LayoutTests (by hitting an assert in debug mode Webkit on WIN_OS).

        * platform/text/String.cpp:
        (WebCore::String::number): Qt's QString::vsprintf does not
        understand the "%I64u" format string. Always use the "%lli"
        format string for Qt port.

2009-10-26  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Roll back r50073 because r50041-50043 were reverted.  r50073 was
        a chromium side fix for r50041.
        https://bugs.webkit.org/show_bug.cgi?id=30789

        * bindings/v8/V8Collection.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:

2009-10-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Dimitri Glazkov.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=30765
        REGRESSION (r48701): Removing an event listener causes the one added just after it not to fire
        
        and related bugs.

        If the event listener being removed is prior to the current firing event
        iterator, we need to decrement the current firing event iterator in
        addition to the endpoint. (Otherwise, shrinking the event listener vector
        by one implicity moves the current firing event iterator forward by one.
        It's like relativity, only without the planets.)
        
        Also took the opportunity to change some pointers to references, since
        they can't be null.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::removeAllEventListeners): Update iterator in addition
        to end, if need be.
        (WebCore::EventTarget::fireEventListeners): Updated for interface changes.
        Added a comment to explain a behavior that was implicit enough to be
        confusing.

        * dom/EventTarget.h:
        (WebCore::FiringEventIterator::FiringEventIterator):
        (WebCore::EventTarget::isFiringEventListeners): Updated for interface changes.

2009-10-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30792>.
        Web Inspector: When changing resource scope, resource graph can get in weird state.
        
        If the user was scrolled down while looking at All resources, and then just
        selects Fonts, or something that doesn't have many resources, then the graph
        will stay scrolled down, even when there is no content there.
        
        When the filter is updated, scroll to the top of the graph view, so this won't
        happen.

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype._updateFilter):

2009-10-26  Sam Weinig  <sam@webkit.org>

        Fix mac clean build.

        * html/HTMLOptionsCollection.idl:

2009-10-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Extract AbstractTimelinePanel that will be a base
        class for ResourcesPanel and TimelinePanel.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AbstractTimelinePanel.js: Added.
        (WebInspector.AbstractTimelinePanel):
        (WebInspector.AbstractTimelinePanel.prototype.get categories):
        (WebInspector.AbstractTimelinePanel.prototype.showCategory):
        (WebInspector.AbstractTimelinePanel.prototype.hideCategory):
        (WebInspector.AbstractTimelinePanel.prototype.createTimelinePanels):
        (WebInspector.AbstractTimelinePanel.prototype._createFilterPanel.createFilterElement):
        (WebInspector.AbstractTimelinePanel.prototype._createFilterPanel):
        (WebInspector.AbstractTimelinePanel.prototype.filter):
        (WebInspector.AbstractTimelinePanel.prototype._updateFilter):
        (WebInspector.AbstractTimelinePanel.prototype._createGraph):
        (WebInspector.AbstractTimelinePanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.AbstractTimelinePanel.prototype._updateSummaryGraph):
        (WebInspector.AbstractTimelinePanel.prototype._updateDividersLabelBarPosition):
        (WebInspector.AbstractTimelinePanel.prototype.get needsRefresh):
        (WebInspector.AbstractTimelinePanel.prototype.set needsRefresh):
        (WebInspector.AbstractTimelinePanel.prototype.refreshIfNeeded):
        (WebInspector.AbstractTimelinePanel.prototype.show):
        (WebInspector.AbstractTimelinePanel.prototype.resize):
        (WebInspector.AbstractTimelinePanel.prototype.updateMainViewWidth):
        (WebInspector.TimelineCalculator):
        (WebInspector.TimelineCalculator.prototype.computeSummaryValues):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.TimelineCalculator.prototype.computeBarGraphLabels):
        (WebInspector.TimelineCalculator.prototype.get boundarySpan):
        (WebInspector.TimelineCalculator.prototype.updateBoundaries):
        (WebInspector.TimelineCalculator.prototype.reset):
        (WebInspector.TimelineCalculator.prototype._value):
        (WebInspector.TimelineCalculator.prototype.formatValue):
        * inspector/front-end/ResourceCategory.js:
        (WebInspector.ResourceCategory):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.toolbarItemClass.get toolbarItemLabel):
        (WebInspector.ResourcesPanel.prototype.get statusBarItems):
        (WebInspector.ResourcesPanel.prototype.get categories):
        (WebInspector.ResourcesPanel.prototype.showCategory):
        (WebInspector.ResourcesPanel.prototype.hideCategory):
        (WebInspector.ResourcesPanel.prototype.isCategoryVisible):
        (WebInspector.ResourcesPanel.prototype.populateSidebar):
        (WebInspector.ResourcesPanel.prototype.createPanelEnabler):
        (WebInspector.ResourcesPanel.prototype.createStatusbarButtons):
        (WebInspector.ResourcesPanel.prototype.set mainResourceLoadTime):
        (WebInspector.ResourcesPanel.prototype.set mainResourceDOMContentTime):
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype.resize):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.ResourcesPanel.prototype.updateMainViewWidth):
        (WebInspector.ResourceTimeCalculator):
        (WebInspector.ResourceTransferSizeCalculator):
        (WebInspector.ResourceTransferSizeCalculator.prototype.computeBarGraphLabels):
        * inspector/front-end/SummaryBar.js:
        (WebInspector.SummaryBar.prototype.update):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2009-10-26  Avi Drissman  <avi@google.com>

        Reviewed by Darin Adler.

        Use Helvetica in the Inspector as intended.
        https://bugs.webkit.org/show_bug.cgi?id=30787

        * inspector/front-end/inspector.css:

2009-10-26  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Don't set window.opener to 0 for the current FrameLoader if a noreferrer link was clicked, only suppress opener in a new frame.
        https://bugs.webkit.org/show_bug.cgi?id=30781

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected): Don't suppress opener in the current frame for noreferrer navigations.

2009-10-26  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Data loss occurs when unbolding nested bold tags.
        https://bugs.webkit.org/show_bug.cgi?id=30083

        Fixes the loop in swapInNodePreservingAttributesAndChildren by saving nextSibling() of child
        to a temporary valuable.  It was originally calling nextSibling() after appending the child
        to new parent, in which case, nextSibling is always 0.

        Test: editing/style/unbolding-nested-b.html

        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren):

2009-10-21  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        Storage events should use Document::url() rather than documentURI()
        https://bugs.webkit.org/show_bug.cgi?id=30535

        Storage events should use Document::url() rather than Document::documentURI()
        per http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-October/023703.html

        Test: storage/domstorage/documentURI.html

        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch):

2009-10-26  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Darin Adler.

        Rollout r50041-50043.  The HTML5 spec changed to make HTMLOptionsCollection
        inherit from HTMLCollection.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::nameGetter):
        (WebCore::JSHTMLAllCollection::item):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::nameGetter):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        (WebCore::toJS):
        * bindings/js/JSHTMLCollectionFunctions.h: Removed.
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::length):
        (WebCore::JSHTMLOptionsCollection::indexSetter):
        * bindings/objc/DOMHTML.mm:
        (kitClass):
        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLCollection.idl:
        * html/HTMLOptionsCollection.idl:

2009-10-26  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Build fix for ENABLE_FILTERS under Windows.
        https://bugs.webkit.org/show_bug.cgi?id=30762

        Build correction for ENABLE_FILTERS feature.  No new tests needed.

        * WebCore.vcproj/WebCore.vcproj:  Make the following changes:
          (1) Create a new 'filters' sub-folder of the platform/graphics 
              folder to properly show the sources held in this directory.
          (2) Move the files that are currently shown in svn/graphics/filters
              to platform/graphics/filters (where they actually live on disk).
          (3) Add the missing SVGFilter, SVGFilterBuilder, and SVGFETile to
              the project so they are built.
          (4) Remove SVGFEFloodElement.cpp from the build, since it is already
              being compiled by SVGAllInOne.cpp.  Its presence as a separate
              entity is causing a linker warning for duplicate symbols.
          (5) Add ImageBuffer.cpp to the build to support color space
              calculations for non-CG builds.
        * WebCore.vcproj/WebCoreCommon.vsprops: Add the platform/graphics/filters
          path to the search paths in the project.

2009-10-26  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        console.assert should prefix messages with "Assertion failed: "
        https://bugs.webkit.org/show_bug.cgi?id=19135

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype.toMessageElement): Append "Assertion failed: " for AssertMessageType.
        (WebInspector.ConsoleMessage.prototype.toString):
        * page/Console.cpp:
        (WebCore::Console::assertCondition): Use AssertMessageType.
        * page/Console.h:
        (WebCore::MessageType): Added AssertMessageType.

2009-10-26  Rahul Kuchhal  <kuchhal@chromium.org>

        Reviewed by Eric Seidel.

        Prevent crash when optgroup element is empty by adding a NULL check.

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

        Test: fast/forms/select-empty-optgroup.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::appendFormData):

2009-10-21  Steven Knight  <sgk@chromium.org>

        Reviewed by David Levin.

        Refactor gyp for separate webcore_bindings{,_sources} targets.

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

        Handle long link lines by building .idl-generated bindings in a
        separate webcore_bindings library target.  Avoid Visual Studio
        dependency issues by building additional generated .cpp and .h files
        in a separate webcore_bindings_sources target.

        Chrome should still build and test successfully.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2009-10-26  Mike Belshe  <mike@belshe.com>

        Reviewed by Darin Fisher.

        Make the number of connections for chromium controlled by
        chromium rather than by ResourceRequestBase.
        https://bugs.webkit.org/show_bug.cgi?id=30661

        * platform/network/ResourceRequestBase.cpp:
        * platform/network/chromium/ResourceRequest.cpp:

2009-10-26  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. make distcheck build fixes.

        * GNUmakefile.am:

2009-10-26  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Unbreak Chromium build: that requires adding custom implementations
        for HTMLOptionsCollection's item and namedItem.  Keep v8 binding
        close to JSC bindings as well.
        https://bugs.webkit.org/show_bug.cgi?id=30780

        * bindings/v8/V8Collection.h:
        (WebCore::getNamedItemsFromCollection):
        (WebCore::getItemFromCollection):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-10-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30723
        <rdar://problem/6189415> Input names added to multipart/form-data headers need to be escaped.

        Test: http/tests/security/escape-form-data-field-names.html

        * platform/network/FormDataBuilder.cpp:
        (WebCore::appendQuotedString):
        (WebCore::FormDataBuilder::beginMultiPartHeader):
        (WebCore::FormDataBuilder::addFilenameToMultiPartHeader):
        Percent-escape line breaks and quotation marks.

2009-10-26  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Adds DOMTimer support to InspectorTimelineAgent.
        https://bugs.webkit.org/show_bug.cgi?id=30467

        * inspector/InspectorTimelineAgent.cpp: Added timer support and fixed some method names.
        (WebCore::InspectorTimelineAgent::didDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didInstallTimer): Added.
        (WebCore::InspectorTimelineAgent::didRemoveTimer): Added.
        (WebCore::InspectorTimelineAgent::willFireTimer): Added.
        (WebCore::InspectorTimelineAgent::didFireTimer): Added.
        (WebCore::InspectorTimelineAgent::addItemToTimeline): Added.
        (WebCore::InspectorTimelineAgent::didCompleteCurrentTimelineItem): Renamed.
        * inspector/InspectorTimelineAgent.h:
        (WebCore::):
        * inspector/TimelineItemFactory.cpp: Add methods for timer-related ScriptObjects.
        (WebCore::TimelineItemFactory::createGenericTimerTimelineItem):
        (WebCore::TimelineItemFactory::createTimerInstallTimelineItem):
        * inspector/TimelineItemFactory.h:
        * page/DOMTimer.cpp: Added instrumentation points.
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::removeById):
        (WebCore::DOMTimer::fired):

2009-10-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6988966> Hardware layers do not show up in page snapshots

        Add a method that gets called when snapshotting Canvas3DLayers for page snapshots,
        that allows the layer to return a CGImageRef of its contents.
        
        * platform/graphics/mac/Canvas3DLayer.h:
        * platform/graphics/mac/Canvas3DLayer.mm:
        (-[Canvas3DLayer copyImageSnapshotWithColorSpace:]):

2009-10-26  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Pass "console" as object group when evaluating selection.

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame):

2009-10-26  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        Fix for Console not showing repeat count when repeatedly logging an Event
        https://bugs.webkit.org/show_bug.cgi?id=30324

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToConsole):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole): Added.
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addConsoleMessage): Calls updateRepeatCountInConsole if it is a repeating message.
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage): Renamed WebCore::InspectorFrontend::addMessageToConsole
        (WebCore::InspectorFrontend::updateConsoleMessageRepeatCount): Added. Called when repeatCount is incremented.
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage): Removed calls to msg.isEqual.
        (WebInspector.ConsoleView.prototype.updateMessageRepeatCount): Added.
        (WebInspector.ConsoleView.prototype._incrementErrorWarningCount): Added. Updates the error/warning count.
        (WebInspector.ConsoleView.prototype.clearMessages):
        (WebInspector.ConsoleMessage):
        (WebInspector.ConsoleMessage.prototype.toMessageElement): Use ConsoleMessage._updateRepeatCount
        (WebInspector.ConsoleMessage.prototype._updateRepeatCount):
        * inspector/front-end/inspector.js:
        (WebInspector.addConsoleMessage): Renamed WebInspector.addMessageToConsole.
        (WebInspector.updateConsoleMessageRepeatCount): Added.

2009-10-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        crash with AX on when an image map contains an anchor tag
        https://bugs.webkit.org/show_bug.cgi?id=30739

        Tests: accessibility/crashing-a-tag-in-map.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addChildren):

2009-10-26  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Adds feature ENABLE guards to V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=30697

        This adds guards for the following features to the V8 bindings,
        to allow builds with V8 to succeed when these features are not enabled.
        - DATABASE
        - WORKERS
        - SHARED_WORKERS
        - SVG
        - XPATH
        - XSLT
        - INSPECTOR

        This is a build fix only, no new tests required.

        * bindings/v8/DOMObjectsInclude.h: Modified.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Modified.
        * bindings/v8/V8Index.cpp: Modified.
        * bindings/v8/V8Index.h: Modified.

2009-10-26  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25679
        [Gtk] Improve accessibility of focusable lists

        Fixes the issues with the Atk states exposed for ListBoxOption

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2009-10-26  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=27085
        [Gtk] Incorrect rendering of list

        Adds a way for platforms to indicate that a particular object
        should not be ignored.

        * accessibility/AccessibilityObject.h:
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        * accessibility/mac/AccessibilityObjectMac.mm:
        * accessibility/qt/AccessibilityObjectQt.cpp:
        * accessibility/win/AccessibilityObjectWin.cpp:
        * accessibility/wx/AccessibilityObjectWx.cpp:
        (AccessibilityObject::accessibilityPlatformIncludesObject):
        * accessibility/AccessibilityRenderObject.cpp:
        (AccessibilityRenderObject::accessibilityIsIgnored):

2009-10-26  Kinuko Yasuda  <kinuko@google.com>

        Reviewed by Jan Alonzo.

        Bug 30619: [Linux] Menu key doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=30619

        Test: manual-tests/keyboard-menukey-event.html
        No new layout tests: testing this will require changes in the test
        controller in a platform-specific way.

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent): changed switch-case code for
        GDK_Menu to return VKEY_APPS instead of VKEY_MENU.
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent): changed switch-case code for
        GDK_Menu to return V_APPS instead of VK_MENU.

2009-10-25  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Reuse already fetched proxy.
        https://bugs.webkit.org/show_bug.cgi?id=30747

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):

2009-10-25  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix.

        Build fix for WIN_OS if Netscape plugin support is turned off
        https://bugs.webkit.org/show_bug.cgi?id=30753

        * plugins/PluginDatabase.cpp:

2009-10-25  Hironori Bono  <hbono@chromium.org>

        Reviewed by Darin Adler.

        A quick fix for Bug 29103.
        Since String::startsWith() cannot fold non-ASCII characters, this change folds the prefix string
        and the option string before calling String::startsWith().
        https://bugs.webkit.org/show_bug.cgi?id=29103

        Tests: fast/forms/listbox-typeahead-cyrillic.html
               fast/forms/listbox-typeahead-greek.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::typeAheadFind):

2009-10-25  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Expanding a node in the Console should not show the element in Elements panel
        https://bugs.webkit.org/show_bug.cgi?id=30749

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.onmousedown): Check if inside disclosure triangle.

2009-10-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=30751
        HTMLOptionsCollection should not inherit from HTMLCollection

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added JSHTMLCollectionFunctions.h

        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::nameGetter):
        (WebCore::JSHTMLAllCollection::item):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::nameGetter):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLOptionsCollection::getCallData):
        (WebCore::JSHTMLOptionsCollection::canGetItemsForName):
        (WebCore::JSHTMLOptionsCollection::nameGetter):
        (WebCore::JSHTMLOptionsCollection::indexSetter):
        (WebCore::JSHTMLOptionsCollection::item):
        (WebCore::JSHTMLOptionsCollection::namedItem):
        Refactor to use generic implementation of HTMLCollection bindings functions
        from JSHTMLCollectionFunctions.h

        * bindings/js/JSHTMLCollectionFunctions.h: Added.
        (WebCore::getCollectionNamedItems):
        (WebCore::getCollectionItems):
        (WebCore::callHTMLCollectionGeneric):
        Added generic functions that JSHTMLCollection, JSHTMLAllCollection and
        JSHTMLOptionsCollection can all use.

        * bindings/js/JSHTMLDocumentCustom.cpp: Add include of JSHTMLAllCollection.h
        for toJS on document.all.

        * bindings/objc/DOMHTML.mm:
        * bindings/objc/DOMUtility.mm:
        (JSC::createDOMWrapper):
        Remove special cases for HTMLOptionsCollection.

        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLAllCollection.idl:
        * html/HTMLCollection.idl:
        * html/HTMLOptionsCollection.idl:

2009-10-24  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        WebInspector: Fixed issue with IME inside console
        https://bugs.webkit.org/show_bug.cgi?id=30660

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._promptKeyDown):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._promptKeyDown):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.searchKeyDown): Moved performSearch here from WebInspector.searchKeyUp.
        (WebInspector.startEditing.element.handleKeyEvent):
        (WebInspector.startEditing):
        * inspector/front-end/utilities.js:
        (isEnterKey): Added. Check if in IME.

2009-10-24  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30752>.
        Web Inspector: Multiple Selection on Scope Bars by default Conflicts with other behavior on OSX.
        
        Have the scope bars select one scope by default, but if the multiple selection key
        is pressed, allow for multiple selection.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype._updateFilter):
        (WebInspector.ConsoleView.prototype.filter):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.filter):
        (WebInspector.ResourcesPanel.prototype._updateFilter):

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Make the scope bars in the Web Inspector match other scope bars in Mac OS X.
        Also cleans up the CSS to use classes instead of ID selectors.

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

        Reviewed by Dan Bernstein.

        * inspector/front-end/ResourcesPanel.js: Add the scope-bar class.
        * inspector/front-end/inspector.css: Lots of changes to make it look right.
        * inspector/front-end/inspector.html: Add the scope-bar class.

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Fix selecting Resources in the Web Inspector's Resources panel.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.isCategoryVisible): Added.
        (WebInspector.ResourceSidebarTreeElement.prototype.get selectable): Call
        isCategoryVisible on the ResourcesPanel.

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Fix the Scope Bar in the Web Inspector's Resource panel, so that selecting
        All will deselect the other filters.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.createFilterElement): Better syntax.
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.filter): Use a normal for loop,
        and the child variable instead of target in the loop. Other clean up.

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Make resizing the Web Inspector's Elements panel sidebar work again.
        Also makes Resources panel use the sidebar code in Panel.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/Panel.js:
        (WebInspector.Panel): Don't create the sidebar with an argument.
        (WebInspector.Panel.prototype.show): Call updateSidebarWidth.
        (WebInspector.Panel.prototype.handleKeyEvent): Call handleSidebarKeyEvent.
        (WebInspector.Panel.prototype.handleSidebarKeyEvent): Added.
        (WebInspector.Panel.prototype.createSidebar): Renamed from _createSidebar.
        (WebInspector.Panel.prototype._sidebarDragging): Call updateSidebarWidth.
        (WebInspector.Panel.prototype.updateSidebarWidth): Renamed from _updateSidebarWidth.
        (WebInspector.Panel.prototype.setSidebarWidth): Added. Called by updateSidebarWidth.
        (WebInspector.Panel.prototype.updateMainViewWidth): Renamed from setMainViewWidth.
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel): Call createSidebar.
        (WebInspector.ProfilesPanel.prototype.updateMainViewWidth): Renamed from setMainViewWidth.
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show): Remove call to _updateSidebarWidth.
        (WebInspector.ResourcesPanel.prototype.showResource): Call updateSidebarWidth
        (WebInspector.ResourcesPanel.prototype.closeVisibleResource): Ditto.
        (WebInspector.ResourcesPanel.prototype.setSidebarWidth): Added.
        (WebInspector.ResourcesPanel.prototype.updateMainViewWidth): Added.
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel): Call createSidebar.
        (WebInspector.StoragePanel.prototype.updateMainViewWidth): Renamed from setMainViewWidth.
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel): Call createSidebar.
        (WebInspector.TimelinePanel.prototype.updateMainViewWidth): Renamed from setMainViewWidth.

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Call updateSelection() in a few places so hovering in the Web Inspector's
        Elements panel always has the correct row selection height.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.toggleNewAttributeButton): Call updateSelection().
        (WebInspector.ElementsTreeElement.prototype._insertInLastAttributePosition): Ditto.
        * inspector/front-end/inspector.css: Prevent text wrapping in the middle of the add attribute text.

2009-10-24  Timothy Hatcher  <timothy@apple.com>

        Remove the re-root tree feature from the Web Inspector's
        Elements panel. This feature wasn't super useful and gets
        in the way of double-click to edit.

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

        Reviewed by Pavel Feldman.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.ondblclick):

2009-10-24  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Implements ReturnsNew hint for V8 bindings generation code.
        https://bugs.webkit.org/show_bug.cgi?id=30745

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object):

2009-10-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Missing images at 350.org due to wrong URLs
        https://bugs.webkit.org/show_bug.cgi?id=30748

        Test: fast/dom/HTMLImageElement/parse-src.html

        * dom/Element.cpp:
        (WebCore::Element::getURLAttribute): Pass the attribute value through deprecateParseURL().
        This matches what the Objective-C bindings do, as well as what HTMLImageLoader::sourceURI()
        and SVGImageLoader::sourceURI() do.

2009-10-24  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Build fix for QtWebKit after r50013.

        * WebCore.pro:

2009-10-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Fix up to accommodate for HTMLAllCollection changes in
        http://trac.webkit.org/changeset/49998.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:

2009-10-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/7294131> Assertion failure in AuthenticationMac at
        mac(const Credential&) after authenticating to MobileMe Gallery movie

        * platform/network/Credential.cpp:
        (WebCore::Credential::Credential): Initialize m_persistence.
        (WebCore::Credential::isEmpty): Made this method const.
        * platform/network/Credential.h:
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac): Return nil if the Credential is empty.

2009-10-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30617>.
        Web Inspector: Resources Scope Bar Should Allow Combinations.
        
        Refactor the filtering in ResourcePanel to make it match ConsoleView,
        and add a divider between All, and the other choices of Resource types.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.filter):
        (WebInspector.ResourcesPanel.prototype._updateFilter):
        * inspector/front-end/inspector.css:

2009-10-23  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Ignore the Refresh header if we're in view source mode.

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

        Test: http/tests/security/view-source-no-refresh.html

        * loader/FrameLoader.cpp: ignore Refresh in view-source mode.

2009-10-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=30734
        Remove XMLTokenizer::m_currentNodeIsReferenced

        No change in behavior, no tests.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::setCurrentNode):
        * dom/XMLTokenizer.h:
        Don't store a boolean for the current node being the document - we can always check for that.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::XMLTokenizer):
        A fragment passed to XMLTokenizer is never null - in fact, the first thing we do is dereference
        it unconditionally, and then begin checking it for null, as if it could help.

2009-10-23  Beth Dakin  <bdakin@apple.com>

        No review since this is a build fix.

        Build fix for the Mac. (Build is only broken when SVG filters are 
        enabled.)

        Labelled these function static.
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::identity):
        (WebCore::table):
        (WebCore::discrete):
        (WebCore::linear):
        (WebCore::gamma):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::boxBlur):

2009-10-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement a Timeline panel.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Images/timelineIcon.png: Added.
        * inspector/front-end/TimelineAgent.js:
        (WebInspector.addItemToTimeline):
        (WebInspector.timelineProfilerWasStarted):
        (WebInspector.timelineProfilerWasStopped):
        * inspector/front-end/TimelinePanel.js: Added.
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.toolbarItemClass.get toolbarItemLabel):
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype.handleKeyEvent):
        (WebInspector.TimelinePanel.prototype.timelineWasStarted):
        (WebInspector.TimelinePanel.prototype.timelineWasStopped):
        (WebInspector.TimelinePanel.prototype.addItemToTimeline):
        (WebInspector.TimelinePanel.prototype._innerAddItemToTimeline):
        (WebInspector.TimelinePanel.prototype._toggleTimelineButton):
        (WebInspector.TimelinePanel.prototype.setMainViewWidth):
        (WebInspector.TimelinePanel.prototype.getItemTypeName):
        (WebInspector.TimelineRecordTreeElement):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2009-10-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Clash Between Search's onkeyup and incremental search events
        https://bugs.webkit.org/show_bug.cgi?id=30731

        * inspector/front-end/inspector.js:
        (WebInspector.performSearch): prevent incremental search event from clobbering a forced search

2009-10-23  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Removes the need for C++ Timeline types in InspectorTimelineAgent in favor
        of ScriptObjects.
        https://bugs.webkit.org/show_bug.cgi?id=30707

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/DOMDispatchTimelineItem.cpp: Removed.
        * inspector/DOMDispatchTimelineItem.h: Removed.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::willDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::didDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::reset):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentTimelineItem):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineItemEntry::TimelineItemEntry):
        * inspector/TimelineItem.cpp: Removed.
        * inspector/TimelineItem.h: Removed.
        * inspector/TimelineItemFactory.cpp: Added.
        (WebCore::TimelineItemFactory::createGenericTimelineItem):
        (WebCore::TimelineItemFactory::createDOMDispatchTimelineItem):
        * inspector/TimelineItemFactory.h: Added.
        (WebCore::):
        (WebCore::TimelineItemFactory::TimelineItemFactory):

2009-10-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30729
        Provide private API to request the global context for a specific world.
        Used to initialize parameters on the global object.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::globalObject):
        * bindings/js/ScriptController.h:

2009-10-23  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Fixes style problems in Android-specific files.
        https://bugs.webkit.org/show_bug.cgi?id=30717

        Style changes only, no new tests possible.

        * page/android/EventHandlerAndroid.cpp: Modified.
        (WebCore::EventHandler::passMouseDownEventToWidget): Fixes whitespace in method signature.
        (WebCore::EventHandler::passSubframeEventToSubframe): Fixes whitespace in method signature.
        (WebCore::EventHandler::passWheelEventToWidget): Fixes whitespace in method signature.
        (WebCore::EventHandler::passMouseMoveEventToSubframe): Fixes whitespace in method signature.
        * platform/android/ClipboardAndroid.h: Modified. Fixes header include order and indenting.
        * platform/android/CursorAndroid.cpp: Modified. 
        (WebCore::grabCursor): Fixes function braces.
        (WebCore::grabbingCursor): Fixes function braces.
        * platform/android/FileChooserAndroid.cpp: Modified.
        (WebCore::FileChooser::basenameForWidth): Fixes braces on while statement, and updates String::copy to String::threadsafeCopy.
        * platform/android/FileSystemAndroid.cpp: Modified. Fixes header include order.
        (WebCore::unloadModule): Fixes zero test.
        (WebCore::writeToFile): Fixes if statement structure.
        * platform/android/KeyEventAndroid.cpp: Modified.
        (WebCore::windowsKeyCodeForKeyEvent): Fixes switch statement indenting.
        (WebCore::keyIdentifierForAndroidKeyCode): Fixes switch statement indenting.
        * platform/android/ScreenAndroid.cpp: Modified. Fixes header include order and switch statement indenting.
        * platform/android/TemporaryLinkStubs.cpp: Modified. Fixes header include order.

2009-10-23  Sam Weinig  <sam@webkit.org>

        Another shot at a fixed build.

        * DerivedSources.cpp:

2009-10-23  Sam Weinig  <sam@webkit.org>

        Another shot at a fixed build.

        * html/HTMLOptionsCollection.idl:

2009-10-23  Brady Eidson  <beidson@apple.com>

        50,000!

        * ChangeLog: Point out revision 50,000.

2009-10-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=30695
        Drop .tags() support from HTMLCollection

        - Make .tags() only work for HTMLAllCollections in JS. .tags() is still
          available for all HTMLCollection like objects in Objective-C since that
          is API.
        - Auto-generate HTMLAllCollection.

        Test: fast/dom/HTMLDocument/document-all.html

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLAllCollection.cpp: Removed.
        * bindings/js/JSHTMLAllCollection.h: Removed.
        * bindings/js/JSHTMLAllCollectionCustom.cpp: Added.
        (WebCore::getNamedItems):
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::getCallData):
        (WebCore::JSHTMLAllCollection::canGetItemsForName):
        (WebCore::JSHTMLAllCollection::nameGetter):
        (WebCore::JSHTMLAllCollection::item):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.cpp:
        (WebCore::Document::all):
        * dom/Document.h:
        * dom/HTMLAllCollection.idl: Removed.
        * html/HTMLAllCollection.cpp: Added.
        (WebCore::HTMLAllCollection::create):
        (WebCore::HTMLAllCollection::HTMLAllCollection):
        (WebCore::HTMLAllCollection::~HTMLAllCollection):
        * html/HTMLAllCollection.h: Added.
        * html/HTMLAllCollection.idl: Added.
        * html/HTMLCollection.h:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * page/DOMWindow.idl:

2009-10-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: pull basic sidebar implementation into the Panel.

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

        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        (WebInspector.Panel.prototype.jumpToPreviousSearchResult):
        (WebInspector.Panel.prototype.handleKeyEvent):
        (WebInspector.Panel.prototype._createSidebar):
        (WebInspector.Panel.prototype._startSidebarDragging):
        (WebInspector.Panel.prototype._sidebarDragging):
        (WebInspector.Panel.prototype._endSidebarDragging):
        (WebInspector.Panel.prototype._updateSidebarWidth):
        (WebInspector.Panel.prototype.setCenterViewWidth):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.setCenterViewWidth):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.setCenterViewWidth):

2009-10-23  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        Slight optimizations to object returning and exception handling in generated V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=30599

        * bindings/scripts/CodeGeneratorV8.pm: Generate better code
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertToV8Object): Added overload that takes a Ref<>
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Remove unnecessary template param to prevent compile error

2009-10-23  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Carlson.

        Volume slider always starts at half volume
        https://bugs.webkit.org/show_bug.cgi?id=28322

        Sets the value attribute of volume slider to the volume attribute
        of the media element. Also update the value attribute of the
        input element for the volume slider when the volume attribute
        of the media element is updated.

        Test: media/video-volume-slider.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlVolumeSliderElement::update):
        Set the value attribute of the input element for the volume slider
        using the current volume of the media element.
        * rendering/MediaControlElements.h:
        Add method definition of update().
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createVolumeSlider):
        Creates a volume slider with value attribute equals to the current
        volume attribute of the media element.

2009-10-23  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        Chrome Linux: fix caret positioning in LTR complex languages
        The caret is positioned off by one in languages like Thai.

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

        A group of us spent a while trying various approaches to write a test
        for this; however, since it is only that the blinking cursor is
        displayed incorrectly, we concluded it can not be tested.

        (Patch by Hironori Bono.)

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::selectionRectForComplexText):

2009-10-23  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        Fix Chromium build after IsoldatedWorld change (r49963).
        https://bugs.webkit.org/show_bug.cgi?id=30719

        * bindings/ScriptControllerBase.cpp:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScriptInIsolatedWorld):
        * bindings/v8/ScriptController.cpp:
        (WebCore::mainThreadNormalWorld):
        * bindings/v8/ScriptController.h:
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::existingWindowShell):
        * dom/Document.cpp:
        (WebCore::Document::createWrapperCache):
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * xml/XMLHttpRequest.cpp:
        * xml/XMLHttpRequest.h:

2009-10-23  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Sam Weinig.

        Fix caretRangeFromPoint()/elementFromPoint() returns wrong result 
        for a zoomed and scrolled page.
        https://bugs.webkit.org/show_bug.cgi?id=30689.

        The real cause is the wrong calculation of event.clientX/Y when
        page is zoomed and scolled.
        After Sam fixed the event.clientX/Y in r49551, the hit test point
        should be recalculated (revert r49490).

        Test: fast/dom/Document/CaretRangeFromPoint/caretRangeFromPoint-in-zoom-and-scroll.html

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint): calculate the correct point
        relative to document when page is zoomed and scrolled.
        (WebCore::Document::caretRangeFromPoint): calculate the correct point
        relative to document when page is zoomed and scrolled.

2009-10-22  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dmitry Titov.

        Adding a class that allows us to enable/disable features at
        runtime. Adding a flag to enable database support.

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

        * WebCore.gypi:
        * bindings/v8/RuntimeEnabledFeatures.cpp: Added.
        * bindings/v8/RuntimeEnabledFeatures.h: Added.
        (WebCore::RuntimeEnabledFeatures::setDatabaseEnabled):
        (WebCore::RuntimeEnabledFeatures::databaseEnabled):
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * page/DOMWindow.idl:

2009-10-23  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector injects _inspectorCommandLineAPI into global object when opened
        https://bugs.webkit.org/show_bug.cgi?id=30675

        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getCompletions):
        (InjectedScript._evaluateOn):
        (InjectedScript.addInspectedNode):
        (InjectedScript._ensureCommandLineAPIInstalled): Moved _inspectorCommandLineAPI from window to console.

2009-10-23  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] don't undef NULL in Symbian emulator

        npapi.h way of defining mwerks compiler,__intel__
        and win32 are all true for Symbian emulator.
        Changed the definions so that NULL won't be undefined
        when compiling for Symbian emulator nor target HW.

        * bridge/npapi.h:

2009-10-23  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Correct linking of sqlite3 for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=30569

        ".lib" will try to include library as static library
        causing the library to be searched from wrong directory and if found
        will be statically linked instead of the inteded dynamic linking.

        * WebCore.pro:

2009-10-23  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION: Copy is copying incorrect background-color
        <rdar://problem/7248529>
        https://bugs.webkit.org/show_bug.cgi?id=29697

        Test: editing/execCommand/indent-paragraphs.html

        This change removes the BackgroundColor from the list 
        of inheritable CSS properties and changes significantly
        the way we perform indentation.
        The new implementation of IndentOutdentCommand uses a new method
        defined in CompositeEditCommand called moveParagraphWithClones.
        This is an improved version of the original moveParagraph that
        is aimed at preserving the original markup of the paragraph being
        moved.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::): removed CSSPropertyBackgroundColor from editingStyleProperties.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::CompositeEditCommand): Removed trailing blanks.
        (WebCore::CompositeEditCommand::rebalanceWhitespaceAt): Removed trailing blanks.
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement): Added.
        (WebCore::CompositeEditCommand::cleanupAfterDeletion): Added.
        (WebCore::CompositeEditCommand::moveParagraphWithClones): Added.
        (WebCore::CompositeEditCommand::moveParagraphs): Modified to use cleanupAfterDeletion.
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Removed trailing blanks.
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph): Removed trailing blanks.
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary): Removed trailing blanks.
        * editing/CompositeEditCommand.h: Added three new methods.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): Changed to use moveParagraphWithClones.
        (WebCore::IndentOutdentCommand::indentIntoBlockquote): Changed to use moveParagraphWithClones.
        (WebCore::IndentOutdentCommand::indentRegion): Removed comment.
        * editing/IndentOutdentCommand.h: Removed prepareBlockquoteLevelForInsertion method.

2009-10-23  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Adds missing UnusedParam.h includes, required when INSPECTOR is not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=30677

        Build fix, no new tests required.

        * page/Console.cpp: Modified. Added UnusedParam.h include.
        * workers/WorkerContext.cpp: Modified. Added UnusedParam.h include.

2009-10-23  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Plugins : Use window's winId() instead of the widget's.

        As per, https://developer.mozilla.org/en/NPN_GetValue
        NPNVnetscapeWindow on Unix/X11: "Gets the browser toplevel window in which the
        plug-in is displayed; returns Window".

        The issue was found because NPNVNetscapeWindow winId() ends up creating
        a native window resulting in flicker.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::getValue):

2009-10-23  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Windowless Plugins : Don't use m_clipRect when painting.

        Though it works, it is not correct to use m_clipRect for painting
        in Windowless mode. Instead, the rect paramater that is passed
        as a part of PluginView::paint() must be used. This change will
        also result in some speedup since previously we used to paint all
        the visible parts of a windowless plugin (even if those parts were
        not dirty).

        Also, fix invalidateRect() to compute the correct width and height.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paint):
        (WebCore::PluginView::invalidateRect):

2009-10-21  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        Plugins : Use test.swf in the plugins manual tests.

        They previously referenced youtube videos which among other things are
        cumbersome to use without internet connection. The old youtube link is
        just commented out so that testing with youtube can be done with
        little effort.

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

        * manual-tests/plugins/test.swf: Copied from LayoutTests/fast/replaced/resources/test.swf.
        * manual-tests/plugins/windowed.html:
        * manual-tests/plugins/windowless.html:
        * manual-tests/qt/plugin-sibling-frame-include.html:

2009-10-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Fix the Windows Release build by moving Accessibility files
        into all-in-one file and excluding them from the build.

        * WebCore.vcproj/WebCore.vcproj:
        * accessibility/AccessibilityAllInOne.cpp: Added.

2009-10-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30696
        Add support for IsolatedWorlds to JSC bindings.

        An IsolatedWorld is basically a parallel, separate copy of the window shells and DOM wrapper objects for
        a given document.  To support isolation this patch:

            * Adds support to the ScriptController to track multiple window shells, one per world.
            * Adds support to Document to support multiple separate wrapper-maps, one per world.
            * Replaces the single global DOM wrapper map (on the WebCoreJSClientData) with separate maps,
              stored on the (new) IsolatedWorld objects.

        In addition to supporting separate copies of these objects, two other features are supported:

            * It is necessary to track the current world on entry into JSC, so that within callbacks out to WebCore
              we can determine which world (and as such, set of DOM bindings) we should be operating on.
            * EventListeners & Callbacks are run in the world they were registered in.
              This requires the handler to retain a reference to the world.

        No new tests. (Enabled existing isolated world layout tests.)

        * WebCore.base.exp:
        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::JSCallbackData):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::removeWrappers):
        (WebCore::DOMObjectWrapperMap::get):
        (WebCore::DOMObjectWrapperMap::set):
        (WebCore::DOMObjectWrapperMap::remove):
        (WebCore::DOMObjectWrapperMap::take):
        (WebCore::IsolatedWorld::IsolatedWorld):
        (WebCore::IsolatedWorld::~IsolatedWorld):
        (WebCore::EnterIsolatedWorld::EnterIsolatedWorld):
        (WebCore::EnterIsolatedWorld::~EnterIsolatedWorld):
        (WebCore::JSGlobalDataWorldIterator::JSGlobalDataWorldIterator):
        (WebCore::JSGlobalDataWorldIterator::operator bool):
        (WebCore::JSGlobalDataWorldIterator::operator*):
        (WebCore::JSGlobalDataWorldIterator::operator->):
        (WebCore::JSGlobalDataWorldIterator::operator++):
        (WebCore::getCurrentWorld):
        (WebCore::getNormalWorld):
        (WebCore::commonNormalWorld):
        (WebCore::commonCurrentWorld):
        (WebCore::DOMObjectHashTableMap::mapFor):
        (WebCore::DOMObjectWrapperMap::mapFor):
        (WebCore::forgetDOMObject):
        (WebCore::getCachedDOMNodeWrapper):
        (WebCore::forgetDOMNode):
        (WebCore::cacheDOMNodeWrapper):
        (WebCore::forgetAllDOMNodesForDocument):
        (WebCore::forgetWorldOfDOMNodesForDocument):
        (WebCore::isObservableThroughDOM):
        (WebCore::markDOMNodesForDocument):
        (WebCore::markActiveObjectsForContext):
        (WebCore::takeWrappers):
        (WebCore::updateDOMNodeDocument):
        (WebCore::markDOMObjectWrapper):
        (WebCore::allowsAccessFromFrame):
        (WebCore::printErrorMessageForFrame):
        (WebCore::JSC_DebuggerCallFrame_evaluateInWorld):
        (WebCore::JSC_callInWorld):
        (WebCore::JSC_constructInWorld):
        (WebCore::JSC_evaluateInWorld):
        * bindings/js/JSDOMBinding.h:
        (WebCore::IsolatedWorld::rememberDocument):
        (WebCore::IsolatedWorld::forgetDocument):
        (WebCore::IsolatedWorld::rememberScriptController):
        (WebCore::IsolatedWorld::forgetScriptController):
        (WebCore::DOMObjectHashTableMap::~DOMObjectHashTableMap):
        (WebCore::DOMObjectHashTableMap::get):
        (WebCore::WebCoreJSClientData::WebCoreJSClientData):
        (WebCore::WebCoreJSClientData::currentWorld):
        (WebCore::WebCoreJSClientData::normalWorld):
        (WebCore::WebCoreJSClientData::rememberWorld):
        (WebCore::WebCoreJSClientData::forgetWorld):
        (WebCore::debuggerWorld):
        (WebCore::pluginWorld):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createJSAttributeEventListener):
        (WebCore::toJSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::printErrorMessage):
        (WebCore::JSDOMWindowBase::commonJSGlobalData):
        (WebCore::toJS):
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::toJS):
        (WebCore::toJSDOMWindowShell):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotification::addEventListener):
        (WebCore::):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::handleEvent):
        (WebCore::JSEventListener::reportError):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::create):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::databaseForId):
        (WebCore::JSInspectorBackend::inspectedWindow):
        (WebCore::JSInspectorBackend::nodeForId):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSLazyEventListener.h:
        (WebCore::JSLazyEventListener::create):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::markChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::markChildren):
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        (WebCore::JSNode::markChildren):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::construct):
        (WebCore::JSQuarantinedObjectWrapper::call):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::markChildren):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::addEventListener):
        (WebCore::JSWebSocket::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::constructXMLHttpRequest):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::markChildren):
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::executeFunctionInContext):
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::processingUserGestureEvent):
        (WebCore::ScriptController::attachDebugger):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::createRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::jsObjectForPluginElement):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::existingWindowShell):
        (WebCore::ScriptController::globalObject):
        (WebCore::ScriptController::forgetWorld):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptFunctionCall::construct):
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/js/ScriptState.cpp:
        (WebCore::scriptStateFromNode):
        (WebCore::scriptStateFromPage):
        * bindings/js/ScriptState.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::WorkerScriptController):
        (WebCore::WorkerScriptController::evaluate):
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_Construct):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        * dom/Document.cpp:
        (WebCore::Document::createWrapperCache):
        * dom/Document.h:
        (WebCore::Document::wrapperCacheMap):
        (WebCore::Document::getWrapperCache):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        * platform/network/mac/AuthenticationMac.mm:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::dropProtection):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::create):

2009-10-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: EventListenersSidebarPane TODO No Longer Needed
        https://bugs.webkit.org/show_bug.cgi?id=30705

        * inspector/front-end/EventListenersSidebarPane.js:

2009-10-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Tim Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=30506
        <rdar://problem/7319845> Resources that the server sent as 304 not modified are not shown
        in the inspectors resource pane

        I don't know how to make a test for this.

        The issue here was that preloaded resources weren't added to DocLoader document resource set,
        but Web Inspector asked DocLoader to fetch data from CachedResource. Even when (if) document
        parser eventually requested the same resource for real and it got added to resource set, it
        was too late - the Inspector wasn't updated.

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::cachedResource):
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::resourceData):
        * inspector/InspectorResource.h:
        Fix the issue by trying to fetch corresponding CachedResource harder - also look in global
        cache. This seems safe, and easier than updating the Inspector on transitions between
        resource states (revalidate vs. revalidate done and preload vs. non-preload).

2009-10-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/6942706> ER: Add a CSS property that allows 
        shadows to work for SVG content
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=30479

        This patch adds a new SVG-specific CSS property called -webkit-
        shadow that has the same syntax as -webkit-box-shadow

        Add CSSPropertyWebkitShadow to the list of SVG CSS properties, and 
        make valueForShadow a member function rather than a static function 
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSComputedStyleDeclaration.h:

        Call valueForShadow for CSSPropertyWebkitShadow
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):

        Do standard CSS stuff for CSSPropertyWebkitShadow
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):

        Set the appropriate shadow on the paint context if we have one. 
        This seems to be all we have to do to have an SVG-shaped shadow.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):

        Add shadow to SVGRenderStyle. I added a new macro that I don't like 
        just because that's the way things are done here right now.
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::SVGRenderStyle):
        (WebCore::SVGRenderStyle::operator==):
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        (StyleShadowSVGData::StyleShadowSVGData):
        (StyleShadowSVGData::operator==):
        * rendering/style/SVGRenderStyleDefs.h:
        (WebCore::StyleShadowSVGData::create):
        (WebCore::StyleShadowSVGData::copy):
        (WebCore::StyleShadowSVGData::operator!=):

2009-10-22  Joanmarie Diggs  <joanmarie.diggs@gmail.com>
 
        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25530
        [Gtk] Implement LABEL_FOR/LABELLED_BY relationship pair for labels

        Implements atk_object_ref_relation_set and LABEL_FOR/LABELLED_BY.
        Also causes the accessible name for labeled controls to be based on
        the label as expected, rather than based on the contents.

        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (correspondingLabelForControlElement):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):
        (webkit_accessible_ref_relation_set):
        (webkit_accessible_class_init):
        (webkit_accessible_get_name):

2009-10-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: windowFocused and windowBlured Fail to Clear/Mark Inspector as "inactive"
        https://bugs.webkit.org/show_bug.cgi?id=30663

          Correctly handle focusing/blurring on inner <iframe>'s such as Source Frames.

        * inspector/front-end/inspector.js:
        (WebInspector.windowFocused): fix for inner iframes
        (WebInspector.windowBlurred): fix for inner iframes
        (WebInspector.addMainEventListeners): change useCapture to false

2009-10-22  Jaime Yap  <jaimeyap@google.com>

        Reviewed by Timothy Hatcher.

        Makes a page reload optional when activating resource monitoring in
        InspectorController. It leaves the default behavior as performing the reload.
        Reload is an optional param so callsites do not have to change.

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

        No new tests added.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableResourceTracking):
        * inspector/InspectorController.h:

2009-10-22  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Fix memory leak in QNetworkReplyHandler::abort().
        In QNetworkReplyHandler::release(), m_reply should no longer point to its parent
        after being released.
        https://bugs.webkit.org/show_bug.cgi?id=30167

        No layout test available as a non-functional fix.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::abort):
        (WebCore::QNetworkReplyHandler::release):

2009-10-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Fix DOMAgent leak.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::releaseDOMAgent):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):

2009-10-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Rework event listeners to not hold references to frame or V8 context.

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

        Covered by existing layout tests: fast/events/attribute-listener*

        * bindings/scripts/CodeGeneratorV8.pm: Added passing ScriptExecutionContext*
            to event listener handling code.
        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::setAllowSleep): Changed to use currentContext().
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener): Reworked to match JSC logic.
        (WebCore::getEventListenerHandlerBody): Added ScriptExecutionContext* param.
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener): Removed Frame* param
            and usage.
        (WebCore::V8AbstractEventListener::handleEvent): Chaged to use ScriptExecutionContext*.
        (WebCore::V8AbstractEventListener::invokeEventHandler): Ditto.
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::getListenerObject): Ditto.
        (WebCore::V8AbstractEventListener::prepareListenerObject): Ditto.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):  Added ScriptExecutionContext* param.
        (WebCore::V8DOMWrapper::getEventListener): Ditto.
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object): Ditto.
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findOrCreateWrapper): Removed ContextType* template param,
            because it's no longer needed.
        * bindings/v8/V8IsolatedWorld.h:
        (WebCore::V8IsolatedWorld::sharedContext): Renamed from shared_context.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener): Removed Frame* param and usage.
        (WebCore::V8LazyEventListener::callListenerFunction): Added ScriptExecutionContext* param.
        (WebCore::V8LazyEventListener::prepareListenerObject): Ditto.
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::create): Reordered params to match JSC impl.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::V8Proxy): Adjusted formatting to match WebKit style.
        (WebCore::V8Proxy::evaluateInNewContext): Changed to use m_context directly.
        (WebCore::V8Proxy::setInjectedScriptContextDebugId): Ditto.
        (WebCore::V8Proxy::createWrapperFromCacheSlowCase): Ditto.
        (WebCore::V8Proxy::isContextInitialized): Ditto.
        (WebCore::V8Proxy::updateDocumentWrapperCache): Ditto.
        (WebCore::V8Proxy::clearDocumentWrapperCache): Ditto.
        (WebCore::V8Proxy::disposeContextHandles): Added explicit disposing of m_context. 
        (WebCore::V8Proxy::clearForClose): Changed to use m_context directly.
        (WebCore::V8Proxy::clearForNavigation): Ditto.
        (WebCore::V8Proxy::setSecurityToken): Ditto.
        (WebCore::V8Proxy::updateDocument): Ditto.
        (WebCore::V8Proxy::initContextIfNeeded): Ditto.
        (WebCore::V8Proxy::context): Changed to use v8::Local.
        (WebCore::V8Proxy::mainWorldContext): Changed to use m_context directly. 
        (WebCore::V8Proxy::setContextDebugId): Ditto.
        (WebCore::toV8Context):
        * bindings/v8/V8Proxy.h: Removed shared_context decl, changed to use straight
            v8::Persistent for m_context.
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::workerProxy): Added.
        (WebCore::V8WorkerContextEventListener::V8WorkerContextEventListener): Removed
            WorkerContextExecutionProxy* param.
        (WebCore::V8WorkerContextEventListener::handleEvent): Started using ScriptExecutionContext*.
        (WebCore::V8WorkerContextEventListener::reportError): Ditto.
        (WebCore::V8WorkerContextEventListener::callListenerFunction): Ditto.
        (WebCore::V8WorkerContextEventListener::getReceiverObject): Ditto.
        * bindings/v8/V8WorkerContextEventListener.h:
        (WebCore::V8WorkerContextEventListener::create): Removed
            WorkerContextExecutionProxy* param.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListener): Removed ContextType*
            template param.
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener): Removed Frame* param.
        (WebCore::V8EventListener::getListenerFunction): Started using ScriptExecutionContext*.
        (WebCore::V8EventListener::callListenerFunction): Ditto.
        * bindings/v8/custom/V8CustomEventListener.h:
        (WebCore::V8EventListener::create): Removed Frame* param.

2009-10-14  Gaurav Shah  <gauravsh@google.com>

        Reviewed by Darin Fisher.

        Replaces temporary link stub for <keygen> tag handler for the Chromium
        browser with a call via the Chromium Bridge.

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

        * platform/SSLKeyGenerator.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/SSLKeyGeneratorChromium.cpp:
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/chromium/TemporaryLinkStubs.cpp:
        (WebCore::KURL::fileSystemPath):
        (WebCore::SharedBuffer::createWithContentsOfFile):

2009-10-22  Avi Drissman  <avi@chromium.org>

        Reviewed by Eric Seidel.

        Fixes Chromium Mac pasteboard handling to flow through the same code paths as other platforms.

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

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage):

2009-10-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Make accelerated compositing debug indicators work in release builds
        https://bugs.webkit.org/show_bug.cgi?id=30588
        
        Allow some debug indicators, that show which page elements go into compositing layers,
        to work in release builds, when the runtime prefs are set.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::GraphicsLayer::setZPosition):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::clearBorderColor):
        (WebCore::GraphicsLayer::showRepaintCounter):
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::updateMasksToBounds):
        (WebCore::GraphicsLayerCA::updateLayerDrawsContent):
        (WebCore::GraphicsLayerCA::setDebugBorder):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::setupContentsLayer):
        * platform/graphics/mac/WebLayer.mm:

2009-10-22  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Pavel Feldman.

        Inspector should support monitorEvents/un monitorEvents() in the command line
        https://bugs.webkit.org/show_bug.cgi?id=19879

        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update.callback): Ignores event listeners generated by monitorEvent
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._ensureCommandLineAPIInstalled): Added _inspectorCommandLineAPI._logEvent, _allEventTypes, 
        _normalizeEventTypes, monitorEvent, unmonitorEvent.

2009-10-21  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: windowFocused and windowBlurred Fail to Clear/Mark Inspector as "inactive"
        https://bugs.webkit.org/show_bug.cgi?id=30663

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

2009-10-22  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Error - requestContentType [undefined] is not an object
        https://bugs.webkit.org/show_bug.cgi?id=30666

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshFormData):

2009-10-22  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Holger Freyther.

        [Haiku] Correction of the accented letter width (they were 2 characters long).
        https://bugs.webkit.org/show_bug.cgi?id=30629

        * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):

2009-10-21  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7270320> Screenshots of off-screen plug-ins are blank
        <rdar://problem/7270314> After halting a transparent PluginView on
        Windows, the transparency is applied twice

        Replace use of Frame::nodeImage() with a function that takes a snapshot
        of a PluginView.

        Reviewed by Dan Bernstein.

        * plugins/PluginView.h:
        Made paintWindowedPluginIntoContext() non-const, as it now calls
        paintIntoTransformedContext(). Declare paintIntoTransformedContext()
        and snapshot() for Windows platforms.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintIntoTransformedContext):
        Paints into the passed HDC without applying any coordinate translations.
        Code moved from paintWindowedPluginIntoContext() and paint(). Removed
        the memset() of windowpos in lieu of assignment.
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        Code moved to paintIntoTransformedContext().
        (WebCore::PluginView::paint):
        Ditto.
        (WebCore::PluginView::snapshot):
        Create a context, and if the plug-in is windowless, translate it so the
        plug-in will draw at the correct location. Create a bitmap, and select
        it into the context. Paint the plug-in, and create a BitmapImage from
        the bitmap.
        (WebCore::PluginView::halt):
        Use snapshot().

2009-10-22  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix calculation of length in WebSocketChannel.cpp
        https://bugs.webkit.org/show_bug.cgi?id=30656

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didReceiveData):

2009-10-21  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding the ability to enable/disable functions in V8 at runtime.

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

        * bindings/scripts/CodeGeneratorV8.pm:

2009-10-21  Darin Adler  <darin@apple.com>

        Swedish search (and other languages as well) is broken while fixing Japanese search
        https://bugs.webkit.org/show_bug.cgi?id=30646

        Rolled Japanese tailoring out that was done to fix
        https://bugs.webkit.org/show_bug.cgi?id=30437 earlier.
        It was overriding the locale-specific tailoring.
        We'll land a fix once we figure out how to add the
        Japanese tailoring without removing anything.

        * editing/TextIterator.cpp: Rolled out r49924.

2009-10-21  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: chromium build fix - add missing image to gypi.

        * WebCore.gypi:

2009-10-21  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Eric Seidel.

        Fixes part of <http://webkit.org/b/30522>.
        Web Inspector: DOM Exceptions throughout the Inspector should be more human readable.

        Expose the description attribute that is now a member of
        ExceptionBase as of r49723, so when a user logs an exception, they
        can see the description in the Web Inspector.

        Test: fast/dom/dom-exception-description.html

        * dom/DOMCoreException.idl:
        * dom/EventException.idl:
        * dom/RangeException.idl:
        * svg/SVGException.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XPathException.idl:

2009-10-21  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30616>.
        REGRESSION (r49036): Web Inspector: Summary graph no longer switching to size summary.
        
        Add a check to make sure a function we need to calculate percentages is
        defined before we use it.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._updateGraphDividersIfNeeded):

2009-10-21  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        REGRESSION: Clicking on nodes in the console should take you to the element in the DOM
        https://bugs.webkit.org/show_bug.cgi?id=27231

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatnode): Turns on ElementsTreeOutline.showInElementsPanelEnabled
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline): Added ElementsTreeOutline.showInElementsPanelEnabled
        (WebInspector.ElementsTreeElement.prototype.onmousedown): Reveals the node in the Elements panel if 
        treeOutline.showInElementsPanelEnabled is true.

2009-10-21  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=30637
        Fix a compiler warning in windows.

        * loader/ResourceLoadNotifier.h:

2009-10-21  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Fix the crash when a node not in a document receives dispatchEvent.
        https://bugs.webkit.org/show_bug.cgi?id=30611

        Test: fast/events/dispatch-event-no-document.html

        * dom/EventTarget.cpp: Check for scriptExecutionContext() at the moment of dispatchEvent; do nothing if no context.
        (WebCore::EventTarget::dispatchEvent):

2009-10-21  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium Linux: disable subpixel text on layers.

        https://bugs.webkit.org/show_bug.cgi?id=30635
        http://code.google.com/p/chromium/issues/detail?id=25365

        With the addition of layers for drawing rounded corners in r49641,
        subpixel text on rounded rectangles broke. This is because the layer
        only contains a single alpha channel and this is insufficient to
        compose subpixel text correctly.

        On Windows, a large body of code in TransparencyWin.cpp exists to try
        to deal with this. Even then, in some cases, it downgrades to
        anti-aliased text. We need a fix for the grevious effects quickly thus
        this patch disables subpixel text when rendering into a layer.

        This would be covered by existing tests except that subpixel text is
        disabled for pixel tests on Chromium Linux.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::isCanvasMultiLayered):
        (WebCore::adjustTextRenderMode):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):

2009-10-21  Kevin Ollivier  <kevino@theolliviers.com>

        wxMac 10.4 build fix, make sure we specify the Sqlite3 dependency correctly as otherwise
        it will use the sqlite3 system library rather than WebCoreSQLite3.

        * wscript:

2009-10-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Fixed background-clip parsing regressions introduced in r46240.

        Test: fast/css/background-clip-text.html

        * css/CSSParser.cpp:
        (WebCore::parseBackgroundClip): Added this helper method.
        (WebCore::CSSParser::parseFillShorthand): Use parseBackgroundClip() to
        reparse the value. The old code called parseFillProperty() again, which
        didn’t work, because parseFillProperty() advances the value list.
        (WebCore::CSSParser::parseFillProperty): Changed to use
        parseBackgroundClip().
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator EFillBox): Added a case for
        CSSValueWebkitText.

2009-10-21  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Enable creation of custom SidebarTreeElements for different ProfileTypes

        ProfileTypes can now create sidebar tree elements of custom types.
        https://bugs.webkit.org/show_bug.cgi?id=30520

        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileType.prototype.setRecordingProfile):
        (WebInspector.CPUProfileType.prototype.createSidebarTreeElementForProfile):
        (WebInspector.CPUProfileType.prototype.createView):
        (WebInspector.CPUProfile.prototype.get head):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType.prototype.buttonClicked):
        (WebInspector.ProfileType.prototype.viewForProfile):
        (WebInspector.ProfileType.prototype.createView):
        (WebInspector.ProfileType.prototype.createSidebarTreeElementForProfile):
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.showProfile):

2009-10-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Selectors in the Styles pane should trigger a search for that selector when clicked
        https://bugs.webkit.org/show_bug.cgi?id=17126

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult): only change focusedDOMNode on a manual search
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype._clickSelector): trigger a search
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._startEditing): correctly start editing attribute value instead of name

2009-10-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Fix DOM Agent leak.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):

2009-10-21  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        Plugins: Create manual tests for testing plugins
        
        Create two test files:
        1. windowed.html - Test plugin in windowed mode.
        2. windowless.html - Test plugin in windowless mode.

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

        * manual-tests/plugins/windowed.html: Added.
        * manual-tests/plugins/windowless.html: Added.

2009-10-21  Satoshi Nakagawa  <psychs@limechat.net>

        Reviewed by Darin Adler.

        Fixed Japanese text search problems.
        Treat small kana letters and kana letters as different characters in search.
        Do not ignore diacritic marks in search for Japanese texts.

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

        Test: fast/text/international/japanese-kana-letters.html

        * editing/TextIterator.cpp:
        (WebCore::createCollator):
        (WebCore::collator):
        (WebCore::createSearcher):

2009-10-20  Eric Z. Ayers  <zundel@google.com>

        Reviewed by Timothy Hatcher.

        Changes TimelineItems to be created with raw timestamps as opposed
        to a time relative to a start of session.  Normalized timestamps cause
        problems when monitoring a browsing session across multiple page
        transitions.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::willDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::reset):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        * inspector/InspectorTimelineAgent.h:

2009-10-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        Fix leak of WebSocketChannel by adopting the newly-created reference.

        * websockets/WebSocketChannel.h:
        (WebCore::WebSocketChannel::create):

2009-10-20  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        DOM Storage runtime flag changes
        https://bugs.webkit.org/show_bug.cgi?id=30602

        Part 1/2.  Removing sessionStorageEnabled in next patch after the
        Chromium side of the changes lands.

        Revert my changes to Settings and instead implement DOM Storage enabling via
        the methods agreed upon in https://bugs.webkit.org/show_bug.cgi?id=30240

        This stuff was (intentionally) never exposed to web pages or DRT, so there's no
        LayoutTest visible changes and thus no tests.

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * page/DOMWindow.idl:
        * storage/Storage.cpp:
        (WebCore::Storage::setLocalStorageAvailable):
        (WebCore::Storage::localStorageAvailable):
        (WebCore::Storage::setSessionStorageAvailable):
        (WebCore::Storage::sessionStorageAvailable):
        * storage/Storage.h:

2009-10-20  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Need to turn off notifications properly at runtime
        https://bugs.webkit.org/show_bug.cgi?id=30409

        This code only affects chromium, and is all behind a compile time
        flag current turned off, so no new tests.

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::setIsAvailable):
        (WebCore::NotificationCenter::isAvailable):
        * notifications/NotificationCenter.h:
        * page/DOMWindow.idl:
        * workers/WorkerContext.idl:

2009-10-20  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Fixes RefPtr initialization in the V8 implementation of WebCore::ScriptString to use the ::create() idiom and
        use adoptRef() properly.  I failed to read the RefPtr docs the first time through :(

        No new tests, error was caught by valgrind on the Chromium builders.

        * bindings/v8/ScriptString.h:
        (WebCore::ScriptString::ScriptString):
        (WebCore::ScriptString::operator=):
        * bindings/v8/ScriptStringImpl.h:
        (WebCore::ScriptStringImpl::create):

2009-10-20  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: populate child nodes before sorting them.

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

        * inspector/front-end/BottomUpProfileDataGridTree.js:
        (WebInspector.BottomUpProfileDataGridNode): Swapped with BottomUpProfileDataGridTree to be consistent with TopDownProfileDataGridNode.
        (WebInspector.BottomUpProfileDataGridNode.prototype._takePropertiesFromProfileDataGridNode):
        (WebInspector.BottomUpProfileDataGridNode.prototype._keepOnlyChild):
        (WebInspector.BottomUpProfileDataGridNode.prototype._exclude):
        (WebInspector.BottomUpProfileDataGridNode.prototype._merge):
        (WebInspector.BottomUpProfileDataGridNode.prototype._sharedPopulate):
        (WebInspector.BottomUpProfileDataGridTree.prototype.exclude):
        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.sort): Added missing parentheses.
        (WebInspector.ProfileDataGridNode.prototype.get _parent):
        (WebInspector.ProfileDataGridNode.prototype._populate):
        * inspector/front-end/TopDownProfileDataGridTree.js:
        (WebInspector.TopDownProfileDataGridNode.prototype._sharedPopulate):

2009-10-20  Jens Alfke  <snej@chromium.org>

        Reviewed by Eric Seidel.

        Remove redundant String ref/deref calls in generated V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=30579

        * bindings/v8/V8Binding.h:
        (WebCore::toString): Fix return type of 'toString' to make it truly a no-op
            instead of constructing/destructing a String.

2009-10-20  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25411
        [GTK] ATK accessible ancestry broken

        Work around for the problem of bogus additional objects in the ancestry.
        We now set the parent when we ref the child, then ask the Atk child if
        it knows its parent. This solves the bulk of the cases. For those it
        doesn't, fall back to the existing logic.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_parent):
        (webkit_accessible_ref_child):

2009-10-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Alice Liu.

        Fixes <http://webkit.org/b/30421>.
        Web Inpsector: Local Files can show up on Cookies List with Cookies from other Domain.

        When a page like Google generates an about:blank, it shows up as a local file on
        the list of Cookie domains, but has all of the cookies of Google. When we are adding
        cookie domains to the inspector, we should only add the domain is the URL of the resource
        is in the HTTP protocol family or a file URL.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didFinishLoading):

2009-10-20  Mark Mentovai  <mark@chromium.org>

        Reviewed by Darin Fisher.

        Use a version of libWebKitSystemInterface with global symbols marked
        private_extern for Chromium Mac.

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

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/mac: Added.
        * WebCore.gyp/mac/Empty.cpp: Added.
        * WebCore.gyp/mac/adjust_visibility.sh: Added.

2009-10-20  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for WebCore's CSSProperty
        https://bugs.webkit.org/show_bug.cgi?id=30564

        Inherits CSSProperty class from FastAllocBase because it has been
        instantiated by 'new' in WebCore/css/CSSParser.cpp:367.

        * css/CSSProperty.h:

2009-10-20  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Seidel.

        Hide Chromium's media slider thumb if no source has been loaded.

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

        Covered by existing layout tests, notably:
            LayoutTests/media/controls-rendering.html
            LayoutTests/media/unsupported-tracks.html
            LayoutTests/media/video-src-none.html

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::hasSource): Returns true if an HTMLMediaElement has a valid source set.
        (WebCore::paintMediaMuteButton): Refactored to use hasSource().
        (WebCore::paintMediaPlayButton): Ditto.
        (WebCore::paintMediaSliderThumb): Add call to hasSource() to determine if we should paint the thumb.

2009-10-20  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Added getter for FrameLoader:m_suppressOpenerInNewFrame.
        This will allow Chromium to more intelligently detect
        noreferrer links and therefore open them in a new process.

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

        * loader/FrameLoader.h:
        (WebCore::FrameLoader::suppressOpenerInNewFrame): Added.

2009-10-20  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSParserFunction
        https://bugs.webkit.org/show_bug.cgi?id=30563

        Inherits CSSParserFunction struct from FastAllocBase because it has been
        instantiated by 'new' in WebCore/css/CSSParser.cpp:4827.

        * css/CSSProperty.h:

2009-10-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Watched Expressions Buttons Do Not Match Inspector Styles
        https://bugs.webkit.org/show_bug.cgi?id=30554

        * inspector/front-end/inspector.css: added style to pane buttons

2009-10-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Set debug id for contexts of isolated worlds to distinguish them in debugger.

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

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInIsolatedWorld):
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::setInjectedScriptContextDebugId):
        * bindings/v8/V8Proxy.h:

2009-10-20  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Unreviewed buildfix.
        [Qt] Add FEGaussianBlur.h and FEGaussianBlur.cpp which were refactored in r49778 to WebCore.pro.

        * WebCore.pro:

2009-10-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Set EnabledAtRuntime for WebSocket in DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=29896

        Supported by chromium/v8 only.
        Add WebSocket::isAvailable()/setIsAvailable(bool) to control v8
        bindings.
        Remove Settings::experimentalWebSocketsEnabled() and
        setExperimentalWebSocketsEnabled(bool).

        * WebCore.base.exp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webSocket):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructor):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        * page/DOMWindow.idl:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::setIsAvailable):
        (WebCore::WebSocket::isAvailable):
        * websockets/WebSocket.h:

2009-10-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION: Dromaeo DOM test is 14% slower
        https://bugs.webkit.org/show_bug.cgi?id=30273

        Whoops, make prototype bindings actually use the StructureFlags.

        * bindings/scripts/CodeGeneratorJS.pm:

2009-10-19  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Better implementation of WebCore::ScriptString for the V8 bindings.

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

        WebCore::ScriptString is used for XMLHttpRequest's responseText attribute which is
        shared with JavaScript.  Thus, simply using a WebCore::String and copying the value
        is pretty inefficient, especially since responseText is built up with a sequence of
        operator+= calls.  JSC builds use a JSC::UString to share the buffer when possible,
        this patch adopts a similar approach for V8.

        No new tests, behavior is unchanged and covered by LayoutTests/http/tests/xmlhttprequest

        * WebCore.gypi:
        * bindings/v8/ScriptString.h:
        (WebCore::ScriptString::ScriptString):
        (WebCore::ScriptString::operator String):
        (WebCore::ScriptString::isNull):
        (WebCore::ScriptString::size):
        (WebCore::ScriptString::operator=):
        (WebCore::ScriptString::operator+=):
        (WebCore::ScriptString::v8StringOrNull):
        * bindings/v8/ScriptStringImpl.cpp: Added.
        (WebCore::ScriptStringImpl::ScriptStringImpl):
        (WebCore::ScriptStringImpl::~ScriptStringImpl):
        (WebCore::ScriptStringImpl::toString):
        (WebCore::ScriptStringImpl::isNull):
        (WebCore::ScriptStringImpl::size):
        (WebCore::ScriptStringImpl::append):
        * bindings/v8/ScriptStringImpl.h: Added.
        (WebCore::ScriptStringImpl::ScriptStringImpl):
        (WebCore::ScriptStringImpl::v8StringHandle):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::ACCESSOR_GETTER):

2009-10-19  Adam Barth  <abarth@webkit.org>

        No review, rolling out r49837.
        http://trac.webkit.org/changeset/49837

        * page/Settings.cpp:
        (WebCore::Settings::setStandardFontFamily):
        (WebCore::Settings::setFixedFontFamily):
        (WebCore::Settings::setSerifFontFamily):
        (WebCore::Settings::setSansSerifFontFamily):
        (WebCore::Settings::setCursiveFontFamily):
        (WebCore::Settings::setFantasyFontFamily):
        * page/Settings.h:
        (WebCore::Settings::standardFontFamily):
        (WebCore::Settings::fixedFontFamily):
        (WebCore::Settings::serifFontFamily):
        (WebCore::Settings::sansSerifFontFamily):
        (WebCore::Settings::cursiveFontFamily):
        (WebCore::Settings::fantasyFontFamily):
        * platform/text/UScriptCode.h: Removed.

2009-10-19  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Check COMPILER(MSVC) instead of PLATFORM(WIN_OS) to avoid the use of vasprintf.
        https://bugs.webkit.org/show_bug.cgi?id=30473

        vasprintf is missing in MSVC. Use COMPILER(MSVC) guards instead of
        PLALTFORM(WIN_OS) guards.

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

2009-10-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Eric Seidel.

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

        Make generic font family getters/setters accept an additional
        argument (script code). It has a default value so that if an embedder
        does not have/want a per-script font family setting, call-sites
        don't have to be changed.
        This is to prepare for fixing bug 10874 (font selection is not
        language-dependent) and bug 18085.

        There should be no change in layout and no new layout test
        is added.

        * WebCore.base.exp:
        * page/Settings.cpp:
        * page/Settings.h:
        * platform/text/UScriptCode.h: Added. This is for ports that
          do not use ICU. the part of ICU's common/unicode/uscript.h
          that defines script code enum was copied. To keep enums compatible
          with those in ICU, we don't generate the list out of Scripts.txt
          of the Unicode Data base or CLDR's data.

2009-10-19  Evan Stade  <estade@chromium.org>

        Reviewed by Darin Adler.

        Clarify usage of SuddenTermination API. No code change.

        * platform/SuddenTermination.h:

2009-10-19  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        REGRESSION: Dromaeo DOM test is 14% slower
        https://bugs.webkit.org/show_bug.cgi?id=30273

        Make DOM bindings automatically inherit correct structure
        flags rather than being needlessly conservative.  This is
        done by making the bindings generator use the same model
        for TypeInfo flags that we now use in JSC.

        This gains us about 1% of this regression back.

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

2009-10-19  Robin Qiu  <robin.qiu@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        Fixed a bug on nested SVG <use> elements.
        https://bugs.webkit.org/show_bug.cgi?id=26117
        When a <use> element refer to another <use> element which has
        child/children, the instance tree built for this <use> element
        is incorrect (more nodes than expected).

        Test: svg/dom/use-on-use-with-child.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildInstanceTree):

2009-10-19  Oliver Hunt  <oliver@apple.com>

        Small changes to fully invalidate and update the JavaScriptCallFrame.

        <rdar://problem/7020755> JSDebugger crashes after reloading from a breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=27146

        Reviewed by Timothy Hatcher.

        * inspector/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::invalidate):
        (WebCore::JavaScriptCallFrame::update):

2009-10-19  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dmitri Titov.

        Remove "source" from storage events
        https://bugs.webkit.org/show_bug.cgi?id=30536

        Remove "source" from storage events per
        http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-October/023703.html

        This was removed because it makes it introduces synchronous access that can
        cross the event loop boundry (since a storage event can fire from one process
        and be handled in another).

        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        (WebCore::StorageEvent::initStorageEvent):
        * storage/StorageEvent.h:
        (WebCore::StorageEvent::uri):
        * storage/StorageEvent.idl:
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatch):

2009-10-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove ResourceLoadNotifier::activeDocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=30533

        Removing this method from ResourceLoadNotifier better decouples the
        notifier from FrameLoader.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::requestFromDelegate):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):

2009-10-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move sendRemainingDelegateMessages to ResourceLoadNotifier
        https://bugs.webkit.org/show_bug.cgi?id=30531

        This method is about notifying folks and doesn't interact with the rest
        of FrameLoader.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/FrameLoader.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:

2009-10-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Bypass popup blocker using click event
        https://bugs.webkit.org/show_bug.cgi?id=21501

        Keep track of which events were generated by JavaScript and use that
        inforation when figuring out if we're processing a user gesture.

        Test: http/tests/security/popup-blocked-from-fake-event.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGestureEvent):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:
        (WebCore::Event::createdByDOM):
        (WebCore::Event::setCreatedByDOM):

2009-10-19  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Fixing a typo.

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

        * platform/sql/SQLiteDatabase.h:

2009-10-19  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        Manual Test for crash caused by JS accessing DOMWindow which is disconnected from the Frame.
        https://bugs.webkit.org/show_bug.cgi?id=30544

        * manual-tests/crash-on-accessing-domwindow-without-frame.html: Added.

2009-10-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Flash at end of opacity/transform transition sometimes
        https://bugs.webkit.org/show_bug.cgi?id=30501
        
        When a transition finishes, there window of time between when the animation is
        removed, and the final style set on the GraphicsLayer. This caused the layer to revert
        to its old appearance for one or two frames. To avoid this, we set the final
        transform or opacity at the start of the transition; we know that the animation
        will override the final value for as long as its running.
        
        No test because this is a very transient effect that can't be captured
        in a test.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::updateLayerOpacity):
        (WebCore::RenderLayerBacking::updateLayerTransform):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::startTransition):
        * rendering/RenderLayerBacking.h:

2009-10-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add more stop characters into console completions.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype._reportCompletions):

2009-10-19  Marshall Culpepper  <mculpepper@appcelerator.com>

        Reviewed by Adam Roben.

        implemented ClipboardWin::files()
        https://bugs.webkit.org/show_bug.cgi?id=29666

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::files):

2009-10-19  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add support for link relations in HTMLAnchorElement and implement rel="noreferrer".

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

        Tests: http/tests/navigation/no-referrer-reset.html
               http/tests/navigation/no-referrer-same-window.html
               http/tests/navigation/no-referrer-subframe.html
               http/tests/navigation/no-referrer-target-blank.html

        * WebCore.base.exp: Update FrameLoader::loadFrameRequest export symbol
        * html/HTMLAnchorElement.cpp: Add support for link relations and implement noreferrer
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        (WebCore::HTMLAnchorElement::hasRel):
        (WebCore::HTMLAnchorElement::setRel):
        * html/HTMLAnchorElement.h: Add support for link relations and implement noreferrer
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::createWindow):
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected): Add parameter for referrer policy
        (WebCore::FrameLoader::loadFrameRequest): Add parameter for referrer policy
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy): Suppress opener if requested by ReferrerPolicy
        * loader/FrameLoader.h: Update urlSelected and loadFrameRequest prototypes
        * loader/FrameLoaderTypes.h: Add enum for referrer policy
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::timerFired):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Update call to urlSelected()
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): Update call to urlSelected()


2009-10-19  Alpha Lam  <hclam@chromium.org>

        Reviewed by Dimitri Glazkov (dglazkov@chromium.org).

        [v8] typeof(HTMLMediaElement) should return undefined if media
        engine is not available
        https://bugs.webkit.org/show_bug.cgi?id=30343

        Check for availability of the media engine to disable
        HTMLMediaElement, HTMLAudioElement, HTMLVideoElement, MediaError
        in runtime.

        Try runs and review in Chromium:
        http://codereview.chromium.org/276011

        Test: manual-tests/chromium/media-player-not-available.html

        The above test can work work in Chromium. Testing procedures:
        1. Remove all media support libraries in Chromium (e.g. ffmpeg libraries)
        2. Open Chromium with above test page
        3. Verify the test results according to the test page

        * bindings/v8/custom/V8CustomBinding.h:
        Declare enabler methods.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        Report enabled only if media player is available.
        * manual-tests/chromium/media-player-not-available.html: Added.
        Manual test, following instruction in this test for procedures.
        * page/DOMWindow.idl:
        Mark HTMLMediaElement, HTMLAudioElement, HTMLVideElement, MediaError
        as enabled at runtime.

2009-10-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by David Hyatt.

        Refactor out some of the code in paint() into paintPanScrollIcon()
        and paintScrollbars() in preparation of some Qt API changes.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):
        * platform/ScrollView.h:

2009-10-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Roben.

        Make the local static panScrollIcon into a Image* instead
        of a RefPtr<Image>.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):

2009-10-19  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by David Levin.

        Forcefully set antialiasing for Chromium media controls.

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

        Before it was nondeterministiacally being enabled based on the previous state of GraphicsContext.

        Covered by existing layout tests.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaSlider): Added setShouldAntialias(true).

2009-10-19  Jens Alfke  <jens@mooseyard.com>

        Reviewed by Darin Adler.

        Optimize string upper/lowercasing
        https://bugs.webkit.org/show_bug.cgi?id=30261
        
        - Added AtomicString::upper() and lower()
        - Further optimized StringImpl::lower()
        - Removed StringImpl::isLower()
        - Added QualifiedName::localNameUpper(), which is cached, thereby saving
          thousands of upper() calls and string allocations.
 
         * dom/Element.cpp:
         (WebCore::Element::setAttribute): Call AtomicString::lower()
         * dom/QualifiedName.cpp:
         (WebCore::QualifiedName::localNameUpper): New method
         * dom/QualifiedName.h: Added localNameUpper() method
         * dom/StyledElement.cpp:
         (WebCore::StyledElement::parseMappedAttribute):  Call AtomicString::lower()
         * html/HTMLDocument.cpp:
         (WebCore::HTMLDocument::createElement): Call AtomicString::lower()
         * html/HTMLElement.cpp:
         (WebCore::HTMLElement::nodeName): Call localNameUpper()
         * platform/text/AtomicString.cpp:
         (WebCore::AtomicString::lower): New method
         (WebCore::AtomicString::upper): New method
         * platform/text/AtomicString.h: Added lower() and upper()
         * platform/text/StringImpl.cpp: Removed isLower()
         (WebCore::StringImpl::lower): Further optimization of initial loop
         * platform/text/StringImpl.h: Removed isLower()
 
2009-10-19  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        If a call to a plugin's invokeMethod, invokeDefault or construct
        returns false, throw an exception into JS.        

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

        Test: plugins/netscape-invoke-failure.html

        * bindings/v8/V8NPObject.cpp: Check return values of invokeMethod, invokeDefault and construct.
        (npObjectInvokeImpl):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod): Check return value
        (JSC::Bindings::CInstance::invokeDefaultMethod): Check return value
        (JSC::Bindings::CInstance::invokeConstruct): Check return value

2009-10-16  Stephen White  <senorblanco@chromium.org>

        Reviewed by Adam Barth.

        Fix for chromium/skia canvas arc start/end positions, when the arc is
        >= 360 degrees.
        https://bugs.webkit.org/show_bug.cgi?id=30449

        Covered by new test:
        LayoutTests/fast/canvas/arc360.html

        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::addArc):

2009-10-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix uninitialized variable reference in Element::removeAttribute().
        https://bugs.webkit.org/show_bug.cgi?id=30502

        * dom/Element.cpp:
        (WebCore::Element::removeAttribute):

2009-10-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=30463
        Remove HTML5 media element 'loadend' event

        * dom/EventNames.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseMappedAttribute): Remove 'loadend'.
        (WebCore::HTMLMediaElement::loadInternal): Ditto.
        (WebCore::HTMLMediaElement::noneSupported): Ditto.
        (WebCore::HTMLMediaElement::mediaEngineError): Ditto.
        (WebCore::HTMLMediaElement::setNetworkState): Ditto.
        (WebCore::HTMLMediaElement::userCancelledLoad): Ditto.

2009-10-19  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Adam Barth.

        [Qt] Remove deletion of outgoing FormData object when reply is finished.
        The buffers will be destroyed a bit later, when the QNetworkReply is deleted.
        Bug: https://bugs.webkit.org/show_bug.cgi?id=29551

        * platform/network/qt/QNetworkReplyHandler.cpp:
        * platform/network/qt/QNetworkReplyHandler.h:

2009-10-19  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Fix hard-to-reproduce crash in HTMLTokenizer by avoiding a rare
        fastRealloc edge case.
        https://bugs.webkit.org/show_bug.cgi?id=29313

        No test, the crash shows up occasionally in crash dumps, we weren't able
        to reproduce it locally.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::enlargeScriptBuffer): Added an early exit to
            avoid calling fastRealloc with the size of 0.

2009-10-19  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Seidel.

        Use fillRect() instead of drawRect() to fix Chromium media controls rendering.

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

        Chromium Mac layout tests will need to be rebaselined.  Existing layout tests for Linux/Win still pass.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaSlider): Use fillRect() instead of drawRect().

2009-10-19  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Adam Barth.

        Crash in DOMWindow::clearTimeout etc when DOMWindow is not connected to a frame.
        https://bugs.webkit.org/show_bug.cgi?id=29832

        Need to make sure the script caches are reset when frame gets disconnected from still-alive DOMWindow.
        This will prevent JS from calling DOMWindow methods that can not be completed w/o the frame.

        I am not sure it's possible to test this since the only file that repros the problem need ~10 seconds to cause crash.

        * page/Frame.cpp:
        (WebCore::Frame::~Frame): Right after frame disconnects from DOMWindow, clear WindowShell.

2009-10-19  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed build warning fix.
        [Qt] Apply changes to WebCore.pro introduced in r49778

        * WebCore.pro: Removed svg/graphics/filters/SVGFEGaussianBlur.h from HEADERS

2009-10-19  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        Move feGaussianBlur from WebCore/svg to WebCore/platform
        [https://bugs.webkit.org/show_bug.cgi?id=30495]

        This patch moves SVGFRGaussianBlur from svg/graphics/filters
        to platform/graphics/filters/FEGaussianBlur. This is needed
        for shadow support on Qt and Cairo.
        No change in functionality, therfore no new test case needed.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/FEGaussianBlur.cpp: Added.
        * platform/graphics/filters/FEGaussianBlur.h: Added.
        * svg/SVGFEGaussianBlurElement.h:
        * svg/graphics/filters/SVGFEGaussianBlur.cpp: Removed.
        * svg/graphics/filters/SVGFEGaussianBlur.h: Removed.

2009-10-19  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed.

        Added reviewer name to r49574.

2009-10-19  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30489
        [Gtk] The document frame/html container claims to be parentless

        Work around for the parentless claim made by the accessible associated
        with the embedded WebView. When we identify this condition, get the
        widget's parent, and then get the AtkObject from that. Admittedly an ugly
        hack, but we'll need it for Yelp and other Gtk+/GNOME applications which
        plan to switch over to WebKit.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_parent):

2009-10-19  Benjamin Otte  <otte@gnome.org>

        Reviewed by Jan Alonzo.

        Handle duration queries properly
        https://bugs.webkit.org/show_bug.cgi?id=29999

        Previously duration queries failed to handle unknown duration
        and didn't treat the returned duration as an unsigned.

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

2009-10-19  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix build on Windows.

        * plugins/win/PluginViewWin.cpp:
        (windowHandleForPageClient):

2009-10-19  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Windowed Plugins: Don't crash when client is 0.
        
        Client is 0 when we use QWebPage without a QWebView or QGraphicsWebView.
        In addition, setFrameRect()/updatePluginWidget() is called even if the
        plugin was not succesfully loaded. updatePluginWidget() updates the
        window rect which is, in theory, useful to draw something that indicates
        that we didn't load successfully.
        
        So, a status check is added to setNPWindowIfNeeded.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::platformStart):

2009-10-19  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Windowed Plugins: Fix crash when QWebPage is deleted after QWebView.
        
        Fixes various sources of crashes:
        1. The PluginContainer is a child of QWebView. When the view gets deleted,
        the PluginView is not notified about the deletion of PluginContainer.
        2. QWebView destructor does not set client to 0.
        3. Sometimes pending paint events are sent after the plugin has died, so add
        a check in PluginView::setNPWindowIfNeeded.

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

        * plugins/qt/PluginContainerQt.cpp:
        (PluginContainerQt::~PluginContainerQt):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):

2009-10-19  Jakob Truelsen  <antialize@gmail.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=29042
        Allow one to customize the minimal and maximal shrink factors used when printing.

        * page/PrintContext.cpp:
        (WebCore::PrintContext::begin):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setPrintingMinimumShrinkFactor):
        (WebCore::Settings::setPrintingMaximumShrinkFactor):
        * page/Settings.h:
        (WebCore::Settings::printingMinimumShrinkFactor):
        (WebCore::Settings::printingMaximumShrinkFactor):

2009-10-18  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Adam Barth.

        Fixes issue where doubleclicking a word could select following adjacent newlines.
        https://bugs.webkit.org/show_bug.cgi?id=30234

        Tests: platform/mac/editing/selection/doubleclick-should-not-expand-across-lines.html
               platform/mac/editing/selection/script-tests/TEMPLATE.html
               platform/win/editing/selection/doubleclick-should-not-expand-across-lines.html
               platform/win/editing/selection/script-tests/TEMPLATE.html

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::appendTrailingWhitespace):

2009-10-18  Kevin Ollivier  <kevino@theolliviers.com>

        CURL build fix, use proper header name.

        * platform/network/curl/ResourceHandleManager.h:

2009-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Properties on Arrays and NodeLists are not logged correctly.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatarray):
        (WebInspector.ConsoleView.prototype._printArray):

2009-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: touching WebCore so that it
        initiated inspector frontend deployment on Windows.

        Web Inspector: frontend files are not deployed in Windows
        incremental build.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):

2009-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Title of dir(["test", "test2"]) should be Array

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

        Test: inspector/console-tests.html

        * inspector/front-end/InjectedScript.js:

2009-10-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        REGRESSION: SVG Mask doesn't work for maskContentUnits="objectBoundingBox"
        [https://bugs.webkit.org/show_bug.cgi?id=30480]

        Patch for SVGMaskElement landed in r49598 should correct the location of
        the mask image graphics context. It only corrects the location for userSpaceOnUse
        mode in maskContentUnits but breaks objectBoundingBoxMode.
        The maskDestRect shouldn't be moved. It is not responsible for the correct context
        postioin but for the correct position of the mask image.
        This patch calculates the context postion independently from the maskDestRect.
        It also uses lineareRGB color space for masking on CG now. This is the default
        color space for masking operations.
        We already have tests for both maskContentUnits modes.

            *svg/W3C-SVG-1.1/masking-intro-01-f.svg
            *svg/custom/mask-with-default-value.svg

        Some tests needed new pixel tests because of the new color space.

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):

2009-10-18  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Use v8::Integer::NewFromUnsigned when converting unsigneds into V8's numbers.
        That is notably faster for small numbers (most common case).
        https://bugs.webkit.org/show_bug.cgi?id=30493

        * bindings/scripts/CodeGeneratorV8.pm:

2009-10-18  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [GTK] Add MathML to the build system
        https://bugs.webkit.org/show_bug.cgi?id=30487

        Add MathML sources if MathML support is enabled.

        * GNUmakefile.am:

2009-10-18  Kevin Ollivier  <kevino@theolliviers.com>

        Non-PCH build fix. Added missing header.

        * bridge/runtime_root.h:

2009-10-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Compositing layers not correctly updated after partial layout
        https://bugs.webkit.org/show_bug.cgi?id=30425
        
        When a partial layout happened, for example as the result of a postion-change-only
        layout, then some compositing layer positions were not correctly updated. To fix
        this, updateLayerPositions() now carries along a flag that is set at the rootmost
        layer being updated, and used to determine when we hit the first compositing layer
        in this update. RenderLayerBacking::updateAfterLayout() makes use of this information
        to do a full geometry update on that layer, which is thus the rootmost compositing
        layer that is being updated.

        Test: compositing/geometry/partial-layout-update.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        * rendering/RenderLayerBacking.h:

2009-09-13  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Add support for proxies in CURL.
 
        https://bugs.webkit.org/show_bug.cgi?id=30446

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::setProxyInfo):
        (WebCore::ResourceHandleManager::initializeHandle):
        * platform/network/curl/ResourceHandleManager.h:
        (WebCore::ResourceHandleManager::):

2009-10-18  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez

        https://bugs.webkit.org/show_bug.cgi?id=25901
        Use ATK_ROLE_SECTION for divTag and ATK_ROLE_LABEL for labelTag

        Replaces the use of ATK_ROLE_PANEL with the expected accessible roles.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_role):

2009-10-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by George Staikos.

        Cleanup SVGElement code, preparing for animVal support
        https://bugs.webkit.org/show_bug.cgi?id=30466

        Add new SynchronizablePropertyController and move the code for SVG property <-> XML attribute synchronization
        from SVGElement. This is a further preparation for animVal support, where SynchronizablePropertyController will
        be used to control the start/end state of an animated property.

        We're currently tracking animated properties that need synchronization, generalize this concept and use
        it to track their creation (bound to certain SVG*Element classes) as well as a flag determing the need
        of synchronization (no SVG DOM object wrappers, no synchronization needed).

        No change in functionality, thus no tests.

        * GNUmakefile.am: Add 'SynchronizablePropertyController.cpp/h' to build
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * svg/SVGAllInOne.cpp: Ditto.
        * svg/SVGAnimatedProperty.h: Add registerProperty() function 
        (WebCore::::SVGAnimatedProperty): Call registerProperty() function  
        (WebCore::::registerProperty): Add new registerProperty() function, announcing new properties to SynchronizablePropertyController.
        * svg/SVGAnimatedTemplate.h: Use propertyController() method, to access the new functions moved from SVGElement.
        (WebCore::lookupOrCreateWrapper):
        * svg/SVGElement.cpp: Adapt to code moving to SynchronizablePropertyController.
        (WebCore::SVGElement::updateAnimatedSVGAttribute):
        * svg/SVGElement.h: Move handling SVG property synchronization to SynchronizablePropertyController.
        (WebCore::SVGElement::propertyController): Expose reference to SynchronizablePropertyController object.
        * svg/SVGViewSpec.cpp: Reorder initialization order of contextElement, leading to possible crashes.
        (WebCore::SVGViewSpec::SVGViewSpec):
        (WebCore::SVGViewSpec::viewTarget):
        * svg/SVGViewSpec.h: Ditto.
        (WebCore::SVGViewSpec::contextElement):
        * svg/SynchronizablePropertyController.cpp: Added.
        (WebCore::SynchronizablePropertyController::SynchronizablePropertyController):
        (WebCore::SynchronizablePropertyController::registerProperty):
        (WebCore::SynchronizablePropertyController::setPropertyNeedsSynchronization):
        (WebCore::SynchronizablePropertyController::synchronizeProperty):
        (WebCore::SynchronizablePropertyController::synchronizeAllProperties):
        (WebCore::SynchronizablePropertyController::startAnimation):
        (WebCore::SynchronizablePropertyController::stopAnimation):
        * svg/SynchronizablePropertyController.h: Added.
        (WebCore::SynchronizableProperty::SynchronizableProperty):
        (WebCore::SynchronizableProperty::isHashTableDeletedValue):
        (WebCore::SynchronizableProperty::operator==):
        (WebCore::SynchronizablePropertyHash::hash):
        (WebCore::SynchronizablePropertyHash::equal):
        (WebCore::SynchronizablePropertyHashTraits::constructDeletedValue):
        (WebCore::SynchronizablePropertyHashTraits::isDeletedValue):

2009-10-17  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25413
        [GTK] Please expose the level of headings

        Exposes the heading level as an attribute of the AtkObject.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (addAttributeToSet):
        (webkit_accessible_get_attributes):
        (webkit_accessible_class_init):

2009-10-17  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        EventHandler::eventLoopHandleMouseDragged needs ENABLE(DRAG_SUPPORT) guards
        https://bugs.webkit.org/show_bug.cgi?id=30472

        Put ENABLE(DRAG_SUPPORT) guards around EventHandler::eventLoopHandleMouseDragged
        in EventHandler.cpp. MSVC fails to compile when DRAG_SUPPORT not enabled.

        * page/EventHandler.cpp:

2009-10-17  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Video controls not zoomed / transformed correctly
        https://bugs.webkit.org/show_bug.cgi?id=30461

        Draw the images in the controls scaled.

        No new tests. With this change Chromium will pass the following tests:
        LayoutTests/media/video-controls-zoomed.html
        LayoutTests/media/video-controls-transformed.html

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaButton):
        Pass along the target rect directly.
        (WebCore::RenderMediaControlsChromium::adjustMediaSliderThumbSize):
        Adjust the thumb slide applied with the scale factor.

2009-10-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Gtk] Build fix for WebKitGtk after r49723.

        Add bindings/js/JSExceptionBase.* to the build.

        * GNUmakefile.am:

2009-10-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Build fix for QtWebKit after r49723.

        Add bindings/js/JSExceptionBase.cpp to the build.

        * WebCore.pro:

2009-10-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=30456
        Fixes for new Debug_All Windows build configuration.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::findCFNetworkModule): Ask for the correct library instead of guessing.
        * platform/win/ScrollbarThemeSafari.cpp: Use new DEBUG_ALL preprocessor define for library naming.
        * rendering/RenderMediaControls.cpp: Use new DEBUG_ALL preprocessor define for library naming.
        * rendering/RenderThemeSafari.cpp: Use new DEBUG_ALL preprocessor define for library naming.

2009-10-16  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to determine whether a plug-in has ever been halted.

        Part of <rdar://problem/7312158>.

        Reviewed by Dan Bernstein.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        Initialize m_hasBeenHalted.

        * plugins/PluginView.h:
        (WebCore::PluginView::hasBeenHalted):
        Return m_hasBeenHalted.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::halt):
        Set m_hasBeenHalted.

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        @charset rule after the first byte causes the rest of css to be ignored
        https://bugs.webkit.org/show_bug.cgi?id=18265

        Apparently we're supposed to tolerate whitespace before the charset
        rule so folks can write code like this:

        <style>
        @charset "utf-8"
        ...
        </style>

        I'm told this is one of the top compatability problems in China.
        Tests: fast/css/comment-before-charset-external.html
               fast/css/comment-before-charset.html
               fast/css/many-spaces-before-charset.html
               fast/css/space-before-charset-external.html
               fast/css/space-before-charset.html

        * css/CSSGrammar.y:

2009-10-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Fixes part of <http://webkit.org/b/30412>.
        Web Inspector should get human readable DOM Exceptions.

        Add a description field to ExceptionBase, and call it through 
        reportException which allows the user/developer to get a more detailed
        and coherent error explanation through the Web Inspector.

        This only applies to exceptions that come from a script on the page when
        it is run. DOM Exceptions that come from the code run in the console, or DOM
        exceptions that are caught and logged will come in a future patch.

        Tests: inspector/uncaught-dom1-exception.html
               inspector/uncaught-dom3-exception.html
               inspector/uncaught-dom8-exception.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        * bindings/js/JSExceptionBase.cpp: Added.
        (WebCore::toExceptionBase):
        * bindings/js/JSExceptionBase.h: Added.
        * dom/ExceptionBase.cpp:
        (WebCore::ExceptionBase::ExceptionBase):
        * dom/ExceptionBase.h:
        (WebCore::ExceptionBase::description):
        * dom/ExceptionCode.cpp:
        (WebCore::):
        (WebCore::getExceptionCodeDescription):
        * dom/ExceptionCode.h:

2009-10-16  Geoffrey Garen  <ggaren@apple.com>

        Build fix: forgot to check in this #include.

        * bridge/runtime_root.h:

2009-10-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Transform layer gets stuck with the wrong transform after an animation ends
        <rdar://problem/7311662>

        Work around a CoreAnimation bug which causes an animated transform layer to
        end up with a stale transform.
        
        Test: compositing/animation/state-at-end-event-transform-layer.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::bug7311367Workaround):
        (WebCore::GraphicsLayerCA::removeAnimationFromLayer):

2009-10-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        After running a transition with an end event listener, can't change the transform
        https://bugs.webkit.org/show_bug.cgi?id=30454
        
        Fix an issue where, if a document had any listener for webkitTransitionEnd or webkitAnimationEnd,
        the animations would not get cleaned up correctly, which broke subsequent changes of transform.
        
        Now, we always clean up the animations right after queuing up the end events.

        Tests: animations/state-at-end-event.html
               transitions/move-after-transition.html

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::onAnimationEnd):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::onAnimationEnd):

2009-10-15  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Handle the Enter Key in the Elements Tree Hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=30428

        TextNode => Edit Text Node
        Has Attributes => Edit First Attribute
        No Attributes => Start Editing New Attribute

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.handleKeyEvent): handle the "Enter" key
        (WebInspector.ElementsTreeElement.prototype.set hovered): only add new attribute button on nodes with attributes
        (WebInspector.ElementsTreeElement.prototype._addNewAttribute): prevent moving backwards where there are no attributes
        (WebInspector.ElementsTreeElement.prototype._startEditingFromEvent): renamed to be clearer
        (WebInspector.ElementsTreeElement.prototype._startEditing): transition to the appropriate edit state for a tree element

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix header indent style for FrameLoader and friends
        https://bugs.webkit.org/show_bug.cgi?id=30430

        * loader/FrameLoader.h:
        (WebCore::FrameLoader::frame):
        (WebCore::FrameLoader::policyChecker):
        (WebCore::FrameLoader::history):
        (WebCore::FrameLoader::notifier):
        (WebCore::FrameLoader::isLoadingMainResource):
        (WebCore::FrameLoader::documentLoader):
        (WebCore::FrameLoader::policyDocumentLoader):
        (WebCore::FrameLoader::provisionalDocumentLoader):
        (WebCore::FrameLoader::state):
        (WebCore::FrameLoader::client):
        (WebCore::FrameLoader::url):
        (WebCore::FrameLoader::isLoadingFromCachedPage):
        (WebCore::FrameLoader::committingFirstRealLoad):
        (WebCore::FrameLoader::committedFirstRealDocumentLoad):
        (WebCore::FrameLoader::creatingInitialEmptyDocument):
        * loader/HistoryController.h:
        (WebCore::HistoryController::currentItem):
        (WebCore::HistoryController::provisionalItem):
        * loader/PolicyCallback.h:
        (WebCore::PolicyCallback::request):
        * loader/PolicyChecker.h:
        (WebCore::PolicyChecker::loadType):
        (WebCore::PolicyChecker::setLoadType):
        (WebCore::PolicyChecker::delegateIsDecidingNavigationPolicy):
        (WebCore::PolicyChecker::delegateIsHandlingUnimplementablePolicy):
        * loader/RedirectScheduler.h:
        * loader/ResourceLoadNotifier.h:

2009-10-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add a Debug_All configuration to build entire stack as debug.
        Change Debug_Internal to:
        - stop using _debug suffix for all WebKit/Safari binaries
        - not use _debug as a DLL naming suffix
        - use non-debug C runtime lib.

        * WebCore.vcproj/QTMovieWin.vcproj: Add Debug_All configuration.
        * WebCore.vcproj/WebCore.make: Debug build in makefile should build Debug_All.
        * WebCore.vcproj/WebCore.sln: Add Debug_All configuration.
        * WebCore.vcproj/WebCore.submit.sln: Add Debug_All configuration.
        * WebCore.vcproj/WebCore.vcproj: Add Debug_All configuration.
        * WebCore.vcproj/WebCoreGenerated.vcproj: Renamed single configuration from "Release" to "all".

2009-10-16  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r49693, because it broke Chromium build.
        http://trac.webkit.org/changeset/49693

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2009-10-16  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Carlson.

        Updated media resource selection algorithm to reflect latest HTML 5 specification.

        Noticable changes:
            -  Elements with no source should have their network state set to NETWORK_EMPTY as opposed to NETWORK_NO_SOURCE
            -  Empty string ("") is now considered a valid URL resolving to the current page and will be loaded

        Tests: media/video-src-empty.html
               media/video-src-none.html

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

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectMediaResource): Updated code and comments to match spec.

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Insecure plug-ins don't trigger mixed content
        https://bugs.webkit.org/show_bug.cgi?id=30431

        Added the missing check.

        Test: http/tests/security/mixedContent/insecure-plugin-in-iframe.html

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

2009-10-16  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Carlson.

        Set autobuffer to true and schedule load in V8 audio element constructor.

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

        Covered by existing tests.

        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Set autobuffer to true and schedule load.

2009-10-16  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Seidel.

        Remove FIXME in RenderMediaControlsChromium as bug was fixed upstream.

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

        Covered by existing media layout tests.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaSlider): Removed round() and FIXME.

2009-10-16  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Seidel.

        Fix Chromium media controls to render a disabled play button when the element is unintialized.

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

        Covered by existing layout tests.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaPlayButton): Include check for NETWORK_EMPTY to render disabled play button.

2009-10-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make typeinfo flags default to false
        https://bugs.webkit.org/show_bug.cgi?id=30372

        Last part -- replace HasDefaultGetPropertyNames with OverridesGetPropertyNames
        flag.

        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::createStructure):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructure):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::createStructure):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::createStructure):

2009-10-16  Steven Knight  <sgk@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=30447
        Handle long link lines by building .idl-generated bindings in a
        separate webcore_bindings library target.  Avoid Visual Studio
        dependency issues by building additional generated .cpp and .h files
        in a separate webcore_bindings_sources target.

        Chrome should still build and test successfully.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2009-10-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Carlson.

        Transform transitions that used to be accelerated are no longer so
        https://bugs.webkit.org/show_bug.cgi?id=30453

        The change in r49633, to not run accelerated animations/transitions on layers that
        are not attached, broke accelerated transitions/animations in many cases where they start
        as soon as the page loads. This change reverts the code that tests for the GraphicsLayer being
        attached.
        
        No test, because it's not possible from a test to know whether a transition is accelerated or not.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):

2009-10-16  Kevin Ollivier  <kevino@theolliviers.com>

        wxMSW build fix, build the MSW source to get methods that use the MSW version of
        PlatformModuleVersion.

        * wscript:

2009-10-16  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix.  Add back MIMETypeRegistryChromium with the right
        casing.

        * platform/chromium/MIMETypeRegistryChromium.cpp: Added.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageResourceMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMETypeForEncoding):
        (WebCore::MIMETypeRegistry::isSupportedJavaScriptMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedNonImageMIMEType):
        (WebCore::MIMETypeRegistry::isSupportedMediaMIMEType):
        (WebCore::MIMETypeRegistry::isJavaAppletMIMEType):
        (WebCore::MIMETypeRegistry::getMediaMIMETypeForExtension):
        (WebCore::dummyHashSet):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageResourceMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypesForEncoding):
        (WebCore::MIMETypeRegistry::getSupportedNonImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedMediaMIMETypes):

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        MimeTypeRegistryChromium is mis-casen
        https://bugs.webkit.org/show_bug.cgi?id=30441

        Change the case of MimeTypeRegistryChromium to match other platforms.

        * WebCore.gypi:
        * platform/chromium/MIMETypeRegistryChromium.cpp: Copied from WebCore/platform/chromium/MimeTypeRegistryChromium.cpp.
        * platform/chromium/MimeTypeRegistryChromium.cpp: Removed.

2009-10-16  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Change EmptyPluginHalterClient in SVGImage to be non-static, to
        match changes made http://trac.webkit.org/changeset/49385.
        https://bugs.webkit.org/show_bug.cgi?id=30403

        Run the following layout test sequence:
          LayoutTests/svg/W3C-SVG-1.1/struct-image-01-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-03-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-04-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-05-b.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-06-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-07-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-08-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-09-t.svg
          LayoutTests/svg/W3C-SVG-1.1/struct-image-10-t.svg
          LayoutTests/svg/carto.net/scrollbar.svg
          LayoutTests/svg/carto.net/selectionlist.svg

        selectionlist.svg should not crash.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): Made EmptyPluginHalterClient non-static.

2009-10-16  Victor Wang  <victorw@chromium.org>

        Reviewed by David Levin.

        Add beforeload event support to V8DOMWrapper

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

        LayoutTests/fast/dom/beforeload/frame-before-load.html

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventToV8Object):

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        MimeTypeRegistryChromium is mis-casen
        https://bugs.webkit.org/show_bug.cgi?id=30441

        Change the case of MimeTypeRegistryChromium to match other platforms.

        * WebCore.gypi:
        * platform/chromium/MIMETypeRegistryChromium.cpp: Copied from WebCore/platform/chromium/MimeTypeRegistryChromium.cpp.
        * platform/chromium/MimeTypeRegistryChromium.cpp: Removed.

2009-10-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Mark Rowe.

        Chrome doesn't set Content-Type for file upload when the file extension
        is not recognized
        https://bugs.webkit.org/show_bug.cgi?id=30433

        Apparently, getMIMETypeForPath is supposed to return
        application/octet-stream when it doesn't have a better MIME type.

        * platform/chromium/MimeTypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):

2009-10-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Pull out r49676 as it caused build breakges on Symbian

        * plugins/symbian/PluginViewSymbian.cpp:

2009-10-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Ariya Hidayat.

        Crash fix when loading NPAPI plugins on Qt/Mac

        There's no guarantee that the plist will be valid even if we
        ask the plugin to create it. Crash obverved with iGetter.

        * plugins/mac/PluginPackageMac.cpp:

2009-10-15  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Fix for Chromium/skia's implementation of canvas's isPointInPath().
        https://bugs.webkit.org/show_bug.cgi?id=30402

        Covered by LayoutTests/fast/canvas/pointInPath.html.

        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::SkPathContainsPoint):

2009-10-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor ResourceLoadNotifier out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30379

        These methods have virtually no interaction with the rest of
        FrameLoader.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/Document.cpp:
        (WebCore::Document::resourceRetrievedByXMLHttpRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::ResourceLoadNotifier::ResourceLoadNotifier):
        (WebCore::ResourceLoadNotifier::activeDocumentLoader):
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::willSendRequest):
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::didLoadResourceByXMLHttpRequest):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::dispatchAssignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::notifier):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):
        * loader/ResourceLoadNotifier.cpp: Added.
        (WebCore::ResourceLoadNotifier::ResourceLoadNotifier):
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::willSendRequest):
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::didLoadResourceByXMLHttpRequest):
        (WebCore::ResourceLoadNotifier::dispatchAssignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::activeDocumentLoader):
        * loader/ResourceLoadNotifier.h: Added.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):

2009-10-15  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Darin Fisher.

        Bug 30427 -  Remove unneeded methods in ChromiumDataObject
        (https://bugs.webkit.org/show_bug.cgi?id=30427)
        
        Remove no longer needed methods from ChromiumDataObject.

        No new tests (no functional change)

        * platform/chromium/ChromiumDataObject.h:

2009-10-16  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Need a way to inform the application when a Netscape plugin is created or deleted
        https://bugs.webkit.org/show_bug.cgi?id=30179

        Inform the application when a plugin is created or destroyed, but only if the 
        application registered for these notifications.

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):

2009-10-16  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Eric Seidel.

        Default language translation should be determined by locale settings,
        e.g., "en-US".
        https://bugs.webkit.org/show_bug.cgi?id=29653

        Test: fast/js/navigator-language.html

        * platform/qt/Localizations.cpp:
        (WebCore::defaultLanguage):

2009-10-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Ariya Hidayat.

        Crash fix when loading NPAPI plugins on Qt/Mac

        There's no guarantee that the plist will be valid even if we
        ask the plugin to create it. Crash obverved with iGetter.

        * plugins/mac/PluginPackageMac.cpp:

2009-10-15  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Fix for Chromium/skia's implementation of canvas's isPointInPath().
        https://bugs.webkit.org/show_bug.cgi?id=30402

        Covered by LayoutTests/fast/canvas/pointInPath.html.

        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::SkPathContainsPoint):

2009-10-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor ResourceLoadNotifier out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30379

        These methods have virtually no interaction with the rest of
        FrameLoader.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * dom/Document.cpp:
        (WebCore::Document::resourceRetrievedByXMLHttpRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::ResourceLoadNotifier::ResourceLoadNotifier):
        (WebCore::ResourceLoadNotifier::activeDocumentLoader):
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::willSendRequest):
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::didLoadResourceByXMLHttpRequest):
        (WebCore::FrameLoader::sendRemainingDelegateMessages):
        (WebCore::FrameLoader::requestFromDelegate):
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::dispatchAssignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::notifier):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::receivedError):
        * loader/ResourceLoadNotifier.cpp: Added.
        (WebCore::ResourceLoadNotifier::ResourceLoadNotifier):
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::willSendRequest):
        (WebCore::ResourceLoadNotifier::didReceiveResponse):
        (WebCore::ResourceLoadNotifier::didReceiveData):
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::didFailToLoad):
        (WebCore::ResourceLoadNotifier::didLoadResourceByXMLHttpRequest):
        (WebCore::ResourceLoadNotifier::dispatchAssignIdentifierToInitialRequest):
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::activeDocumentLoader):
        * loader/ResourceLoadNotifier.h: Added.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::didFail):
        (WebCore::ResourceLoader::didCancel):
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoader::didCancelAuthenticationChallenge):

2009-10-15  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Darin Fisher.

        Bug 30427 -  Remove unneeded methods in ChromiumDataObject
        (https://bugs.webkit.org/show_bug.cgi?id=30427)
        
        Remove no longer needed methods from ChromiumDataObject.

        No new tests (no functional change)

        * platform/chromium/ChromiumDataObject.h:

2009-10-15  Daniel Bates  <dbates@webkit.org>

        No review, rolling out r49644.
        http://trac.webkit.org/changeset/49644
        
        We need to think about this change some more. See bug #30418 
        for more details.

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::canSetBaseElementURL):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:

2009-10-14  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to determine whether a node is a halted plug-in.

        Part of <rdar://problem/7273354> Halted plug-ins should restart on
        mouseover

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

        Reviewed by Darin Adler.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        Initialize m_isHalted.

        * plugins/PluginView.h:
        (WebCore::PluginView::isHalted):
        Return m_isHalted.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::halt):
        Set m_isHalted to true.
        (WebCore::PluginView::restart):
        clear m_isHalted.

2009-10-15  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Oliver Hunt.

        [Qt] Build fix for QtWebKit after r49649.

        Change JSC::HasNonDefaultMark to OverridesMarkChildren in createStructure function.

        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructure):

2009-10-15  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed - build fix.

        Web Inspector: add file missing in r49648

        * inspector/front-end/TestController.js: Added.
        (WebInspector.TestController):
        (WebInspector.TestController.prototype.waitUntilDone):
        (WebInspector.TestController.prototype.notifyDone):
        (WebInspector.evaluateForTestInFrontend):

2009-10-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Make typeinfo flags default to false
        https://bugs.webkit.org/show_bug.cgi?id=30372

        Part 2 -- Reverse the TypeInfo HasDefaultMark flag to OverridesMarkChildren, etc

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure):
        (WebCore::DOMConstructorObject::createStructure):
        * bindings/js/JSDOMWindowShell.h:
        (WebCore::JSDOMWindowShell::createStructure):
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::createStructure):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        (WebCore::JSQuarantinedObjectWrapper::createStructure):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/qt/qt_runtime.h:
        (JSC::Bindings::QtRuntimeMethod::createStructure):
        * bridge/runtime_method.h:
        (JSC::RuntimeMethod::createStructure):

2009-10-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: introduce test controller with waitUntilDone
        on frontend side.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/TestController.js: Added.
        (WebInspector.TestController):
        (WebInspector.TestController.prototype.waitUntilDone):
        (WebInspector.TestController.prototype.notifyDone):
        (WebInspector.evaluateForTestInFrontend):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:

2009-10-15  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=27895
        
        Fixes an issue in which injecting an inline event handler whose value ends in a single-line
        JavaScript comment can bypass the XSSAuditor. Similarly fixes this issue with respect to
        the HTML Base element, HTML Object element, inline and external script tags, and
        JavaScript multi-line variants of all of these attacks.

        Tests: http/tests/security/xssAuditor/base-href-comment.html
               http/tests/security/xssAuditor/iframe-javascript-url-comment.html
               http/tests/security/xssAuditor/img-onerror-HTML-comment.html
               http/tests/security/xssAuditor/img-onerror-comment.html
               http/tests/security/xssAuditor/object-tag-comment.html
               http/tests/security/xssAuditor/script-tag-comment-HTML-entity.html
               http/tests/security/xssAuditor/script-tag-comment.html
               http/tests/security/xssAuditor/script-tag-with-source-comment.html

        * page/XSSAuditor.cpp: Added constant minAttackLength.
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::canSetBaseElementURL):
        (WebCore::XSSAuditor::findInRequest): Added parameter context. Only looks at up 
        to minAttackLength of script code plus context (if any).
        * page/XSSAuditor.h:

2009-10-08  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Currently, Skia clip paths are 1-bit. This patch makes our path
        clipping anti-aliased for non-canvas drawing.

        http://code.google.com/p/chromium/issues/detail?id=5927
        https://bugs.webkit.org/show_bug.cgi?id=28820
        http://www.imperialviolet.org/2009/09/02/anti-aliased-clipping.html

        Already covered by layout tests. New baselines will be needed in the
        Chromium tree.

        (Reland. First landed in r49329, reverted in r49330 due to Windows
        build break)

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::clip):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::clipPathAntiAliased):
        (PlatformContextSkia::restore):
        (PlatformContextSkia::applyAntiAliasedClipPaths):
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::canvasClip):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::canvasClip):

2009-10-15  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7295738> No way to mute/unmute a movie in full screen video mode

        * WebCore.Video.exp: Export muted and setMute.

2009-10-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Transitions fail to run sometimes
        https://bugs.webkit.org/show_bug.cgi?id=26770

        Fix an issue where we could attempt to start accelerated animations or transitions on
        GraphicsLayer that were not rooted (because of visibility:hidden), which would leave
        the AnimationController's m_waitingForResponse flag in a state that killed subsequent
        software transitions.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate):
        (WebCore::AnimationControllerPrivate::endAnimationUpdate):
        (WebCore::AnimationControllerPrivate::receivedStartTimeResponse):
        (WebCore::AnimationControllerPrivate::addToStartTimeResponseWaitList):
        (WebCore::AnimationControllerPrivate::startTimeResponse):
        * page/animation/AnimationControllerPrivate.h:
        Make some methods non-inline for ease of debugging (these are not hot methods).
        Rename m_waitingForAResponse to m_waitingForResponse.
        
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::hasAncestor):
        New method to report whether the receiver has the given layer as an ancestor. Used for checking
        whether a layer is rooted.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        Don't try to start accelerated animations or transitions on non-rooted GraphicsLayers.

2009-10-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Refactor ProfilesPanel to support multiple profile types

        Data describing different profile types are now stored in distinct objects.
        https://bugs.webkit.org/show_bug.cgi?id=30332

        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView.profileCallback):
        (WebInspector.CPUProfileView):
        (WebInspector.CPUProfileView.prototype._sortData):
        (WebInspector.CPUProfileType):
        (WebInspector.CPUProfileType.prototype.get buttonTooltip):
        (WebInspector.CPUProfileType.prototype.get buttonStyle):
        (WebInspector.CPUProfileType.prototype.buttonClicked):
        (WebInspector.CPUProfileType.prototype.setRecordingProfile):
        (WebInspector.CPUProfile):
        (WebInspector.CPUProfile.prototype.get title):
        (WebInspector.CPUProfile.prototype.get uid):
        (WebInspector.CPUProfile.prototype.get head):
        (WebInspector.CPUProfile.prototype.createView):
        (WebInspector.CPUProfile.prototype.viewForProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileType):
        (WebInspector.ProfileType.prototype.get buttonTooltip):
        (WebInspector.ProfileType.prototype.get buttonStyle):
        (WebInspector.ProfileType.prototype.get buttonCaption):
        (WebInspector.ProfileType.prototype.get id):
        (WebInspector.ProfileType.prototype.get name):
        (WebInspector.ProfileType.prototype.buttonClicked):
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems.clickHandler):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel.prototype.reset):
        (WebInspector.ProfilesPanel.prototype.registerProfileType):
        (WebInspector.ProfilesPanel.prototype._makeKey):
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.showProfile):
        (WebInspector.ProfilesPanel.prototype.getProfileType):
        (WebInspector.ProfilesPanel.prototype.showProfileForURL):
        (WebInspector.ProfilesPanel.prototype.updateProfileTypeButtons):
        (WebInspector.ProfilesPanel.prototype.displayTitleForProfileLink):
        (WebInspector.ProfilesPanel.prototype.get searchableViews):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.addProfileHeader):
        (WebInspector.setRecordingProfile):
        (WebInspector.linkifyStringAsFragment):
        (WebInspector.showProfileForURL):

2009-10-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Enable inspector layout tests.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::evaluateForTestInFrontend):

2009-10-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GStreamer] READY state doesn't mean "enough data"
        https://bugs.webkit.org/show_bug.cgi?id=30003

        STATE_READY means MediaPlayer::HaveNothing

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

2009-10-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

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

        implement cancelLoad

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

2009-10-15  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=30353
        
        Fix race condition, leading to a deadlock

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_timeout_func):
        (webkit_video_sink_render):
        (unlock_buffer_mutex):
        (webkit_video_sink_unlock):
        (webkit_video_sink_unlock_stop):
        (webkit_video_sink_stop):
        (webkit_video_sink_start):
        (webkit_video_sink_class_init):
        Fix race condition in unlock/render that would lead to deadlocks.

2009-10-15  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=30374
        
        Check if caps are valid before parsing them

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::duration):
        Check if caps are valid before parsing them in ::naturalSize().
        This prevents assertions if the natural size should be calculated
        before the video caps are negotiated.

2009-10-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=30006
        [GStreamer] Unnecessary checks for Messages types in callbacks

        refactored gst message callbacks into a single one

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::do_gst_init):
        (WebCore::MediaPlayerPrivate::duration):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-10-15  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Adele Peterson.

        Anchor elements should be mouse focusable regardless isLink flag.
        https://bugs.webkit.org/show_bug.cgi?id=26856

        * html/HTMLAnchorElement.cpp:
        * html/HTMLAnchorElement.h:

2009-10-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Sort XCode project file.

        * WebCore.xcodeproj/project.pbxproj:

2009-10-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Dave Hyatt.

        Return correct shorthand property name for 
        background-repeat-x, background-repeat-y, background-position-x,
        background-position-y, -webkit-mask-position-x, -webkit-mask-position-y,
        -webkit-mask-repeat-x, -webkit-mask-repeat-y.

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

        Test: fast/backgrounds/repeat/background-repeat-shorthand.html

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

2009-10-14  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Migrate profiles to the injected script-based schema.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getProfileHeaders):
        (WebCore::InspectorBackend::getProfile):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::getProfileHeaders):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::createProfileHeader):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addProfileHeader):
        (WebCore::InspectorFrontend::didGetProfileHeaders):
        (WebCore::InspectorFrontend::didGetProfile):
        * inspector/InspectorFrontend.h:
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::ProfileNodeClass):
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView.profileCallback):
        (WebInspector.ProfileView):
        (WebInspector.ProfileView.prototype._mouseDownInDataGrid):
        (WebInspector.ProfileView.prototype._assignParentsInProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        * inspector/front-end/inspector.js:
        (WebInspector.addProfileHeader):

2009-10-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Create and update frontend script objects only when
        web inspector is visible.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::pruneResources):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorController::mainResourceFiredLoadEvent):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::didOpenDatabase):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::evaluateForTestInFrontend):

2009-10-15  Joseph Pecoraro  <joepeck@webkit.org>

        Fix Windows build.

        * dom/Document.idl:

2009-10-14  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Adam Barth.

        [HTML5] Add document.head
        https://bugs.webkit.org/show_bug.cgi?id=30232

        Test is fast/dom/document-head.html

        * dom/Document.idl: added readonly attribute head

2009-10-14  Matt Mueller  <mattm@chromium.org>

        Reviewed by Darin Adler.

        Check FNonNeg after the unit switch to avoid valgrind uninitialised conditional reference in WebCore::CSSParser::validUnit.  See http://crbug.com/20939.
        https://bugs.webkit.org/show_bug.cgi?id=30347
        https://bugs.webkit.org/show_bug.cgi?id=22772

        Covered by running LayoutTests/fast/css/invalid-percentage-property.html under valgrind.

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

2009-10-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Move scrolling code from FrameLoader to FrameView
        https://bugs.webkit.org/show_bug.cgi?id=30370

        This code is about controlling the Frame's view, not about loading
        stuff into the frame.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::scrollToAnchor):
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragment):
        (WebCore::FrameView::scrollToAnchor):
        * page/FrameView.h:

2009-10-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Make typeinfo flags default to false
        https://bugs.webkit.org/show_bug.cgi?id=30372
        
        Part 1. Reverse the HasStandardGetOwnPropertySlot flag.

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

2009-10-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        [XSSAuditor] Add an exception for local files
        https://bugs.webkit.org/show_bug.cgi?id=30352

        Reduce XSS auditor false positives by always letting pages load scripts
        from their own host. We don't actually know of any false positives
        that this prevents, but it seems like a good idea.

        One subtly is that we don't add this exception for scripts that have a
        query string because (1) URLs with query strings are more apt to
        confuse servers and (2) it is much less common to load scripts with a
        query string.

        Tests: http/tests/security/xssAuditor/script-tag-with-source-same-host-with-query.html
               http/tests/security/xssAuditor/script-tag-with-source-same-host.html

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

2009-10-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by George Staikos.

        Kill virtual contextElement() method spread all over SVG code
        https://bugs.webkit.org/show_bug.cgi?id=30183

        Remove virtual contextElement() function from all SVG*Element classes, as all animated properties live in the
        SVG*Element classes now instead of the SVGFitToViewBox / SVGURIReference / SVGExternalResourcesRequired
        subclasses. This is a first step to working animVal support. More patches will follow that depend on this change.

        Remove "This file is part of the KDE project" from several files, change my old mail adress wildfox -> zimmermann,
        and remove vim modelines on all files I touched. No change in functionality, thus no new tests.

        * svg/SVGAElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGAltGlyphElement.h: Remove virtual contextElement() method.
        * svg/SVGAnimatedProperty.h:
        (WebCore::::synchronize):
        (WebCore::::startAnimation):
        (WebCore::::stopAnimation):
        * svg/SVGAnimationElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGCircleElement.h: Ditto.
        * svg/SVGClipPathElement.h: Ditto.
        * svg/SVGCursorElement.h: Ditto.
        * svg/SVGDefsElement.h: Ditto.
        * svg/SVGEllipseElement.h: Ditto.
        * svg/SVGExternalResourcesRequired.h: Remove pure-virtual contextElement() method.
        * svg/SVGFEImageElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGFELightElement.h: Remove virtual contextElement() method.
        * svg/SVGFEMergeNodeElement.h: Ditto.
        * svg/SVGFilterElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGFilterPrimitiveStandardAttributes.h: Remove virtual contextElement() method.
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox): Add Document* parameter - we used to fetch the Document pointer from the context element.
        (WebCore::SVGFitToViewBox::parseMappedAttribute): Ditto.
        * svg/SVGFitToViewBox.h: Remove pure-virtual contextElement() method.
        * svg/SVGFontElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGForeignObjectElement.h: Ditto.
        * svg/SVGGElement.h: Ditto.
        * svg/SVGGradientElement.h: Ditto.
        * svg/SVGImageElement.h: Ditto.
        * svg/SVGLineElement.h: Ditto.
        * svg/SVGMPathElement.h: Ditto. Fix license indention.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseMappedAttribute): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        * svg/SVGMarkerElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGMaskElement.h: Ditto.
        * svg/SVGPathElement.h: Ditto.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseMappedAttribute): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        * svg/SVGPatternElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::updateAnimatedSVGAttribute): synchronizeProperty<...>() has been renamed to PropertySynchronizer<...>::synchronize().
        * svg/SVGPolyElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGRectElement.h: Ditto.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        * svg/SVGSVGElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGScriptElement.h: Ditto.
        * svg/SVGSwitchElement.h: Ditto.
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::parseMappedAttribute): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        * svg/SVGSymbolElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGTRefElement.h: Remove virtual contextElement() method.
        * svg/SVGTextContentElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGTextPathElement.h: Remove virtual contextElement() method.
        * svg/SVGUseElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::parseMappedAttribute): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        * svg/SVGViewElement.h: Remove virtual contextElement() method. Change OwnerType of ANIMATED_* macros to this class.
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::setViewBoxString): Pass document() to SVGFitToViewBox::parseMappedAttribute().
        (WebCore::SVGViewSpec::parseViewSpec): Ditto.
        * svg/SVGViewSpec.h: Devirtualize contextElement() method, it's the only place where contextElement() remains needed.

2009-10-14  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Masking with wrong offset
        [https://bugs.webkit.org/show_bug.cgi?id=30325]

        SVGMaskElement moves the mask image graphics context to the wrong location.
        In objectBoundingBoxMode the maskDestRect gets translated. This transformation
        is not used in the later calculation. Fix by consistenly calculating the translation
        offsets from the final mask destination rect.

        Test: svg/custom/mask-with-default-value.svg

        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):

2009-10-14  Kevin Decker  <kdecker@apple.com>

        Rubberstamped by Jon Honeycutt.
        
        Export a few more showSubstituteImage() related methods.
        
        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:

2009-10-14  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Adler.

        Stringify CSS units manually (without printf) to make the formatting
        locale-insensitive and obey CSS spec with respect to large values.
        
        https://bugs.webkit.org/show_bug.cgi?id=18994

        * css/CSSPrimitiveValue.cpp:
        (WebCore::appendCSSDouble):
        (WebCore::formatWithUnits):
        (WebCore::CSSPrimitiveValue::cssText):

2009-10-14  Mark Seaborn  <mseaborn@google.com>

        Reviewed by Darin Adler.

        Check error return value in Perl build script
        https://bugs.webkit.org/show_bug.cgi?id=30316

        * css/makevalues.pl: Die if gperf fails.

2009-10-14  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG wrong filterRegions for userSpaceOnUse and percentage values
        [https://bugs.webkit.org/show_bug.cgi?id=30330]

        Some clean-up of the SVG filter calculation code. This clean-up
        also fixes the problem with percentage and userSpaceInUse mode.

        Test: svg/filters/subRegion-in-userSpace.svg

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        * platform/graphics/filters/FilterEffect.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::buildFilter):
        (WebCore::SVGFilterElement::canvasResource):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::setStandardAttributes):
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::SVGResourceFilter):
        (WebCore::SVGResourceFilter::~SVGResourceFilter):
        (WebCore::SVGResourceFilter::addFilterEffect):
        (WebCore::SVGResourceFilter::prepareFilter):
        * svg/graphics/SVGResourceFilter.h:
        (WebCore::SVGResourceFilter::create):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::SVGFilter):
        (WebCore::SVGFilter::calculateEffectSubRegion):
        (WebCore::SVGFilter::create):
        * svg/graphics/filters/SVGFilter.h:

2009-10-14  Chris Marrin  <cmarrin@apple.com>

        The last change fixed the problem, removing diagnostic printfs.

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2009-10-14  Kevin Ollivier  <kevino@theolliviers.com>

        CURL build fix for versions < 7.18.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setDefersLoading):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle):

2009-10-14  Chris Marrin  <cmarrin@apple.com>

        One more round of changes to figure out why the webgl 
        tests are crashing on the build bot. Here I am trying
        to see if we can create a software renderer. I am also
        printing the found pixel formats.

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2009-10-14  Yael Aharon  <yael.aharon@nokia.com>
 
        Reviewed by Simon Hausmann.
 
        Enabling NPAPI plugin support on Qt Webkit for S60 platform
        https://bugs.webkit.org/show_bug.cgi?id=29302

        Also implemented by Mahesh Kulkarni<mahesh.kulkarni@nokia.com>, 
        Rohini Ananth <rohini.ananth@nokia.com> and help from Norbert Lesr
        <norbert.leser@nokia.com>
         
        * WebCore.pro:
        Enabling ENABLE_NETSCAPE_PLUGIN_API for S60 and added S60 specific 
        new plugin files to be compiled under symbian: macro

        * bridge/npapi.h:
        Added NPEvent and NPRegion definition for Symbian

        * plugins/PluginPackage.h:
        Added S60 specific plugin interface and plugin loader variables
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::unload): Added !PLATFORM(SYMBIAN) macro.
        Default implementation to be used only for non-symbian platform
        * plugins/PluginDatabase.cpp:
        Macro !SYMBIAN checking
        * plugins/PluginView.h:
        Add Symbian to platforms that support setNPWindowIfNeeded
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect): Add Symbian to platforms that
        call setNPWindowRect from setFrameRect
         
        Added folder 'symbian' which contains implementation files for S60
        platform-specific NPAPI plugin functionality, under /plugins folder
        * plugins/symbian
        * plugins/symbian/npinterface.h:
        Plugin Interface to be implemented by S60 NPAPI plugins 
        * plugins/symbian/PluginContainerSymbian.h:
        * plugins/symbian/PluginContainerSymbian.cpp:
        * plugins/symbian/PluginDatabaseSymbian.cpp:
        * plugins/symbian/PluginViewSymbian.cpp:
        * plugins/symbian/PluginPackageSymbian.cpp:

2009-10-14  Chris Marrin  <cmarrin@apple.com>

        More changes to figure out why the webgl tests are crashing on the build bot.

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2009-10-14  Victor Wang  <victorw@chromium.org>

        Reviewed by David Hyatt.

        Round non-integer line height values.

        Change webkit to rounding non-integer line height values
        instead of truncating them. This fixes a layout test
        failure on Windows and matches the calculation in IE and Firefox. 

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

        Test: fast/css/line-height-rounding.html
              fast/forms/textarea-scrollbar-height.htm

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::computedLineHeight):

2009-10-13  Kelly Norton  <knorton@google.com>

        Reviewed by Pavel Feldman.

        Removes the persistent setting for InspectorTimelineAgent and renames timeline related
        interfaces to be more consistent with the JavaScript profiler.

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::startTimelineProfiler):
        (WebCore::InspectorBackend::stopTimelineProfiler):
        (WebCore::InspectorBackend::timelineProfilerEnabled):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        (WebCore::InspectorController::timelineProfilerEnabled):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::timelineProfilerWasStarted):
        (WebCore::InspectorFrontend::timelineProfilerWasStopped):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/TimelineAgent.js:
        (WebInspector.timelineProfilerWasStarted):
        (WebInspector.timelineProfilerWasStopped):

2009-10-01  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adele Peterson.

        Fix crash when loading invalid image data
        https://bugs.webkit.org/show_bug.cgi?id=29980

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):

2009-10-09  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Fix for NULL ptr deref in canvas's toDataURL().
        https://bugs.webkit.org/show_bug.cgi?id=30254

        Test: fast/canvas/canvas-toDataURL-crash.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toDataURL):

2009-10-14  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed, reverting r49558 since it broke profiler tests.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getProfileHeaders):
        (WebCore::InspectorBackend::getProfile):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::getProfileHeaders):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::createProfileHeader):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addProfileHeader):
        (WebCore::InspectorFrontend::didGetProfileHeaders):
        (WebCore::InspectorFrontend::didGetProfile):
        * inspector/InspectorFrontend.h:
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::ProfileNodeClass):
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView.profileCallback):
        (WebInspector.ProfileView):
        (WebInspector.ProfileView.prototype._mouseDownInDataGrid):
        (WebInspector.ProfileView.prototype._assignParentsInProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        * inspector/front-end/inspector.js:
        (WebInspector.addProfileHeader):

2009-10-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        ImageDecoderQt: Minor tweaks to the decoder

        - Only cache the data when we start to use it.
        - Start with a repetition count of none for normal images.
        - Do not use canRead as this will trigger parsing of the full image
        - Cope with a GIF failing to decode the first frame, do not
          set m_failed to true if decoding the first frame failed
        - Inform the QImageReader about the format that was detected
        - Always create a ImageDecoderQt when when we have more
        than four byte.


        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoder::create): Always create QImageReader for a significant speed up
        (WebCore::ImageDecoderQt::ImageDecoderQt): Initialize m_repetitionCount to cAnimationNone
        (WebCore::ImageDecoderQt::setData): Only call ImageDecoder::setData when everything has been received
        (WebCore::ImageDecoderQt::isSizeAvailable): Do not check m_failed twice.
        (WebCore::ImageDecoderQt::filenameExtension): Convert from QByteArray to String
        (WebCore::ImageDecoderQt::frameBufferAtIndex): Check for m_failed before trying to decode
        (WebCore::ImageDecoderQt::internalDecodeSize): Fail if the size is QSize()
        (WebCore::ImageDecoderQt::forceLoadEverything): Handle the case were decoding the first frame fails
        * platform/graphics/qt/ImageDecoderQt.h: Change the m_format type

2009-10-14  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Migrate profiles to the injected script-based schema.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getProfileHeaders):
        (WebCore::InspectorBackend::getProfile):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::getProfileHeaders):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::createProfileHeader):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addProfileHeader):
        (WebCore::InspectorFrontend::didGetProfileHeaders):
        (WebCore::InspectorFrontend::didGetProfile):
        * inspector/InspectorFrontend.h:
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::ProfileNodeClass):
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView.profileCallback):
        (WebInspector.ProfileView):
        (WebInspector.ProfileView.prototype._mouseDownInDataGrid):
        (WebInspector.ProfileView.prototype._assignParentsInProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        * inspector/front-end/inspector.js:
        (WebInspector.addProfileHeader):

2009-10-13  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Don't collect call frame properties until they're needed for completion.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getCompletions): if call frame id is specified and the expression is empty collect frame properties.
        (InjectedScript.CallFrameProxy.prototype._wrapScopeChain): don't send call frame properties until they're needed.
        * inspector/front-end/ScriptsPanel.js:

2009-10-13  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Ariya Hidayat.

        https://bugs.webkit.org/show_bug.cgi?id=29106
        [Qt] make CachedResourceHandle.h compile in winscw Symbian compiler.

        Don't inline constructor CachedResourceHandle<T>(R*) to stop winscw
        compiler aggressively resolve inheritance of class R.  
        
        The winscw compiler bug is reported at:
        https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=9812.
        
        The change should be reverted when the above bug is fixed in winscw compiler.

        * loader/CachedResourceHandle.h:
        (WebCore::::CachedResourceHandle):

2009-10-13  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r49554, because it broke Win and Chromium builds.
        http://trac.webkit.org/changeset/49554

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cssText):

2009-10-13  Evan Martin  <evan@chromium.org>

        Reviewed by Adam Barth.

        Stringify CSS units manually (without printf) to make the formatting
        locale-insensitive and obey CSS spec with respect to large values.
        
        https://bugs.webkit.org/show_bug.cgi?id=18994

        * css/CSSPrimitiveValue.cpp:
        (WebCore::appendCSSDouble):
        (WebCore::formatWithUnits):
        (WebCore::CSSPrimitiveValue::cssText):

2009-10-13  Evan Martin  <evan@chromium.org>

        Reviewed by David Levin.

        Make grippy lines vertical on horizontal scrollbars in Linux Chrome.
        While we're rebaselining scrollbars, fix an off by one in the vertical
        scrollbar rendering too.

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

        Tests: this is covered by every pixel test involving scrollbars.

        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):

2009-10-13  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Fix issue where clientX and clientY on MouseEvents were wrong when
        the page was zoomed and scrolled.

        Test: fast/events/clientXY-in-zoom-and-scroll.html

        * dom/MouseRelatedEvent.cpp:
        (WebCore::contentsX): Take page zoom into account.
        (WebCore::contentsY): Ditto.

2009-10-13  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Change the order of arguments on some of the user stylesheet/script functions.  Split the removal functions
        out into separate ones for scripts and stylesheets.

        * WebCore.base.exp:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserScriptFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        (WebCore::PageGroup::removeUserScriptsFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        * page/PageGroup.h:
        (WebCore::PageGroup::userScripts):
        (WebCore::PageGroup::userStyleSheets):

2009-10-13  Evan Martin  <evan@chromium.org>

        Reviewed by Dmitry Titov.

        Chrome's "Skia" theme paints select controls backwards in RTL.

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

        Test: fast/text/international/bidi-menulist.html
        (The test is about something else, but it includes RTL selects.)

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintMenuList): flip the arrow position in RTL case.

2009-10-13  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=30318
        ScriptExecutionContext is not anymore needed to create an EventListener - remove old code.
        It's a followup to r48884. It removed the need to pass the ScritpExecutionContext
        into EventListener constructor but did not remove the code pulling ScriptExecutionContext.

        Tests:
        Test adds event listener to a DocumentType Node which is created without a document
        and then dispatches the event after attaching a node to the tree. Event
        should fire when node is attached to the tree.

        * fast/events/add-event-without-document-expected.txt: Added.
        * fast/events/add-event-without-document.html: Added.

        All changes in files below are the same - remove the code that calls
        EventTarget::scriptExecutionContext and checks it for NULL.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotification::addEventListener):
        (WebCore::):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::addEventListener):
        (WebCore::JSWebSocket::removeEventListener):

2009-10-13  Drew Wilson  <atwilson@atwilson-macpro.local>

        Reviewed by David Levin.

        Enable SHARED_WORKERS for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=30289

        Cleaned up bitrot in SharedWorker V8 bindings.

        * WebCore.gypi:
        Removed default implementation of SharedWorkerRepository so Chromium can provide its own.
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        Added V8SharedWorkerContext.cpp.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        Added case statements for SHAREDWORKER and SHAREDWORKERCONTEXT.
        * bindings/v8/V8Index.cpp:
        Now includes V8SharedWorkerContext.h to allow supporting SharedWorkers.
        * bindings/v8/V8Index.h:
        Added definition for SHAREDWORKERCONTEXT wrapper.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        Added includes for SharedWorker.h and SharedWorkerContext.h.
        * bindings/v8/custom/V8CustomBinding.h:
        Reorganized Worker field indexes to be clearer, and fixed mismatch in worker field index.
        Also added field indexes for SharedWorkers.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_RUNTIME_ENABLER):
        Added runtime enabler for the SharedWorker constructor.
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Cleaned up bitrot (various APIs have changed since this file was written).
        * page/DOMWindow.idl:
        Added EnabledAtRuntime flag to window.SharedWorker.

2009-10-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=30345
        HTTP tests for credential handling fail on Tiger

        We cannot prevent NSURLConnection from doing its credentil handling on Tiger anyway; so
        let it do its work without intervention. Once again, we pass explicitly passed credentials
        in URL, fixing regressions from Safari 3.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):

2009-10-13  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Adam Barth.

        Bug 28964 -  [Chromium] ChromiumDataObject should have getter/setter interface

        Reworked and added to the getter/setter interface in ChromiumDataObject:
        - added contains...() methods to just query the state
        - added containsValid...URL() methods for URL data members
        - removed takeFileNames() as this was too type-dependent
        - changed return type of fileNames() to Vector<String>
        - added interface methods to allow appending to and iteration over file names

        No new tests (no functional behavior changed).

        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::containsMainURL):
        (WebCore::ChromiumDataObject::containsValidMainURL):
        (WebCore::ChromiumDataObject::containsMainURLTitle):
        (WebCore::ChromiumDataObject::containsTextPlain):
        (WebCore::ChromiumDataObject::containsTextHTML):
        (WebCore::ChromiumDataObject::containsHTMLBaseURL):
        (WebCore::ChromiumDataObject::containsValidHTMLBaseURL):
        (WebCore::ChromiumDataObject::containsContent):
        (WebCore::ChromiumDataObject::containsContentFileExtension):
        (WebCore::ChromiumDataObject::containsContentFileName):
        (WebCore::ChromiumDataObject::setContentFileName):
        (WebCore::ChromiumDataObject::containsFileNames):
        (WebCore::ChromiumDataObject::fileNames):
        (WebCore::ChromiumDataObject::clearFileNames):
        (WebCore::ChromiumDataObject::countFileNames):
        (WebCore::ChromiumDataObject::fileNameAt):
        (WebCore::ChromiumDataObject::setFileNames):
        (WebCore::ChromiumDataObject::appendToFileNames):
        (WebCore::ChromiumDataObject::popFileName):

2009-10-13  Simon Fraser  <simon.fraser@apple.com>

        Temporary debugging changes to figure out why the webgl tests are crashing on the build bot.

        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2009-10-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Visibility:visible inside a compositing layer doesn't make the element visible
        https://bugs.webkit.org/show_bug.cgi?id=30339
        
        When deciding if a layer had any renderable content, RenderLayerBacking::paintIntoLayer()
        only consulted hasVisibleContent(), which does not take into a account child layers which
        may be visible. We also have to consult hasVisibleDescendant() as well.

        Test: compositing/compositing-visible-descendant.html

        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasVisibleDescendant):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2009-10-13  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        Refactor ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH
        https://bugs.webkit.org/show_bug.cgi?id=30278

        Move the definition of ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH 
        from the make system into common code.

        Enable ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH if NETSCAPE_PLUGIN_API 
        support is not enabled.

        Remove notImplemented() from PluginPackageNone.cpp and 
        PluginDataNone.cpp make them just empty functions.

        * GNUmakefile.am:
        * WebCore.pro:
        * plugins/PluginDataNone.cpp:
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::refresh):
        * plugins/PluginPackageNone.cpp:
        (WebCore::PluginPackage::determineQuirks):
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):

2009-10-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=30150
        <rdar://problem/7283540> REGRESSION: Crash when accessing clipboardData.types

        Test: editing/pasteboard/crash-accessing-clipboardData-types.html

        * platform/mac/ClipboardMac.mm: (WebCore::addHTMLClipboardTypesForCocoaType): The String
        class doesn't have operator bool, it's operator NSString* that is invoked instead, and it
        converts null strings to non-null @"".

2009-10-13  Drew Wilson  <atwilson@atwilson-macpro.local>

        Reviewed by Dimitri Glazkov.

        window attributes (like localStorage) that are disabled at runtime are still visible
        https://bugs.webkit.org/show_bug.cgi?id=30240

        Adding codegen/bindings to support runtime disabling of attributes.

        No new tests (only supported by chrome currently)

        * bindings/scripts/CodeGeneratorV8.pm:
        Refactored the guts of GenerateBatchedAttributeData into a separate GenerateSingleBatchedAttribute with a passed-in indentation level to allow generating a single BatchedAttribute struct.
        Added support for the EnabledAtRuntime extended attribute, which generates a call to the appropriate XXXXEnabled() API before adding the attribute to the instance.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::batchConfigureAttributes):
        Refactored attribute setting code into a common inline routine.
        * bindings/v8/V8Proxy.h:
        (WebCore::configureAttribute):
        Inline function which configures a single attribute given a BatchedAttribute struct.
        * bindings/v8/custom/V8CustomBinding.h:
        Added (DECLARE_)ACCESSOR_RUNTIME_ENABLER to allow enabling attributes at runtime.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        Added code to enable window.Audio only if MediaPlayer.isAvailable() == true
        * page/DOMWindow.idl:
        Added [EnabledAtRuntime] extended attribute to the Audio attribute.

2009-10-13  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=27457
        Added support for static validation on type=email input elements as per
        HTML5 specs:
        http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state

        Test: fast/forms/ValidityState-typeMismatch-email.html

        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch): ValidityState.typeMismatch
        performs validation on type=email input elements now.
        (WebCore::ValidityState::isValidEmailAddress): simple validation method 
        * html/ValidityState.h:

2009-10-13  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Adam Barth.

        Event listeners installed on a window object returned from window.open() don't work
        https://bugs.webkit.org/show_bug.cgi?id=28716

        Tests: http/tests/security/window-events-clear-domain.html
               http/tests/security/window-events-clear-port.html
               http/tests/security/window-events-pass.html

        * dom/Document.cpp: Split code of Document::clear() in a way to avoid removing all
        window event handlers when implicitOpen is called. It is called in 2 cases - on
        committing loaded content (no need to clean handlers) and on document.open() (needs to remove handlers).

        (WebCore::Document::open): in addition to calling implicitOpen it also removes window
        event handlers, to preserve the behavior of document.open().

        (WebCore::Document::implicitOpen): includes the part of removed Document::clear() that
        does not remove window event handlers.

        * dom/Document.h: Removed clear().

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): add check to avoid removing window event handlers
        if we transition from temporary empty document to a loaded one.

        (WebCore::FrameLoader::didOpenURL): Remove closeURL() which was called twice when loading.
        (WebCore::FrameLoader::finishedLoadingDocument): add closeURL() to compensate for change above.

2009-10-13  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Pavel Feldman.

        Fix a leak in the inspector by calling didRemoveNode with
        an error code when it fails, instead of returning from the
        Backend.

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::removeNode):
        * inspector/front-end/ElementsTreeOutline.js:

2009-10-13  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30337>.
        Web Inspector: Should be able to delete nodes from the Elements Tree.
        
        When the delete key is pressed and a element is selected in the tree,
        the element should be deleted from the Elements Tree and the DOM.

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::removeNode):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didRemoveNode):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._updateModifiedNodes):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.handleKeyEvent):

2009-10-13  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fix REGRESSION(49479): Mouseover on resources graph doesn't show timings.
        
        Set pointer-events: none on the new overlay so mouseover events are passed
        to the resources graph so we can show timings.

        * inspector/front-end/inspector.css:

2009-10-13  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Plugins : Remove all traces of winId. Use ownerWidget() instead.
        
        This is a bug for two reasons:
        1. Everytime we use winId(), we end up creating a native widget. This causes an
        unnecessary copy of contents from the backing store to the native widget.
        2. Neither windowed nor windowless plugins require the winId of the QWebView or
        QGraphicsView.
        
        Introduce ownerWidget() which returns a QWidget * without creating a native widget
        (as opposed to QWidget::find(winId)).

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

        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepthPerComponent):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/qt/QWebPageClient.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::setSharedXEventFields):
        (WebCore::PluginView::initXEvent):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::platformStart):

2009-10-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build system fix. Typo in a filename.

        * GNUmakefile.am:

2009-10-12  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.
        Alter profile link format to enable multiple profile types
        https://bugs.webkit.org/show_bug.cgi?id=30253

        The new profile URL includes the profile type along with the
        profile title and uid.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        (WebCore::InspectorController::addStartProfilingMessageToConsole):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.linkifyStringAsFragment):

2009-10-12  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Fix same-named profiles grouping in the Profiles panel.

        The tree node re-parenting while adding a new group node was broken.
         
        https://bugs.webkit.org/show_bug.cgi?id=30299

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfile):

2009-10-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Enforce async interaction between inspector controller and frontend.

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

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

2009-10-12  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Sam Weinig.

        Fix issue caretRangeFromPoint() returns wrong result for a zoomed and 
        scrolled page.
        https://bugs.webkit.org/show_bug.cgi?id=30034

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint): calculate the correct point 
        relative to document when the page is zoomed and scrolled.
        (WebCore::Document::caretRangeFromPoint): calculate the correct point 
        relative to document when the page is zoomed and scrolled.

2009-10-12  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Sam Weinig.

        JavaScript bindings of WebSocket addEventListener/removeEventListener
        https://bugs.webkit.org/show_bug.cgi?id=29841

        Test: fast/websockets/websocket-event-target.html

        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::addEventListener):
        (WebCore::JSWebSocket::removeEventListener):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * websockets/WebSocket.idl:

2009-10-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29078
        <rdar://problem/7288221>

        Add a mechanism to blacklist certain codecs.  Initially, just blacklist UTF-7 as HTML5 encourages.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::pruneBlacklistedCodecs):
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):

2009-10-09  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Add support for the beforeload event to frames.  Complete support of the beforeload event by making sure
        its wrapper gets properly constructed (so that the URL field of the event can be accessed).  Add support
        for the Objective-C wrapper class as well.

        Added fast/dom/beforeload/frame-before-load.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMEvents.mm:
        (kitClass):
        * dom/BeforeLoadEvent.h:
        (WebCore::BeforeLoadEvent::isBeforeLoadEvent):
        * dom/Event.cpp:
        (WebCore::Event::isBeforeLoadEvent):
        * dom/Event.h:
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):

2009-10-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Fix <rdar://problem/7094146> Reproducible crash at
        RenderObject::localToAbsolute()

        Test: fast/dynamic/position-absolute-to-fixed-crash.html

        The crash was caused by stale positioned objects lists following an
        object transitioning from being absolutely position to being fixed
        positioned.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange): In case of a transition between
        absolute and fixed position, mark the parent as having a child needing
        layout, so that this object will get inserted into its new container's
        positioned objects list.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange): Changed a condition to cover
        this transition, so that this object gets removed from its current
        container's positioned objects list.

2009-10-12  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Add a palette() method that is needed by our RenderTheme.

        * platform/qt/QWebPageClient.h:

2009-10-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Gradients can't handle percentage values in userSpaceOnUse mode
        [https://bugs.webkit.org/show_bug.cgi?id=30286]

        Fixed *GradientAttributes to take SVGLength instead of double. This casues
        the problem, that we can't calculate the correct size of a gradient on
        userSpaceOnUse mode with percentage values.

        Test: svg/custom/gradient-userSpaceOnUse-with-percentage.svg

        * svg/LinearGradientAttributes.h:
        (WebCore::LinearGradientAttributes::LinearGradientAttributes):
        (WebCore::LinearGradientAttributes::x1):
        (WebCore::LinearGradientAttributes::y1):
        (WebCore::LinearGradientAttributes::x2):
        (WebCore::LinearGradientAttributes::y2):
        (WebCore::LinearGradientAttributes::setX1):
        (WebCore::LinearGradientAttributes::setY1):
        (WebCore::LinearGradientAttributes::setX2):
        (WebCore::LinearGradientAttributes::setY2):
        * svg/RadialGradientAttributes.h:
        (WebCore::RadialGradientAttributes::RadialGradientAttributes):
        (WebCore::RadialGradientAttributes::cx):
        (WebCore::RadialGradientAttributes::cy):
        (WebCore::RadialGradientAttributes::r):
        (WebCore::RadialGradientAttributes::fx):
        (WebCore::RadialGradientAttributes::fy):
        (WebCore::RadialGradientAttributes::setCx):
        (WebCore::RadialGradientAttributes::setCy):
        (WebCore::RadialGradientAttributes::setR):
        (WebCore::RadialGradientAttributes::setFx):
        (WebCore::RadialGradientAttributes::setFy):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::buildGradient):
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::buildGradient):
        (WebCore::SVGRadialGradientElement::collectGradientProperties):

2009-10-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30315>.
        Web Inspector: DOM Content and Load lines in Resources are unclear what they mean.
        
        Add tooltip text to the Load event and DOM Content event lines through
        a new layer that allows these lines to be on top of the view.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._updateGraphDividersIfNeeded):
        (WebInspector.ResourcesPanel.prototype._updateDividersLabelBarPosition):
        * inspector/front-end/inspector.css:

2009-10-12  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r49429, because it broke layout tests.
        http://trac.webkit.org/changeset/49429

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::~V8AbstractEventListener):

2009-10-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        SVG - crash on feMerge when input not available
        [https://bugs.webkit.org/show_bug.cgi?id=30297]

        Make a early return in SVGFEMergeElement if the needed
        filter effect doesn't exist.

        Test: svg/filters/feMerge-wrong-input.svg

        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):

2009-10-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Added automatic flush before compositing
        https://bugs.webkit.org/show_bug.cgi?id=30236

        This causes image to always render correctly. In writing a testcase
        I needed to implement readPixels. This exposed a bug in reading back
        values from a CanvasArray subclass, so I fixed that as well. Now when
        you wrap a CanvasArray in a JSValue it actually wraps the specific
        subclass. To do this I need to add virtual methods to each CanvasArray
        subclass to determine the type and a custom toJS method for CanvasArray
        to create the proper wrapper. 

        Test: fast/canvas/webgl/triangle.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasArrayCustom.cpp:
        (WebCore::toJS):
        * html/canvas/CanvasArray.h:
        (WebCore::CanvasArray::isByteArray):
        (WebCore::CanvasArray::isUnsignedByteArray):
        (WebCore::CanvasArray::isShortArray):
        (WebCore::CanvasArray::isUnsignedShortArray):
        (WebCore::CanvasArray::isIntArray):
        (WebCore::CanvasArray::isUnsignedIntArray):
        (WebCore::CanvasArray::isFloatArray):
        * html/canvas/CanvasArray.idl:
        * html/canvas/CanvasByteArray.h:
        (WebCore::CanvasByteArray::isByteArray):
        * html/canvas/CanvasFloatArray.h:
        (WebCore::CanvasFloatArray::isFloatArray):
        * html/canvas/CanvasIntArray.h:
        (WebCore::CanvasIntArray::isIntArray):
        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::readPixels):
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasRenderingContext3D.idl:
        * html/canvas/CanvasShortArray.h:
        (WebCore::CanvasShortArray::isShortArray):
        * html/canvas/CanvasUnsignedByteArray.h:
        (WebCore::CanvasUnsignedByteArray::isUnsignedByteArray):
        * html/canvas/CanvasUnsignedIntArray.h:
        (WebCore::CanvasUnsignedIntArray::isUnsignedIntArray):
        * html/canvas/CanvasUnsignedShortArray.h:
        (WebCore::CanvasUnsignedShortArray::isUnsignedShortArray):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/Canvas3DLayer.mm:
        (-[Canvas3DLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::readPixels):

2009-10-12  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=30307
        
        Fix 0 sentinel for g_object_set() function call.

        * platform/graphics/gtk/DataSourceGStreamer.cpp:
        (webkit_data_src_uri_set_uri):
        0 is passed as 32 bit value on x86-64 in vararg functions, but
        g_object_set() expects a 64 bit 0. This will cause crashes.

2009-10-12  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Drop in="" from <feFlood>
        https://bugs.webkit.org/show_bug.cgi?id=29001

        This makes <feFlood in="bogus"> have an effect, too.

        http://www.w3.org/2003/01/REC-SVG11-20030114-errata#feflood-attribute

        Test: svg/dom/feFlood-no-in1.html

        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::SVGFEFloodElement):
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFloodElement.idl:
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::FEFlood):
        (WebCore::FEFlood::create):
        * svg/graphics/filters/SVGFEFlood.h:

2009-10-12  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=29998
        
        Scale video to completely fill the target surface while
        keeping the aspect ratio. This fixes displaying of the
        YouTube HTML5 sample website.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        Scale video to completely fill the target surface, keep
        the aspect ratio and center it.

2009-10-12  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=29997
        
        Fixes double memcpy of all rendered video frames.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateRepaintCallback):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::duration):
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_timeout_func):
        (webkit_video_sink_dispose):
        (unlock_buffer_mutex):
        (webkit_video_sink_unlock):
        (marshal_VOID__MINIOBJECT):
        (webkit_video_sink_class_init):
        (webkit_video_sink_new):
        * platform/graphics/gtk/VideoSinkGStreamer.h:
        Directly pass the buffers up to the MediaPlayerPrivate::paint()
        method instead of rendering them first to an intermediate cairo
        surface. This should increase performance and peak memory usage.

2009-10-11  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=30242
        
        Fixes an issue where JavaScript URLs that are URL-encoded twice can 
        bypass the XSSAuditor.
        
        JavaScript URLs that are completed by method Document::completeURL have added
        URL-encoded characters such that a direct comparison with the URL-decoded 
        outgoing HTTP parameters is not sufficient. Instead, the URL-decoded outgoing 
        HTTP parameters must be URL-decoded before comparison.

        Tests: http/tests/security/xssAuditor/iframe-javascript-url-twice-url-encode.html
               http/tests/security/xssAuditor/iframe-javascript-url-twice-url-encode2.html
               http/tests/security/xssAuditor/iframe-javascript-url-twice-url-encode3.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL): Modified to pass XSSAuditor
        the URL-decoded source code for the JavaScript URL.
        * page/XSSAuditor.cpp:
        (WebCore::isIllegalURICharacter): Minor syntactical change to the comment.
        (WebCore::XSSAuditor::CachingURLCanonicalizer::canonicalizeURL): Added 
        parameter decodeURLEscapeSequencesTwice.
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::decodeURL): Ditto.
        (WebCore::XSSAuditor::findInRequest): Ditto.
        * page/XSSAuditor.h:
        (WebCore::XSSAuditor::CachingURLCanonicalizer::CachingURLCanonicalizer): Ditto.

2009-10-11  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Barth.

        Fixes a build break in the V8 bindings caused by revision 49420.
        https://bugs.webkit.org/show_bug.cgi?id=30294

        Revision 49420 introduces an IDL-defined CanvasActiveInfo
        type. This causes a build break in the V8 bindings where
        CanvasGraphicsContext3D naively refers to CanvasActiveInfo as a
        non-ref type.

        * WebCore.gypi: Include CanvasActiveInfo.idl in build.
        * bindings/scripts/CodeGeneratorV8.pm: CanvasActiveInfo is a ref
          ptr type.
        * bindings/v8/DOMObjectsInclude.h: Include generated
          CanvasActiveInfo files.
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-10-11  Collin Jackson  <collinj@webkit.org>

        Reviewed by Adam Barth.

        Log mixed content warnings to console

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

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkIfDisplayInsecureContent):
        (WebCore::FrameLoader::checkIfRunInsecureContent):

2009-10-11  Søren Gjesse  <sgjesse@chromium.org>

        Reviewed by Adam Barth.

        [V8] Add a context scope in JS listener destructor. The destructor code uses the cotext. See http://crbug.com/24200.
        https://bugs.webkit.org/show_bug.cgi?id=30250

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::~V8AbstractEventListener):

2009-10-11  Lyon Chen  <lyon.chen@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Correct the position of #endif sentence inside WebCore::Document::finishedParsing().

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

        This change requires no test case as it fix a compiling error.

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

2009-10-11  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Barth.

        Sets a 500K stack limit for JavaScript workers in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=29797

        Runaway recursion in JavaScript workers crashes the Chromium
        worker process on OS X. This is because V8's default stack limit
        is 512K on ia32 or 1M on x64, but the worker process runs workers
        on a thread with the OS X default stack size--512K. Because there
        are already some C+frames on the stack when V8 establishes its
        512K default stack limit, and V8 doesn't precisely enforce the
        stack limit, runaway recursion in V8 workers overflows the OS
        stack and segfaults, killing the worker process. This is described
        in Chromium bug 21653 <http://crbug.com/21653>.

        This patch sets the V8 stack limit for worker JavaScript in
        Chromium to a more conservative 500K on all platforms. This allows
        some "headroom" for the C+stack in use when the limit is set up,
        and some "legroom" for the V8 helper functions which in practice
        briefly flout the V8 stack limit.

        Test: LayoutTests/fast/workers/use-machine-stack.html

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initV8IfNeeded):
        * bindings/v8/WorkerContextExecutionProxy.h:

2009-10-11  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for wxMac 2.9, use wxGC API for measuring text.

        * platform/wx/wxcode/mac/carbon/fontprops.cpp:
        (GetTextExtent):

2009-10-10  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Sam Weinig.

        Allow [Reflect] on SVG elements.
        https://bugs.webkit.org/show_bug.cgi?id=28936

        Update the JS binding generators to reference SVGNames instead of
        HTMLNames, if [Reflect]ing an attribute on an SVG element.  Make
        SVGElement::id use [Reflect].

        Also make [Reflect] on an attribute with a setter exception work in ObjC
        bindings.

        Test: svg/dom/id-reflect.html

        * bindings/scripts/CodeGenerator.pm: Add a function to determine the
        appropriate C+namespace for attribute name constants.
        * bindings/scripts/CodeGeneratorObjC.pm: Generate ExceptionCode handling
        code for [Reflect] on an attribute with a setter exception.
        * bindings/scripts/CodeGeneratorCOM.pm: Generate "SVGNames" instead of
        "HTMLNames" when appropriate.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * svg/SVGElement.cpp: Remove getter and setter methods for id.
        * svg/SVGElement.h: Ditto.
        * svg/SVGElement.idl: Add [Reflect] to id.

2009-10-10  Oliver Hunt  <oliver@apple.com>

        Fix paths in xcode.

        * WebCore.xcodeproj/project.pbxproj:

2009-10-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric Carlson.

        Implement getActiveAttrib and getActiveUniform
        https://bugs.webkit.org/show_bug.cgi?id=30276

        Implements the getActiveAttrib and getActiveUniform APIs.
        Rather simple patch, adds CanvasActiveInfo definition and implementation
        and adds forwarding to the GraphicsContext3D.

        Test: fast/canvas/webgl/getActiveTest.html

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasActiveInfo.h: Added.
        (WebCore::CanvasActiveInfo::create):
        (WebCore::CanvasActiveInfo::name):
        (WebCore::CanvasActiveInfo::type):
        (WebCore::CanvasActiveInfo::size):
        (WebCore::CanvasActiveInfo::CanvasActiveInfo):
        * html/canvas/CanvasActiveInfo.idl: Added.
        * html/canvas/CanvasObject.h:
        (WebCore::CanvasObject::context):
          Need to make the context public as it is needed to ensure we don't
          provide a program from one context as an argument to another.
        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::getActiveAttrib):
        (WebCore::CanvasRenderingContext3D::getActiveUniform):
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasRenderingContext3D.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):

2009-10-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Adding new attributes in Element Panel is
        counterintuitive.

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

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._onmousemove):
        (WebInspector.ElementsTreeElement.prototype.set hovered):
        (WebInspector.ElementsTreeElement.prototype.toggleNewAttributeButton):

2009-10-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        Build fix if Netscape plugin support is turned off
        https://bugs.webkit.org/show_bug.cgi?id=30275

        In addition to fixing the build break with guards
        remove notImplemented() from PluginViewNone.cpp and
        make them just just be empty functions.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::handleEvent):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::updatePluginWidget):

2009-10-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Build fix for QtWebKit after r49415.

        Add HistoryController.cpp to the build.

        * WebCore.pro:

2009-10-09  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] KURLGoogle's protocolIs barfs on input containing hyphens
        https://bugs.webkit.org/show_bug.cgi?id=30262

        This is not testable from WebKit since WebKit never uses the member
        function form of protocolIs with input that can be controlled from a
        web page.  It always passes string literals lacking hyphens.

        * platform/KURLGoogle.cpp:
        (WebCore::lowerCaseEqualsASCII): Only assert if toASCIILower would
        transform the input character.

2009-10-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Oliver Hunt.

        Move HistoryController to its own file
        https://bugs.webkit.org/show_bug.cgi?id=30272

        Purely mechanical.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/HistoryController.cpp: Added.
        * loader/HistoryController.h: Added.

2009-10-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        ApplyStyleCommand removes presentational tags even when not necessary
        https://bugs.webkit.org/show_bug.cgi?id=28091

        This patch updates implicitlyStyledElementShouldBeRemovedWhenApplyingStyle to return true
        (triggering removal of tag) only if the style implicitly added by the element is not present in
        the new style to apply. It also changes surroundNodeRangeWithElement so that it merges the
        surrounding element when possible. applyTextDecorationStyle is modified so that it does not add
        style span when the style attribute is empty.

        Test: editing/execCommand/toggle-style-3.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::shouldRemoveTextDecorationTag): Returns true if specified text
        decoration is not present in the style to apply
        (WebCore::ApplyStyleCommand::implicitlyStyledElementShouldBeRemovedWhenApplyingStyle): No longer
        returns true if the tag is used in new style
        (WebCore::ApplyStyleCommand::applyTextDecorationStyle): Does not add style-span when redundant
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement): Merges the newly created element
        with the surrounding identical elements
        * editing/ApplyStyleCommand.h:

2009-10-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor HistoryController out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30246

        HistoryController is in charge of managing the current / previous /
        provisional HistoryItems.  The split isn't perfect, but it's a place to
        start.  I'll move HistoryController into its own file in another patch.

        * WebCore.base.exp:
        * loader/FrameLoader.cpp:
        (WebCore::HistoryController::HistoryController):
        (WebCore::HistoryController::~HistoryController):
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::closeURL):
        (WebCore::FrameLoader::begin):
        (WebCore::HistoryController::restoreDocumentState):
        (WebCore::HistoryController::setCurrentItem):
        (WebCore::HistoryController::setProvisionalItem):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        (WebCore::FrameLoader::scrollToAnchor):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::HistoryController::updateForFrameLoadCompleted):
        (WebCore::FrameLoader::frameLoadCompleted):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::HistoryController::addHistoryItemForFragmentScroll):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        (WebCore::FrameLoader::shouldTreatURLAsSameAsCurrent):
        (WebCore::HistoryController::createHistoryItem):
        (WebCore::FrameLoader::checkDidPerformFirstNavigation):
        (WebCore::HistoryController::addBackForwardItemClippedAtTarget):
        (WebCore::HistoryController::createHistoryItemTree):
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        (WebCore::HistoryController::invalidateCurrentItemCachedPage):
        (WebCore::HistoryController::saveDocumentState):
        (WebCore::FrameLoader::loadItem):
        (WebCore::HistoryController::urlsMatchItem):
        (WebCore::HistoryController::goToItem):
        (WebCore::HistoryController::recursiveGoToItem):
        (WebCore::HistoryController::childFramesMatchItem):
        (WebCore::HistoryController::updateForStandardLoad):
        (WebCore::HistoryController::updateForClientRedirect):
        (WebCore::HistoryController::updateForBackForwardNavigation):
        (WebCore::HistoryController::updateForReload):
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList):
        (WebCore::HistoryController::updateForCommit):
        (WebCore::HistoryController::updateForAnchorScroll):
        (WebCore::HistoryController::saveDocumentAndScrollState):
        (WebCore::HistoryController::setCurrentItemTitle):
        (WebCore::FrameLoader::didChangeTitle):
        * loader/FrameLoader.h:
        (WebCore::HistoryController::current):
        (WebCore::HistoryController::provisional):
        (WebCore::FrameLoader::policyChecker):
        (WebCore::FrameLoader::history):
        (WebCore::FrameLoader::creatingInitialEmptyDocument):
        * page/Page.cpp:
        (WebCore::Page::goToItem):

2009-10-09  Alexey Proskuryakov  <ap@apple.com>

        Unreviewed - fixing an obvious typo in my previous check-in.

        https://bugs.webkit.org/show_bug.cgi?id=30260
        <rdar://problem/6447115> REGRESSION: Logging out from SAP doesn't work

        Fixes existing tests (which I thought I had run the previous time).

        * platform/network/CredentialStorage.cpp: (WebCore::originsWithCredentials): Return the
        set by reference.

2009-10-09  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        [v8] Need change to V8WorkerContextEventListener::reportError signature to match the base class.
        https://bugs.webkit.org/show_bug.cgi?id=30264

        The base class method changed in r48884.

        Test: fast/worker/worker-script-error.html

        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::reportError):
        * bindings/v8/V8WorkerContextEventListener.h:

2009-10-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=30260
        <rdar://problem/6447115> REGRESSION: Logging out from SAP doesn't work

        Tests: http/tests/xmlhttprequest/logout.html
               http/tests/xmlhttprequest/re-login-async.html
               http/tests/xmlhttprequest/re-login.html

        Fix several issues with existing credential handling code.

        * platform/network/CredentialStorage.cpp:
        (WebCore::pathToDefaultProtectionSpaceMap): Changed the data structure to a simpler one.
        (WebCore::originsWithCredentials): The reason for two-stage lookup above was that we didn't
        want to iterate paths for origins that never had credentials associated with them. Changed
        to use a separate HashSet for this.
        (WebCore::pathToDefaultProtectionSpaceMap): The concept of default per-path credentials didn't
        match the spec very well. UAs are supposed to deduce protection space from an URL, and then
        use whichever credentials are known for this protection space. So, OriginToDefaultBasicCredentialMap
        is now PathToDefaultProtectionSpaceMap.
        (WebCore::protectionSpaceMapKeyFromURL): Factored out a helper that extracts a directory
        URL from a given URL. These directory URLs are what we use as keys in PathToDefaultProtectionSpaceMap.
        (WebCore::CredentialStorage::set): Updated for above changes.
        (WebCore::findDefaultProtectionSpaceForURL): Factored out code iterating path length to find
        a prefix in OriginToDefaultBasicCredentialMap.
        (WebCore::CredentialStorage::set): Another version of set() can update credentials for a
        URL default protection space. It does nothing if the given URL doesn't correspond to a known
        protection space.
        (WebCore::CredentialStorage::get): Renamed from getDefaultAuthenticationCredential.

        * platform/network/CredentialStorage.h: Made the distinction between methods that use a known
        protection space and those that deduce one from URL more clear.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start): Update credentials before starting the request for real.
        This makes the following pattern work:
          var req = new XMLHttpRequest("GET", "logout.html", "logout", "logout"); // wrong credentials
          req.send("");
          req.abort();
        Abort() is used here to avoid having UA present an auth dialog after getting a 401 response.
        Note that one cannot log in using the same method, because there isn't a known protection
        space for the URL yet in that case, so the added code has no effect.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Use a correct persistence for
        calling receivedCredential(). This fixes logging in using an async XHR (withut abort(), of
        course), and matches sync case.
        (+[WebCoreSynchronousLoader loadRequest:allowStoredCredentials:returningResponse:error:]):
        Renamed getDefaultAuthenticationCredential() to get().

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::WebCoreSynchronousLoader::load):
        Same changes as in Mac code.

2009-10-09  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Undoing a indent removes text instead of it's formatting.
        <rdar://problem/7169206>
        https://bugs.webkit.org/show_bug.cgi?id=28722
        Restored the behavior prior to http://trac.webkit.org/changeset/46143. This change implemented the
        indent command making simple DOM operation, without using moveParagraph which cause undo to be broken.
        
        Added editing/undo/undo-indent.html test.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::prepareBlockquoteLevelForInsertion): Restored. 
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): Merged changes.
        (WebCore::IndentOutdentCommand::indentIntoBlockquote): Restored.
        (WebCore::IndentOutdentCommand::indentRegion): Restored and added call to updateLayout to
        ensure TextIterator could correctly calculate the position starting from the index.
        * editing/IndentOutdentCommand.h: Restored.

2009-10-09  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Adler.
        
        Optimization: Many StringImpl transformations are no-ops and should just return 'this'
        https://bugs.webkit.org/show_bug.cgi?id=30186

        Optimized StringImpl methods lower(), stripWhiteSpace() and simplifyWhiteSpace() to
        detect no-ops and return this instead of creating a new instance.
        Empirical testing shows that the majority of calls to these methods are no-ops, making
        this worthwhile even if (in the case of lower()) the non-no-op case is slightly slowed.
        Upper() is very rarely a no-op, so it wasn't worthwhile to optimize it.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::lower):
        (WebCore::StringImpl::upper): Just add a comment explaining why this wasn't optimized
        (WebCore::StringImpl::stripWhiteSpace):
        (WebCore::StringImpl::simplifyWhiteSpace):

2009-10-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG Filter feGaussianBlur implementation is missing
        [https://bugs.webkit.org/show_bug.cgi?id=28141]

        This is the implementation of GaussianBlur filter for SVG.

        There is already a test for feGaussianBlur
        Test: svg/W3C-SVG-1.1/filters-gauss-01-b-w3c.svg 

        Test: svg/filters/feGaussianBlur.svg

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::isAlphaImage):
        (WebCore::FilterEffect::setIsAlphaImage):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::apply):
        * svg/graphics/filters/SVGFEGaussianBlur.cpp:
        (WebCore::boxBlur):
        (WebCore::FEGaussianBlur::apply):

2009-10-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] QoS support in the video sink
        https://bugs.webkit.org/show_bug.cgi?id=29959

        Removed the async buffer queue from the sink. Synchronize the
        render method of the sink using a g_timeout_add() combined with a
        gcond triggered when the buffer has been rendered.
        Also fixed the video sink reference handling in the player, now
        that the idle is not there anymore to mess up things.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_init):
        (webkit_video_sink_timeout_func):
        (webkit_video_sink_render):
        (webkit_video_sink_dispose):
        (unlock_buffer_mutex):
        (webkit_video_sink_unlock):
        (webkit_video_sink_stop):
        (webkit_video_sink_class_init):

2009-10-09  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        feMorphology filter is not implemented
        [https://bugs.webkit.org/show_bug.cgi?id=5863]

        Adds SVGFEMorphologyElement, for the SVG filter. It also fixes a bug
        with the attribute "operator". It was only accessible via "_operator" 
        on JavaScript.

        Test: svg/dom/operatorAttribute.xhtml

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.SVG.Filters.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMSVG.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * page/DOMWindow.idl:
        * svg/SVGAllInOne.cpp:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEMorphologyElement.cpp: Added.
        (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
        (WebCore::SVGFEMorphologyElement::~SVGFEMorphologyElement):
        (WebCore::SVGFEMorphologyElement::setRadius):
        (WebCore::SVGFEMorphologyElement::parseMappedAttribute):
        (WebCore::SVGFEMorphologyElement::build):
        * svg/SVGFEMorphologyElement.h: Added.
        * svg/SVGFEMorphologyElement.idl: Added.
        * svg/graphics/filters/SVGFEMorphology.cpp:
        (WebCore::operator<<):
        * svg/graphics/filters/SVGFEMorphology.h:
        (WebCore::):
        * svg/svgtags.in:

2009-10-09  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix Chromium breakage.

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

        * inspector/front-end/inspector.js:
        (WebInspector.addCookieDomain): check that Storage panel is present before calling its methods.

2009-10-09  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Added pure virtual methods setInputMethodEnabled and setInputMethodHint to QWebPageClient

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

        * platform/qt/QWebPageClient.h:

2009-10-08  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Implement beforeload for images.  ImageLoadEventSender has been refactored into a more generic
        ImageEventSender that can be used by both load and beforeload events.  If the document has any
        beforeload listeners, then the installation of images onto the renderer becomes asynchronous
        and will be held up until the beforeload event can fire at a later date.

        Both beforeload and load events now fire at the end of the tokenizer write() methods, so that
        in the typical parsing case we don't have to put off the beforeload/load events until after
        a layout or paint might already have happened.  This lets beforeload/load not cause extra
        layouts and repaints.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::dispatchBeforeLoadEvent):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        (WebCore::Document::):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::write):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::attach):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * loader/ImageLoader.cpp:
        (WebCore::ImageBeforeLoadEventSender::ImageBeforeLoadEventSender):
        (WebCore::ImageLoadEventSender::ImageLoadEventSender):
        (WebCore::beforeLoadEventSender):
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::setImage):
        (WebCore::ImageLoader::setLoadingImage):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        (WebCore::ImageLoader::dispatchPendingEvents):
        (WebCore::ImageEventSender::ImageEventSender):
        (WebCore::ImageEventSender::dispatchEventSoon):
        (WebCore::ImageEventSender::cancelEvent):
        (WebCore::ImageEventSender::dispatchPendingEvents):
        (WebCore::ImageEventSender::timerFired):
        * loader/ImageLoader.h:
        (WebCore::ImageLoader::haveFiredBeforeLoadEvent):
        * wml/WMLImageElement.cpp:
        (WebCore::WMLImageElement::attach):

2009-10-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        Web Inspector: Wrap Database into ScriptObject in v8 bindings.

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

        No tests due to no Script* test infrastructure.

        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):

2009-10-09  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless Plugins : Fix crash when using QWebPage without QWebView.
        
        'client' is 0 when we have no view.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paint):

2009-10-09  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Plugins : Add missing setCurrentPlugin(0)

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::dispatchNPEvent):

2009-10-09  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] beforeload event does not fire on script elements in XML
        https://bugs.webkit.org/show_bug.cgi?id=30235

        r49194 was lacking a change to XMLTokenizerQt.cpp, equivalent to the one
        made in XMLTokenizerLibxml2.cpp.

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

2009-10-09  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's CSSParserValueList
        https://bugs.webkit.org/show_bug.cgi?id=30249

        Inherits CSSParserValueList class from FastAllocBase because it has 
        been instantiated by 'new' in WebCore/css/CSSGrammar.y:1271.

        * css/CSSParserValues.h:

2009-10-09  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless Plugins : Create Pixmap only when size changes.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):

2009-10-08  Jon Honeycutt  <jhoneycutt@apple.com>

        Remove the WebKitPluginHalterEnabledPreferenceKey in favor of checking
        for the existence of a PluginHalterDelegate.

        This fixes a leak of WebPluginHalterClients:
        https://bugs.webkit.org/show_bug.cgi?id=30119.

        Reviewed by Dan Bernstein.

        * WebCore.base.exp:
        Removed the export of WebCore::Settings::setPluginHalterEnabled().

        * loader/EmptyClients.h:
        (WebCore::EmptyPluginHalterClient::enabled):

        * page/Page.cpp:
        (WebCore::Page::Page):
        Remove initialization of m_pluginHalterClient, which was removed. If a
        non-null PluginHalterClient was passed, create the PluginHalter, and
        set its allowed run time.

        * page/Page.h:
        Removed pluginHalterEnabledStateChanged() and m_pluginHalterClient.

        * page/PluginHalter.cpp:
        (WebCore::PluginHalter::didStartPlugin):
        Check whether the PluginHalterClient is enabled.
        (WebCore::PluginHalter::didStopPlugin):
        Ditto.

        * page/PluginHalter.h:
        Made m_client an OwnPtr.

        * page/PluginHalterClient.h:
        Added a function to return the enabled state.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        Remove initialization of removed member.

        * page/Settings.h:
        Removed settings for the enabled state of the PluginHalter; we now use
        the existence of a WebPluginHalterDelegate to determine whether the
        PluginHalter is enabled.

2009-10-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move executeScript from FrameLoader to ScriptController
        https://bugs.webkit.org/show_bug.cgi?id=30200

        These methods have virtually no interaction with FrameLoader.  They
        really seem like they ought to belong to ScriptController.

        * WebCore.base.exp:
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::executeScript):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        (WebCore::ScriptController::evaluate):
        * bindings/js/ScriptController.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::executeScript):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/v8/ScriptController.h:
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::notifyFinished):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::parseEndElement):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptExecution):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::requestFrame):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::replaceDocument):
        * loader/FrameLoader.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest):

2009-10-08  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: added missing #include.

        * ForwardingHeaders/runtime/StructureChain.h: Copied from WebCore/ForwardingHeaders/runtime/PropertyNameArray.h.

2009-10-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30237>.
        DOM Content and Load lines aren't shown if a page is loaded when the inspector is up.
        
        Make sure to call update script object if we have an InspectorFrontend to
        call it on when we get one of the new events.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorController::mainResourceFiredLoadEvent):

2009-10-08  Geoffrey Garen  <ggaren@apple.com>

        Build fix: updated for removal of Structure::markAggregate().

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):

2009-10-08  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Adler.

        Make AtomicString create its StringImpl via create(), not the constructor,
        so it gets allocated in a single heap block, saving memory and CPU cycles.
        This eliminates two StringImpl constructors, making the remaining ones
        unambiguous, so the "AdoptBuffer" parameter is no longer needed.
        Added const attribute to UChar* in StringImpl constructor, eliminating the
        need for several const_casts in calls to it.
        StringImpl also unfriends AtomicString (OMG drama!!!)
        https://bugs.webkit.org/show_bug.cgi?id=30141

        * platform/text/AtomicString.cpp:
        (WebCore::CStringTranslator::translate): Call StringImpl::create().
        (WebCore::UCharBufferTranslator::translate): Ditto.
        (WebCore::HashAndCharactersTranslator::translate): Ditto.
        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl): Remove unnecessary AdoptBuffer param.
        (WebCore::StringImpl::adopt): Ditto.
        (WebCore::StringImpl::createUninitialized): Ditto.
        (WebCore::StringImpl::create): Ditto.
        (WebCore::StringImpl::crossThreadString): Ditto.
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::setHash): Used by AtomicString when creating StringImpls.

2009-10-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove the shouldLoadMediaElementURL frame loader client function.

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

2009-10-08  John Gregg  <johnnyg@google.com>

        Reviewed by Dimitri Glazkov.

        SVGURIReference Build problem for V8.  An additional stale reference to SVGURIReference bindings
        which wasn't exposed until a clean build.
        https://bugs.webkit.org/show_bug.cgi?id=30217

        No new tests, just a build fix.

        * bindings/v8/V8Index.cpp:

2009-10-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Sort XCode project file.

        * WebCore.xcodeproj/project.pbxproj:

2009-10-08  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        unselectable resources in resource panel
        https://bugs.webkit.org/show_bug.cgi?id=30079

        manual test added
        
        Also changed the way DnD for resources in the Resources panel is 
        handled.

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.onattach):
        (WebInspector.ResourceSidebarTreeElement.prototype.ondragstart):
        * manual-tests/inspector/duplicate-resource-urls.html: Added.

2009-10-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30233>
        Local Storage and Cookies show Blank Titles on Local Files.

        If a local storage or cookies sidebar item has no domain, set the 
        title to "Local Files", because that is what it represents.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/StoragePanel.js:
        (WebInspector.DOMStorageSidebarTreeElement.prototype.get mainTitle):
        (WebInspector.CookieSidebarTreeElement.prototype.get mainTitle):
        (WebInspector.CookieSidebarTreeElement.prototype.set mainTitle):

2009-10-08  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        Fix failing media layout tests.  Don't make beforeload block loads of objects that aren't in the
        document, since video/audio (and images eventually too) can load when not in the document yet.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::dispatchBeforeLoadEvent):

2009-10-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        Move SVGFitToViewBox ANIMATED_* macros in classes that inherit from it
        https://bugs.webkit.org/show_bug.cgi?id=30230

        This patch also devirtualizes viewBoxToViewTransform(), is it's superflous.
        viewBoxToViewTransform() is now a simple static heper function in SVGFitToViewBox.
        As a result, the SVGSVGElement::viewBoxToViewTransform() function now resuses the same logic.

        As side-effect this patch fixes svg/custom/linking-a-03-b-transform.svg, the return
        statement in SVGSVGElement::viewBoxToViewTransform() was clearly wrong.

        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform):
        * svg/SVGFitToViewBox.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::viewBoxToViewTransform):
        * svg/SVGMarkerElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::buildPattern):
        * svg/SVGPatternElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::viewBoxToViewTransform):
        * svg/SVGSVGElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        * svg/SVGSymbolElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/SVGViewSpec.h:

2009-10-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Correct a typo that fixes the resizing of columns in Cookie view when you
        resize the Inspector window.

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

2009-10-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=29811>
        Text in Inspector's Styles gear menu is invisible.
        
        Adds a style rule for the option text and hr's in the gear menu,
        to prevent them from being transparent.

        * inspector/front-end/inspector.css:

2009-10-08  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Fix build problem with SVGURIReference in V8.
        https://bugs.webkit.org/show_bug.cgi?id=30217

        No new tests, just a build fix.

        * WebCore.gypi:
        * bindings/v8/DerivedSourcesAllInOne.cpp:

2009-10-07  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Eric Carlson.

        Make beforeload work on <video>/<audio> elements.

        Added fast/dom/beforeload/video-before-load.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseMappedAttribute):
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::selectNextSourceChild):

2009-10-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        Move SVGExternalResourcesRequired ANIMATED_* macros in classes that inherit from it
        https://bugs.webkit.org/show_bug.cgi?id=30218

        The long term goal is to kill the need for the virtual contextElement() function in SVG code. 
        No change in functionality, thus no new tests.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        * svg/SVGAElement.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::SVGDefsElement):
        * svg/SVGDefsElement.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::SVGExternalResourcesRequired):
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        * svg/SVGFEImageElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFilterElement.h:
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::SVGFontElement):
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::SVGGElement):
        * svg/SVGGElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        * svg/SVGLineElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::SVGMPathElement):
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        * svg/SVGPolyElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        * svg/SVGScriptElement.h:
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::SVGSwitchElement):
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        * svg/SVGSymbolElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        * svg/SVGTextContentElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        * svg/SVGViewElement.h:

2009-10-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Darin Adler.

        SVG feComposite: operator over mixes up inputs
        [https://bugs.webkit.org/show_bug.cgi?id=30205]

        SVG feComposite operator over mixed up the inputs.
        The pixel-test svg/filters/feComposite.svg can already test this.
        No new test result is needed as long as filters are disabled.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):

2009-10-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by George Staikos.

        Move SVGURIReference ANIMATED_* macros in classes that inherit from it
        https://bugs.webkit.org/show_bug.cgi?id=30184

        The long term goal is to kill the need for the virtual contextElement() function in SVG code. 
        No change in functionality, thus no new tests.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::SVGAltGlyphElement):
        * svg/SVGAltGlyphElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGCursorElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        * svg/SVGFEImageElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFilterElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::SVGMPathElement):
        (WebCore::SVGMPathElement::pathElement):
        * svg/SVGMPathElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * svg/SVGPatternElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        * svg/SVGScriptElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::SVGTRefElement):
        * svg/SVGTRefElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        * svg/SVGTextPathElement.h:
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::SVGURIReference):
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        * svg/SVGUseElement.h:

2009-10-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Re-add the QApplication::syncX() line for plugin windows removed
        by r49169. Also changed the location of the sync just after the
        creation instead of just before sending it to the plugin.
        https://bugs.webkit.org/show_bug.cgi?id=25053

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::platformStart):

2009-10-08  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector: NodeLists Don't Display Well in the Console
        https://bugs.webkit.org/show_bug.cgi?id=28061

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

2009-10-08  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless plugins: Remove unnecessary XSync for opaque mode.
        
        The reason for the XSync was that the plugin would not know about the
        Drawable. It turns out that the real reason behind this is that even
        though XCreatePixmap returns a handle, this id is unknown to the server
        until we flush the connection.
        
        So, move the XSync to right after we create the Pixmap.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):

2009-10-07  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=30188
        
        Fixes an issue where performing a non DHTML drag-and-drop operation 
        does not work as expected. For instance, dragging some selected text 
        to an external application, such as TextEdit.
        
        This issue was a regression that arose from patching bug #30107.
        
        This change is covered by the manual test: 
        drag-out-of-background-window.html

        * page/DragController.cpp:
        (WebCore::DragController::startDrag): When performing a non-DHTML drag 
        operation then default to drag operations DragOperationGeneric and 
        DragOperationCopy according to similar functionality removed when fixing
        bug #30107, see: 
        http://trac.webkit.org/browser/trunk/WebKit/mac/WebView/WebHTMLView.mm?rev=48526#L3430 

2009-10-07  Xan Lopez  <xlopez@igalia.com>

        Fix more breakage in the GTKbuild.

        * GNUmakefile.am:

2009-10-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move PolicyChecker to it's own file
        https://bugs.webkit.org/show_bug.cgi?id=30193

        This is just moving code around and re-naming things.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/PolicyCallback.cpp: Added.
        (WebCore::PolicyCallback::PolicyCallback):
        (WebCore::PolicyCallback::~PolicyCallback):
        (WebCore::PolicyCallback::clear):
        (WebCore::PolicyCallback::set):
        (WebCore::PolicyCallback::call):
        (WebCore::PolicyCallback::clearRequest):
        (WebCore::PolicyCallback::cancel):
        * loader/PolicyCallback.h: Added.
        (WebCore::PolicyCallback::request):
        * loader/PolicyCheck.cpp: Removed.
        * loader/PolicyCheck.h: Removed.

2009-10-07  Joel Stanley  <joel@jms.id.au>

        Reviewed by Mark Rowe.

        Include <limits> for std::numeric_limits.  Required by gcc-4.4
        https://bugs.webkit.org/show_bug.cgi?id=30197

        * html/canvas/CanvasByteArray.h:
        * html/canvas/CanvasIntArray.h:
        * html/canvas/CanvasShortArray.h:
        * html/canvas/CanvasUnsignedByteArray.h:
        * html/canvas/CanvasUnsignedIntArray.h:
        * html/canvas/CanvasUnsignedShortArray.h:

2009-10-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor PolicyChecker out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30155

        This patch separates PolicyChecker from FrameLoader.  Loader policy is
        in change of managing the FrameLoaderClient callbacks.  Ideally, it
        shouldn't know anything about FrameLoader, but I couldn't quite remove
        all knowledge (although we might be able to do more later).  In a
        future patch, I'll move PolicyChecker into a separate file.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::PolicyChecker::handleUnimplementablePolicy):
        (WebCore::PolicyChecker::cannotShowMIMEType):
        (WebCore::PolicyChecker::PolicyChecker):
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkContentPolicy):
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::PolicyChecker::cancelCheck):
        (WebCore::PolicyChecker::stopCheck):
        (WebCore::PolicyChecker::continueAfterContentPolicy):
        (WebCore::PolicyChecker::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        (WebCore::PolicyChecker::continueAfterNewWindowPolicy):
        (WebCore::PolicyChecker::continueAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/FrameLoader.h:
        (WebCore::PolicyChecker::loadType):
        (WebCore::PolicyChecker::setLoadType):
        (WebCore::PolicyChecker::delegateIsDecidingNavigationPolicy):
        (WebCore::PolicyChecker::delegateIsHandlingUnimplementablePolicy):
        (WebCore::FrameLoader::policy):
        * loader/FrameLoaderClient.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didCancel):
        (WebCore::MainResourceLoader::willSendRequest):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2009-10-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed <rdar://problem/5751979> Database code takes JSLock on secondary
        thread, permanently slowing down JavaScript

        Changed callback objects to use a standard helper object. The helper
        object ASSERTs that it is deleted on the main thread, so no lock is
        required when unprotecting its members. It also centralizes some previously
        duplicated code.
        
        Callback objects that might be deleted on a secondary thread use
        callOnMainThread to delete their helper objects on the main thread.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCallbackData.cpp: Copied from bindings/js/JSCustomSQLTransactionCallback.cpp.
        (WebCore::JSCallbackData::deleteData):
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCallbackData.h: Copied from bindings/js/JSCustomSQLTransactionCallback.cpp.
        (WebCore::JSCallbackData::JSCallbackData):
        (WebCore::JSCallbackData::~JSCallbackData):
        (WebCore::JSCallbackData::callback):
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::JSCustomPositionCallback):
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionCallback.h:
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::JSCustomPositionErrorCallback):
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.h:
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::JSCustomSQLStatementCallback):
        (WebCore::JSCustomSQLStatementCallback::~JSCustomSQLStatementCallback):
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.h:
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::JSCustomSQLStatementErrorCallback):
        (WebCore::JSCustomSQLStatementErrorCallback::~JSCustomSQLStatementErrorCallback):
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback):
        (WebCore::JSCustomSQLTransactionCallback::~JSCustomSQLTransactionCallback):
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.h:
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::JSCustomSQLTransactionErrorCallback):
        (WebCore::JSCustomSQLTransactionErrorCallback::~JSCustomSQLTransactionErrorCallback):
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::JSCustomVoidCallback):
        (WebCore::JSCustomVoidCallback::~JSCustomVoidCallback):
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.h:
        * storage/Database.cpp:
        (WebCore::Database::Database):

2009-10-07  Jens Alfke  <snej@chromium.org>

        Reviewed by Dave Levin.

        Fix StringImpl::m_buffer
        https://bugs.webkit.org/show_bug.cgi?id=30189

        Fix my previous StringImpl patch to avoid using an indefinite-length array member,
        since MSVC doesn't like it. Instead, go back to offsetting by sizeof(StringImpl).

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl):
        (WebCore::StringImpl::createUninitialized):
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::bufferIsInternal):

2009-10-07  Aaron Boodman  <aa@chromium.org>

        Reviewed by Adam Barth.

        Update isolated worlds under v8 to support world reuse.
        https://bugs.webkit.org/show_bug.cgi?id=30145

        * bindings/v8/ScriptController.cpp:
        Replace evaluateInNewIsolatedWorld() withe evaluateInIsolatedWorld(id).
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        * bindings/v8/ScriptController.h: Ditto.
        * bindings/v8/V8Proxy.cpp: Ditto.
        (WebCore::V8Proxy::~V8Proxy): Dittio.
        (WebCore::V8Proxy::evaluateInIsolatedWorld): Ditto.
        * bindings/v8/V8Proxy.h: Ditto.
        * bindings/v8/V8IsolatedWorld.cpp:
        Add support for controlling lifetime of a world, rather than relying on GC.
        (WebCore::V8IsolatedWorld::contextWeakReferenceCallback): Ditto.
        (WebCore::V8IsolatedWorld::V8IsolatedWorld): Ditto.
        (WebCore::V8IsolatedWorld::destroy): Ditto.
        * bindings/v8/V8IsolatedWorld.h: Ditto.

2009-10-07  Jeremy Orlow  <jorlow@chromium.org>

        Build fix for http://trac.webkit.org/changeset/49272 on Windows

        * platform/text/StringImpl.h:

2009-10-07  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Adler.

        Optimization of StringImpl:
        - Remove unnecessary m_bufferIsInternal member (saves 4 bytes). Instead, check whether
          m_data points to just past the end of the object's members.
        - copy() and createWithTerminatingNullCharacter() create the string in a single malloc
          block instead of 2 (saves ~20 bytes and considerable CPU cycles, increases locality).
        - Move m_length next to m_hash to save 4 bytes of padding in 64-bit builds.
          
        https://bugs.webkit.org/show_bug.cgi?id=29500

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::StringImpl): Re-ordered members.
        (WebCore::StringImpl::~StringImpl): Change to is-buffer-internal check.
        (WebCore::StringImpl::createUninitialized): Use new m_buffer member instead of sizeof()
            to ensure chars are copied to correct location.
        (WebCore::StringImpl::createWithTerminatingNullCharacter): Make sure copy is created
            in a single malloc block.
        (WebCore::StringImpl::threadsafeCopy): Make sure copy is created in a single malloc block.
        (WebCore::StringImpl::crossThreadString): Make sure copy is created in a single malloc block.
        (WebCore::StringImpl::sharedBuffer): Change to is-buffer-internal check.
        * platform/text/StringImpl.h:
        (WebCore::StringImpl::startsWith): Just fixed a confusing param name.
        (WebCore::StringImpl::bufferIsInternal): Changed member var into accessor method.
        (WebCore::StringImpl::m_data): Repositioned for optimal member packing in 64-bit.
        (WebCore::StringImpl::m_buffer): Added to provide an explicit location for where internal buffer goes.

2009-10-07  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30102
        And
        <rdar://problem/5015957>
        
        Manual test to confirm that the not-allowed cursor is shown for an
        invalid drag-and-drop operation.
        
        We cannot test this using DRT because of a discrepancy between the Windows
        API-based drop effect and the WebKit drop effect. See bug #24731 for more
        details.

        * manual-tests/drag-cursor-notallowed.html: Added.

2009-10-07  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * WebCore.xcodeproj/project.pbxproj:

2009-10-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/30104>.
        Inspector should show cookies of sub-resources on the page.
        
        This function implements showing cookies for all sub-resources of a page.
        When the page is loaded, it populates the Storage Panel with a list of all
        domains that were loaded as part of the full page load (iframes, ads, etc).
        When the user selects one of the domains, the inspector calls back into the
        controller, and the controller combines all of the cookies from that domain
        into a list, and sends that list is sent back to the controller to render.
        
        A domain now needs to be passed into CookieItemsView, and CookieSidebarTreeElement.
        
        As a result of a previous patch, we now have detailed cookie information for
        both Windows on CFNetwork and Mac. Additionally, this patch provides deleteCookie
        support on Windows.

        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/js/ScriptObject.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getCookies):
        (WebCore::InspectorBackend::deleteCookie):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::getCookies):
        (WebCore::InspectorController::buildArrayForCookies):
        (WebCore::InspectorController::buildObjectForCookie):
        (WebCore::InspectorController::deleteCookie):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addCookieDomainForDocument):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.Cookies.getCookiesAsync):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addCookieDomain):
        (WebInspector.StoragePanel.prototype.showCookies):
        (WebInspector.CookieSidebarTreeElement):
        (WebInspector.CookieSidebarTreeElement.prototype.onselect):
        * inspector/front-end/inspector.js:
        (WebInspector.addCookieDomain):
        * platform/Cookie.h:
        (WebCore::CookieHash::hash):
        (WebCore::CookieHash::equal):
        (WTF::):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::deleteCookie):

2009-10-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add ScriptObject::set(const char*, unsigned).

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

        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        * bindings/v8/ScriptObject.h:

2009-10-07  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix for Windows (Cairo).

        Provide implementation of new BitmapImage::create that was
        added in @r49060.

        * platform/graphics/win/ImageCairoWin.cpp:

2009-10-07  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Carlson.

        Refactor RenderThemeChromiumMac and RenderThemeChromiumSkia to render media controls using GraphicsContext.

        Design was based on existing RenderMediaControls.cpp used by RenderThemeSafari/Win.

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

        Covered by existing layout tests as no new functionality was introduced.

        * WebCore.gypi: Added RenderMediaControlsChromium.cpp/h.
        * css/mediaControlsChromium.css: Tweaked media slider position and border style.
        * rendering/MediaControlElements.cpp:
        (WebCore::toParentMediaElement): Taken from RenderMediaControls.
        (WebCore::MediaControlElement::rendererIsNeeded): Don't call shouldRenderMediaControlPart() if element has no appearance.
        (WebCore::MediaControlInputElement::rendererIsNeeded): Ditto.
        * rendering/RenderMediaControls.cpp: Moved parentMediaElement() to MediaControlElements.
        * rendering/RenderMediaControlsChromium.cpp: Added.
        (WebCore::platformResource): Helper to load and cache media control image resources.
        (WebCore::mediaSliderThumbImage): Implementation refactored from RenderThemeChromiumMac/Skia.
        (WebCore::mediaVolumeSliderThumbImage): Ditto.
        (WebCore::paintMediaButton): Ditto.
        (WebCore::paintMediaMuteButton): Ditto.
        (WebCore::paintMediaPlayButton): Ditto.
        (WebCore::paintMediaSlider): Ditto.
        (WebCore::paintMediaSliderThumb): Ditto.
        (WebCore::paintMediaVolumeSlider): Ditto.
        (WebCore::paintMediaVolumeSliderThumb): Ditto.
        (WebCore::paintMediaTimelineContainer): Ditto.
        (WebCore::RenderMediaControlsChromium::shouldRenderMediaControlPart): Ditto.
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart): Same
        (WebCore::RenderMediaControlsChromium::adjustMediaSliderThumbSize):
        * rendering/RenderMediaControlsChromium.h: Added.
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::adjustSliderThumbSize): Implementation delegated to RenderMediaControlsChromium.
        (WebCore::RenderThemeChromiumMac::shouldRenderMediaControlPart): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaPlayButton): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaMuteButton): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderTrack): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaSliderThumb): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderThumb): Ditto.
        (WebCore::RenderThemeChromiumMac::paintMediaControlsBackground): Ditto.
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintMediaControlsBackground): Implementation delegated to RenderMediaControlsChromium.
        (WebCore::RenderThemeChromiumSkia::paintMediaSliderTrack): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintMediaVolumeSliderTrack): Ditto.
        (WebCore::RenderThemeChromiumSkia::adjustSliderThumbSize): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintMediaSliderThumb): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintMediaVolumeSliderThumb): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintMediaPlayButton): Ditto.
        (WebCore::RenderThemeChromiumSkia::paintMediaMuteButton): Ditto.
        (WebCore::RenderThemeChromiumSkia::shouldRenderMediaControlPart): Ditto.

2009-10-07  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Make plugins work with beforeload.

        Added fast/dom/beforeload/flash-before-load.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget):

2009-10-07  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Protect JS listener object from GC while clearing a property on it.
        See http://crbug.com/23780.
        https://bugs.webkit.org/show_bug.cgi?id=30137

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::~V8AbstractEventListener):

2009-10-07  Zoltan Horvath  <zoltan@webkit.org>

        Rubber-stamped by Eric Seidel.

        Allow custom memory allocation control for WebCore's CachedResourceClient class
        https://bugs.webkit.org/show_bug.cgi?id=30165

        Inherits CachedResourceClient class from FastAllocBase because (its
        child class) CSSFontFaceSource has been instantiated by 'new' in WebCore/css/CSSFontFaceSource.h:46.

        * loader/CachedResourceClient.h:

2009-10-07  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Allow custom memory allocation control for WebCore's IdentifierRep 
        https://bugs.webkit.org/show_bug.cgi?id=30159                                                        

        Inherits IdentifierRep class from FastAllocBase because it has been                                 
        instantiated by 'new' in WebCore/bridge/IdentifierRep.cpp:61.  

        * bridge/IdentifierRep.h:

2009-10-07  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Fetch pointers to C+DOM window immediately from holder
        object (do not search prototype chain for proper JS wrapper).
        https://bugs.webkit.org/show_bug.cgi?id=29031

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createNewContext):
        (WebCore::V8Proxy::installDOMWindow):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::INDEXED_ACCESS_CHECK):
2009-10-07  Adam Roben  <aroben@apple.com>

        Fix typo in PluginView::load that was causing cross-origin loads to
        be allowed

        This typo was introduced in the build fix in r49213.

        Fixes <http://webkit.org/b/30168> REGRESSION (r49213):
        http/tests/plugins/local-geturl-from-remote.html is failing on Windows

        Reviewed by Sam Weinig.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load): Removed a comma operator that was making
        a condition always evaluate to true.

2009-10-07  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Do not create valid QColor's for invalid WebCore::Color's.

        * platform/graphics/qt/ColorQt.cpp:
        (WebCore::Color::operator QColor):

2009-10-07  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Symbian SBSv2 .data segment adress fix
        https://bugs.webkit.org/show_bug.cgi?id=30157

        RO-section in qtwebkit.dll exceeds allocated space in SBSv2. Move RW-section
        base address to start from 0x800000 instead of the toolchain default 0x400000

        * WebCore.pro:

2009-10-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Migrate database inspection to the injected script-based schema.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::databaseForId):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        (WebCore::InspectorBackend::databaseForId):
        (WebCore::InspectorBackend::selectDatabase):
        (WebCore::InspectorBackend::getDatabaseTableNames):
        (WebCore::InspectorBackend::reportDidDispatchOnInjectedScript):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::selectDatabase):
        (WebCore::InspectorController::databaseForId):
        (WebCore::InspectorController::didOpenDatabase):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::selectDOMStorage):
        (WebCore::InspectorController::getDOMStorageResourceForId):
        * inspector/InspectorController.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        (WebCore::InspectorDatabaseResource::database):
        (WebCore::InspectorDatabaseResource::id):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addDatabase):
        (WebCore::InspectorFrontend::selectDatabase):
        (WebCore::InspectorFrontend::didGetDatabaseTableNames):
        (WebCore::InspectorFrontend::addDOMStorage):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/Database.js:
        (WebInspector.Database):
        (WebInspector.Database.prototype.get id):
        (WebInspector.Database.prototype.set name):
        (WebInspector.Database.prototype.set version):
        (WebInspector.Database.prototype.set domain):
        (WebInspector.Database.prototype.getTableNames):
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.dispatch):
        (InjectedScript.executeSql):
        (InjectedScript.executeSql.errorCallback):
        (InjectedScript.executeSql.queryTransaction):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.selectDatabase):
        (WebInspector.StoragePanel.prototype.dataGridForResult):
        * inspector/front-end/inspector.js:
        (WebInspector.addDatabase):

2009-10-07  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless Plugins: Disable content propagation for QGraphicsView items
        
        We cannot support content propagation for items in QGraphicsView because
        the contents of the backing store might be transformed. So turn it off
        if we are not painting on QWidget.
        
        Note that this check will not work for a QWebView in a
        QGraphicsProxyWidget, but I guess it's fine. Alternative is to do an
        even uglier cast: static_cast painter's paintDevice() to QWidget and
        check if it is the viewport() of QGraphicsView.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paint):

2009-10-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build by adding the missing files to the build.

        * WebCore.pro:

2009-10-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Fix incorrect convertion of double into int while assigning it to
        a float.

        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformInit):

2009-10-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Fix rounding error issues in height calculation in 64 bits.

        Already covered by existing tests.

        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::platformInit):
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        (WebCore::SimpleFontData::platformInit):

2009-10-07  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Dual lines in css2.1 layout tests do not match:
        https://bugs.webkit.org/show_bug.cgi?id=23262

        Now we can put a counter node as the next sibling of a reset node.
        Re-layout the counter content when the count is updated.

        Tests: fast/css/counters/t1204-increment-00-c-o.html
               fast/css/counters/t1204-increment-01-c-o.html

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::recount):
        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):

2009-10-06  Xan Lopez  <xlopez@igalia.com>

        Try to fix the GTKbuild.

        * GNUmakefile.am:

2009-10-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Adam Barth.

        Removed unused member variable from FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30146

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

2009-10-06  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (build fix).

        A few small/trivial tweaks to the last build fix.

        * bindings/scripts/CodeGeneratorV8.pm:

2009-10-06  David Levin  <levin@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Need to adjust MessagePort, etc. code for the post clone work done.
        https://bugs.webkit.org/show_bug.cgi?id=30147

        No change in functionality so no new tests.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/SerializedScriptValue.h: Added.
         A very simple implementation of SerializedScriptValue
         that only works for strings.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8MessageEventCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-10-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Fix for <rdar://problem/7271202>
        Dispatch resource load delegate functions for the media element.
        Since we don't get the required callbacks from the media engine,
        just fake the parameters to the delegate functions as best as possible.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willLoadMediaElementURL):
        * loader/FrameLoader.h:

2009-10-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        More build fixes.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::DeserializingTreeWalker::getProperty):
        (WebCore::TeardownTreeWalker::getProperty):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::SerializedScriptValue):

2009-10-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Build and formatting fix.

        * ForwardingHeaders/runtime/ExceptionHelpers.h: Added.
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValueData::operator bool):
        (WebCore::SerializedScriptValueData::release):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::toString):
        (WebCore::SerializedScriptValue::~SerializedScriptValue):
        (WebCore::SerializedScriptValue::SerializedScriptValue):

2009-10-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        It should be possible to post (clone) built-in JS objects to Workers
        https://bugs.webkit.org/show_bug.cgi?id=22878

        Implement object cloning semantics for postMessage.  Currently only
        a partial implementation of the spec -- cloning of File, FileList,
        ImageData, and RegExp were left out as they would have significantly
        increased patch size.

        Cloning requires multiple tree walks so we use a templated tree
        walk function, allowing us to share a single implementation for
        serialization, deserialization, and eventual destruction of the
        serialized object tree.

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

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::postMessage):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::initMessageEvent):
        * bindings/js/JSMessagePortCustom.h:
        (WebCore::handlePostMessage):
        * bindings/js/SerializedScriptValue.cpp: Added.
        (WebCore::SerializedObject::set):
        (WebCore::SerializedObject::names):
        (WebCore::SerializedObject::values):
        (WebCore::SerializedObject::create):
        (WebCore::SerializedObject::clear):
        (WebCore::SerializedObject::SerializedObject):
        (WebCore::SerializedArray::setIndex):
        (WebCore::SerializedArray::canDoFastRead):
        (WebCore::SerializedArray::getIndex):
        (WebCore::SerializedArray::getSparseIndex):
        (WebCore::SerializedArray::length):
        (WebCore::SerializedArray::create):
        (WebCore::SerializedArray::clear):
        (WebCore::SerializedArray::SerializedArray):
        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
        (WebCore::SharedSerializedData::asArray):
        (WebCore::SharedSerializedData::asObject):
        (WebCore::):
        (WebCore::walk):
        (WebCore::BaseWalker::BaseWalker):
        (WebCore::BaseWalker::shouldTerminate):
        (WebCore::BaseWalker::ticksUntilNextCheck):
        (WebCore::BaseWalker::didTimeOut):
        (WebCore::BaseWalker::throwStackOverflow):
        (WebCore::BaseWalker::throwInterruptedException):
        (WebCore::SerializingTreeWalker::SerializingTreeWalker):
        (WebCore::SerializingTreeWalker::null):
        (WebCore::SerializingTreeWalker::isArray):
        (WebCore::SerializingTreeWalker::isObject):
        (WebCore::SerializingTreeWalker::asInputArray):
        (WebCore::SerializingTreeWalker::asInputObject):
        (WebCore::SerializingTreeWalker::createOutputArray):
        (WebCore::SerializingTreeWalker::createOutputObject):
        (WebCore::SerializingTreeWalker::length):
        (WebCore::SerializingTreeWalker::canDoFastRead):
        (WebCore::SerializingTreeWalker::getIndex):
        (WebCore::SerializingTreeWalker::getSparseIndex):
        (WebCore::SerializingTreeWalker::getProperty):
        (WebCore::SerializingTreeWalker::convertIfTerminal):
        (WebCore::SerializingTreeWalker::getPropertyNames):
        (WebCore::SerializingTreeWalker::putIndex):
        (WebCore::SerializingTreeWalker::putProperty):
        (WebCore::SerializingTreeWalker::startArray):
        (WebCore::SerializingTreeWalker::endArray):
        (WebCore::SerializingTreeWalker::startObject):
        (WebCore::SerializingTreeWalker::endObject):
        (WebCore::SerializedScriptValueData::serialize):
        (WebCore::DeserializingTreeWalker::DeserializingTreeWalker):
        (WebCore::DeserializingTreeWalker::null):
        (WebCore::DeserializingTreeWalker::isArray):
        (WebCore::DeserializingTreeWalker::isObject):
        (WebCore::DeserializingTreeWalker::asInputArray):
        (WebCore::DeserializingTreeWalker::asInputObject):
        (WebCore::DeserializingTreeWalker::createOutputArray):
        (WebCore::DeserializingTreeWalker::createOutputObject):
        (WebCore::DeserializingTreeWalker::length):
        (WebCore::DeserializingTreeWalker::canDoFastRead):
        (WebCore::DeserializingTreeWalker::getIndex):
        (WebCore::DeserializingTreeWalker::getSparseIndex):
        (WebCore::DeserializingTreeWalker::getProperty):
        (WebCore::DeserializingTreeWalker::convertIfTerminal):
        (WebCore::DeserializingTreeWalker::getPropertyNames):
        (WebCore::DeserializingTreeWalker::putIndex):
        (WebCore::DeserializingTreeWalker::putProperty):
        (WebCore::DeserializingTreeWalker::startArray):
        (WebCore::DeserializingTreeWalker::endArray):
        (WebCore::DeserializingTreeWalker::startObject):
        (WebCore::DeserializingTreeWalker::endObject):
        (WebCore::SerializedScriptValueData::deserialize):
        (WebCore::TeardownTreeWalker::shouldTerminate):
        (WebCore::TeardownTreeWalker::ticksUntilNextCheck):
        (WebCore::TeardownTreeWalker::didTimeOut):
        (WebCore::TeardownTreeWalker::throwStackOverflow):
        (WebCore::TeardownTreeWalker::throwInterruptedException):
        (WebCore::TeardownTreeWalker::null):
        (WebCore::TeardownTreeWalker::isArray):
        (WebCore::TeardownTreeWalker::isObject):
        (WebCore::TeardownTreeWalker::asInputArray):
        (WebCore::TeardownTreeWalker::asInputObject):
        (WebCore::TeardownTreeWalker::createOutputArray):
        (WebCore::TeardownTreeWalker::createOutputObject):
        (WebCore::TeardownTreeWalker::length):
        (WebCore::TeardownTreeWalker::canDoFastRead):
        (WebCore::TeardownTreeWalker::getIndex):
        (WebCore::TeardownTreeWalker::getSparseIndex):
        (WebCore::TeardownTreeWalker::getProperty):
        (WebCore::TeardownTreeWalker::convertIfTerminal):
        (WebCore::TeardownTreeWalker::getPropertyNames):
        (WebCore::TeardownTreeWalker::putIndex):
        (WebCore::TeardownTreeWalker::putProperty):
        (WebCore::TeardownTreeWalker::startArray):
        (WebCore::TeardownTreeWalker::endArray):
        (WebCore::TeardownTreeWalker::startObject):
        (WebCore::TeardownTreeWalker::endObject):
        (WebCore::SerializedScriptValueData::tearDownSerializedData):
        * bindings/js/SerializedScriptValue.h: Added.
        (WebCore::SharedSerializedData::~SharedSerializedData):
        (WebCore::SerializedScriptValueData::):
        (WebCore::SerializedScriptValueData::type):
        (WebCore::SerializedScriptValueData::~SerializedScriptValueData):
        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
        (WebCore::SerializedScriptValueData::asImmediate):
        (WebCore::SerializedScriptValueData::asDouble):
        (WebCore::SerializedScriptValueData::asString):
        (WebCore::SerializedScriptValueData::asObject):
        (WebCore::SerializedScriptValueData::asArray):
        (WebCore::SerializedScriptValueData::operator bool ):
        (WebCore::SerializedScriptValueData::release):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::toString):
        (WebCore::SerializedScriptValue::deserialize):
        (WebCore::SerializedScriptValue::~SerializedScriptValue):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::data):
        * dom/MessageEvent.idl:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        * dom/MessagePort.h:
        * dom/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::EventData::create):
        (WebCore::MessagePortChannel::EventData::EventData):
        * dom/MessagePortChannel.h:
        (WebCore::MessagePortChannel::EventData::message):
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
        (WebCore::DOMWindow::postMessage):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/EventSource.cpp:
        (WebCore::EventSource::createMessageEvent):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveMessage):
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::postMessage):
        * workers/DedicatedWorkerContext.h:
        * workers/DedicatedWorkerContext.idl:
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):
        * workers/Worker.h:
        * workers/Worker.idl:
        * workers/WorkerContextProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::create):
        (WebCore::MessageWorkerContextTask::MessageWorkerContextTask):
        (WebCore::MessageWorkerTask::create):
        (WebCore::MessageWorkerTask::MessageWorkerTask):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:

2009-10-06  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix for Windows.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2009-10-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move FrameLoader::canLoad to SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=30111

        * WebCore.base.exp:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::loadPlugin):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::createJavaAppletWidget):
        * loader/FrameLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canLoad):
        (WebCore::SecurityOrigin::shouldHideReferrer):
        * page/SecurityOrigin.h:

2009-10-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move setLocalLoadPolicy and friends to SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=30110

        These have more to do with security policies than with loading frames.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::setLocalLoadPolicy):
        (WebCore::SecurityOrigin::restrictAccessToLocal):
        (WebCore::SecurityOrigin::allowSubstituteDataAccessToLocal):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::):

2009-10-06  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        Preparation for <http://webkit.org/b/30104>.
        Inspector should show cookies of sub-resources on the page.
        
        Implement getRawCookies for CFNetwork for Windows, so we can see more
        than just a key/value pair for Cookies when we are on Windows.

        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::getRawCookies):

2009-10-06  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=30132, make beforeload work with <link> elements and
        XML processing instructions.

        Fix up ProcessingInstruction's setData call so that it actually updates a stylesheet when the
        data gets changed.

        Move dispatchBeforeLoadedEvent to ContainerNode so all Elements (and ProcessingInstruction) can
        access it.

        Added fast/dom/beforeload/link-before-load.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::dispatchBeforeLoadEvent):
        * dom/ContainerNode.h:
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        (WebCore::ProcessingInstruction::setData):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::requestScript):
        * dom/ScriptElement.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::forAttributeValue):
        * html/HTMLScriptElement.h:
        * svg/SVGScriptElement.cpp:
        * svg/SVGScriptElement.h:

2009-10-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        accessibility/media-element.html crashes (and has incorrect result)
        https://bugs.webkit.org/show_bug.cgi?id=30108

        Fix up the accessibilty label for the newly added fullscreen button,
        and update the test result accordingly.

        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::controlTypeName):

2009-10-06  Kelly Norton  <knorton@google.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30028>
        Multiple calls to SetFrontendProxyObject can leave an InspectorTimelineAgent with an invalid
        InspectorFrontend.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontendProxyObject): Adds a check for an existing timeline agent.

2009-10-06  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Kilzer.

        Move textRects to the right category in DOM.mm. Include DOMPrivate.h to ensure that the interfaces match.

        * bindings/objc/DOM.mm:
        (-[DOMNode textRects]):

2009-10-06  Benjamin C Meyer  <bmeyer@rim.com>

        Reviewed by Ariya Hidayat.
        
        Match the behavior of other WebKit browser and have the first url of the drag data be the url passed in declareAndWriteDragImage and set the text of the drag data to be the title argument.
        
        Manual test: Drag the readability js link from http://lab.arc90.com/experiments/readability/
        
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage):

2009-10-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Implement min/max attributes, ValidityState.rangeUnderflow and
        ValidityState.rangeOverflow for <input type=number> and <input type=range>
        https://bugs.webkit.org/show_bug.cgi?id=29069
        
        HTMLInputElement::max and min are not defined for COM because they
        conflict with the standard min() and max() macros.

        Tests: fast/forms/ValidityState-rangeOverflow-number.html
               fast/forms/ValidityState-rangeOverflow-range.html
               fast/forms/ValidityState-rangeUnderflow-number.html
               fast/forms/ValidityState-rangeUnderflow-range.html
               fast/forms/input-minmax.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::rangeUnderflow):
        (WebCore::HTMLInputElement::rangeOverflow):
        (WebCore::HTMLInputElement::rangeMinimum):
        (WebCore::HTMLInputElement::rangeMaximum):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::rangeUnderflow):
        (WebCore::ValidityState::rangeOverflow):
        * html/ValidityState.h:
        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::SliderRange):
        (WebCore::SliderRange::valueFromElement):

2009-10-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move m_openedByDOM to Page
        https://bugs.webkit.org/show_bug.cgi?id=30109

        We only need one instance of m_openedByDOM per page, we should move it
        to a page-scoped object.  Notice that it's only ever touched for the
        main frame.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::createWindow):
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::openedByDOM):
        (WebCore::Page::setOpenedByDOM):
        * page/Page.h:

2009-10-06  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Some functions in GraphicsContext do not work
        as expected if the associated painter has no clipping.
        https://bugs.webkit.org/show_bug.cgi?id=29691

        No new tests are associated with this because DumpRenderTree
        always sets clipping on the painter, thus it would never hit 
        the test case, but fast/box-shadow/basic-shadows.html is a
        good example of what happens if the clipping is not set by
        the user of QtWebKit.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        Fixed to handle the case that there is no clipping
        before the call.

2009-10-06  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=30131, make beforeload fire on script elements.

        Added tests in fast/dom/beforeload/.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::requestScript):
        * dom/ScriptElement.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::endElementNs):
        * html/HTMLAttributeNames.in:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        (WebCore::HTMLScriptElement::dispatchBeforeLoadEvent):
        * html/HTMLScriptElement.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::dispatchBeforeLoadEvent):
        * svg/SVGScriptElement.h:

2009-10-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25526
        [Gtk] Additional support is needed for caret browsing

        Enable caret movement commands also when caret browsing setting is
        enabled.

        * editing/EditorCommand.cpp:
        (WebCore::caretBrowsingEnabled):
        (WebCore::enabledVisibleSelectionOrCaretBrowsing):
        (WebCore::enabledInEditableTextOrCaretBrowsing):
        (WebCore::CommandEntry::):
        * manual-tests/gtk/caret-browsing.html: Added.

2009-10-06  Anton Muhin  <antonm@chromium>

        Reviewed by Dimitri Glazkov.

        Non standard, but popular exetension allows automagically
        turn a function into a namespace resolver.  Support that in
        Chromium as well.

        Adjust CodeGeneratorV8 to treat XPathNSResolver in a special way.
        https://bugs.webkit.org/show_bug.cgi?id=30128

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getXPathNSResolver):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-10-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: close inspector client view on
        InspectorController::close API call.

        In order to run batch web inspector layout tests (and not affect
        subsequent tests) we should close inspector client's view upon
        InspectorController::close API call.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::close):

2009-10-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix the Qt/Windows build by stubbing out the still image
        support for halted plugins for the Qt build.

        Bugzilla entry https://bugs.webkit.org/show_bug.cgi?id=30130
        tracks removing this by implementing Frame::nodeImage().

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::halt):

2009-10-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Change QImageReader usage in ImageDecoderQt
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Replace the ReadContext with another appoach to
        reading the image. Attempt to only read meta information
        like the image size and number of frames (for animations)
        first and then when the page is getting drawn decode
        the image with the QImageReader.

        This is a huge benefit on pages with many images and saves
        ~2GB of memory on the szeged image test page.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::isSizeAvailable):
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::repetitionCount):
        (WebCore::ImageDecoderQt::filenameExtension):
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        (WebCore::ImageDecoderQt::clearFrameBufferCache):
        (WebCore::ImageDecoderQt::internalDecodeSize):
        (WebCore::ImageDecoderQt::internalReadImage):
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        (WebCore::ImageDecoderQt::forceLoadEverything):
        (WebCore::ImageDecoderQt::failRead):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-10-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Make use of RGBA32Buffer in ImageDecoderQt
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Use the RGBA32Buffer instead of the internal ImageData
        to be able to use support of the base class, optionally
        support WebCore decoders for Qt and most importantly
        separate metadata and image data for better cache control.

        Remove ImageSourceQt as everything is now shared with
        the normal ImageSource.

        Change the ownership of the NativeImagePtr/QPixmap in
        ImageQt.cpp to delete the m_frame to be subject to cache
        control.

        * WebCore.pro:
        * platform/graphics/ImageSource.cpp:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::ReadContext):
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        (WebCore::ImageDecoderQt::clearFrameBufferCache):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp: Removed.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::decodedImage):
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp: Added.
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::setDecodedImage):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):

2009-10-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] ImageDecoderQt avoid QString creation.
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Avoid going from CString to QString to String
        and go directly from CString to String. Also
        avoid going to lower case to avoid an extra
        memory allocation.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-10-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Cleanup the ImageDecoder of Qt.
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Remove the various enums for partial load. The fact is
        that this image decoder will decode everything that is
        in the file at once. Make it look like it behaves to
        ease fixing this core problem.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ImageData::ImageData):
        (WebCore::ImageDecoderQt::ReadContext::ReadContext):
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::hasFirstImageHeader):
        (WebCore::ImageDecoderQt::setData):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-10-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Reimplement instead of overload frameCount in ImageDecoderQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Reimplement frameCount instead of overloading it.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::frameCount):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-10-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] QImageReader does not support progressive reading
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Change the ImageDecoderQt::setData to store the encoded
        data in ImageDecoder.

        Only call ReadContext when the whole Resource has been
        loaded to avoid needless calls to reset and the
        ReadContext as progressive loading is not supported.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-10-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Remove dead code from ImageDecoderQt
        https://bugs.webkit.org/show_bug.cgi?id=27538

        Remove unused variables and debugging code. The debug
        code has never been used and does not provide anything
        useful.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::isSizeAvailable):
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::repetitionCount):
        (WebCore::ImageDecoderQt::filenameExtension):
        (WebCore::ImageDecoderQt::imageAtIndex):

2009-10-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] segfault when calling gst_video_format_parse_caps in the video sink
        https://bugs.webkit.org/show_bug.cgi?id=30120

        Fix use of gst_video_format_parse_caps()

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_idle_func):

2009-10-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Update mediaControls CSS

        * css/mediaControlsQt.css:

2009-10-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Get rid of Preferences.ignoreWhitespace.

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

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent):
        (WebInspector.DOMAgent.prototype._childNodeCountUpdated):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.update):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.onpopulate):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.isCaretAtEndOfPrompt):
        * inspector/front-end/inspector.js:
        * inspector/front-end/utilities.js:
        (Node.prototype.rangeOfWord):
        (traverseNextNode):
        (traversePreviousNode):
        (onlyTextChild):

2009-10-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not call nodeTitleInfo twice +
        followup fixes for r49101.

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

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

2009-10-06  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless plugins: Enable painting on printer.

        The print preview dialog crashed because the depth of the drawable
        changed owing to a bug in Qt - if you draw onto a 32-bit pixmap,
        and set a 24-bit pixmap as source, it will convert the source to
        32-bit.

        1210fa5b2d65895ad2be1f9ca7cae586e3b29dc1 is the bug fix in Qt.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paint):

2009-10-06  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless plugins: Make painting and events work when page is zoomed.

        The element gets resized when zoomed. So, we have to make sure that we resize
        the drawable and do a setwindow call. Multiple calls to setwindow do not
        crash plugin in windowless mode (unlike in windowed mode).

        For mouse events we have to convert the pos to post-zoom position.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::setXButtonEventSpecificFields):
        (WebCore::setXMotionEventSpecificFields):
        (WebCore::setXCrossingEventSpecificFields):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowIfNeeded):

2009-10-06  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless plugins: Add PluginQuirkRequiresDefaultScreenDepth quirk for Flash.

        Flash does not use the visual provided by us to draw into the drawable.
        It instead uses the system default visual (as returned by XDefaultVisual).
        This means that if the screen default visual is 24-bit, Flash won't be
        able to draw on 32-bit drawable created by us. This is a bug in Flash
        and for the moment, the above quirk is only set for Flash.

        Our strategy to create the drawable:
        1. Create a 32-bit drawable if the default screen depth is 32 or the
        quirk is not set (i.e not flash)
        2. If we didn't create a 32-bit drawable (maybe the Display has no such
        visual), we create a drawable with default screen depth.

        As a result of the above changes, content propagation behavior changes as:
        1. Content propagation is possible only if the drawable we create and
        Qt's backing store are of the same depth.
        2. If we created a 32-bit drawable, there is no need for content
        propagation (Qt will take care of it).

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

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):
        * plugins/PluginQuirkSet.h:
        (WebCore::):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::getVisualAndColormap):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):

2009-10-06  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Ariya Hidayat.

        Qt build fix.
        https://bugs.webkit.org/show_bug.cgi?id=29362.

        In Qt 4.5, a new function QPainter::fillRect(QRect, QColor) is
        introduced to avoid the expensive construction of QBrush.
        By casting WebCore::Color to QColor, we can compile on Qt 4.4
        and use optimization for solid color fill in Qt 4.5.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::drawBorderlessRectShadow):

2009-10-05  Andrei Popescu  <andreip@google.com>

        Reviewed by Eric Carlson.

        Allow the platform media player to know the <video> poster URL.
        Add MediaPlayerPrivate::prepareToPlay() to support media engines
        that do not buffer video data automatically. This method allows
        such media engines to start the buffering just before starting
        playback.
        https://bugs.webkit.org/show_bug.cgi?id=29133

        All platforms that currently implement <video> return false
        in MediaPlayerPrivate::canLoadPoster() and do nothing in
        MediaPlayerPrivate::prepareToPlay() their behavior is
        unchanged. The current set of media test should then be
        sufficient to guarantee that this patch does not break anything.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        After the MediaPlayer is created, inform it what the poster URL is.
        (WebCore::HTMLMediaElement::updatePlayState):
        Add another case where prepareToPlay is called for the platforms
        that do not buffer video content automatically.
        (WebCore::HTMLMediaElement::couldPlayIfEnoughData)
        Same as potentiallyPlaying, except that we don't check for
        the readyState being at least HAVE_FUTURE_DATA.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::canLoadPoster):
        Empty implementation for the NullMediaPlayerPrivate.
        (WebCore::NullMediaPlayerPrivate::setPoster):
        Empty implementation for the NullMediaPlayerPrivate.
        (WebCore::MediaPlayer::canLoadPoster):
        Proxy to the m_private.
        (WebCore::MediaPlayer::setPoster):
        Proxy to m_private.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::canLoadPoster):
        (WebCore::MediaPlayerPrivateInterface::setPoster):
        Add new methods that allow the platform player to receive the poster URL.
        (WebCore::MediaPlayerPrivateInterface::prepareToPlay):
        Notifies the media engine that playback should start. The media engine
        should start preparing (e.g. by initializing the player and starting to buffer)
        and call back when the state is changed to HAVE_FUTURE_DATA.

2009-10-06  David Levin  <levin@chromium.org>

        Reviewed by Oliver Hunt.

        StringImpl needs a method to get an instance for another thread which doesn't copy the underlying buffer.
        https://bugs.webkit.org/show_bug.cgi?id=30095

        All String::copy methods were changed to call either threadsafeCopy or crossThreadString. The method
        call was made threadsafeCopy unless I could show that threadsafety wasn't needed.

        No visible change in functionality so no new tests.

        * dom/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::EventData::EventData):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::open):
        (WebCore::IconDatabase::iconForPageURL):
        (WebCore::IconDatabase::iconURLForPageURL):
        (WebCore::IconDatabase::retainIconForPageURL):
        (WebCore::IconDatabase::releaseIconForPageURL):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::setIconURLForPageURL):
        (WebCore::IconDatabase::databasePath):
        (WebCore::IconDatabase::defaultDatabaseFilename):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin): Since this is used by SecurityOrigin::threadsafeCopy,
        it makes threadsafe calls.
        (WebCore::SecurityOrigin::threadsafeCopy): The only place that called this
        needed a threadsafe method.
        * page/SecurityOrigin.h:
        * platform/CrossThreadCopier.cpp:
        (WebCore::::copy):
        * platform/KURL.cpp:
        (WebCore::KURL::copy):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        * platform/network/ResourceErrorBase.cpp:
        (WebCore::ResourceErrorBase::copy):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::copyData):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::copyData):
        * platform/sql/SQLValue.cpp:
        (WebCore::SQLValue::SQLValue):
        (WebCore::SQLValue::string):
        * platform/sql/SQLValue.h:
        (WebCore::SQLValue::SQLValue):
        All constructors now initialize the m_number which is a double. Failure to
        do so can result in unexpected crashes when it is copied in the copy constructor.
        See http://blogs.msdn.com/oldnewthing/archive/2008/07/02/8679191.aspx, I was that colleague.
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::threadsafeCopy):
        (WebCore::String::crossThreadString):
        * platform/text/StringImpl.cpp:
        Removed StringImpl::substringCopy which was no longer being used anywhere.
        (WebCore::StringImpl::threadsafeCopy): Changed the name to indicate that
        it is threadsafe.
        (WebCore::StringImpl::crossThreadString): The way to get strings for
        another thread which is not threadsafe. This shares the underlying buffer
        with both strings and gives them a way to do threadsafe refcounting for it.
        * platform/text/StringImpl.h:
        * storage/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::ChangeVersionWrapper):
        * storage/Database.cpp:
        (WebCore::updateGuidVersionMap):
        (WebCore::Database::Database):
        (WebCore::Database::getVersionFromDatabase):
        (WebCore::Database::setVersionInDatabase):
        (WebCore::Database::version):
        (WebCore::Database::setExpectedVersion):
        (WebCore::Database::securityOriginCopy):
        (WebCore::Database::stringIdentifier):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        * storage/OriginQuotaManager.cpp:
        (WebCore::OriginQuotaManager::addDatabase):
        * storage/SQLError.h:
        (WebCore::SQLError::message):
        (WebCore::SQLError::SQLError):
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::SQLStatement):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::syncTimerFired):
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::importItem):
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl):
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::url): Do the copy of the url in a way that is threadsafe.
        (WebCore::SharedWorkerProxy::name):
        (WebCore::SharedWorkerProxy::SharedWorkerProxy):
        (WebCore::DefaultSharedWorkerRepository::getProxy): Do the copy of the url in a way that is threadsafe.
        * workers/SharedWorkerThread.cpp:
        (WebCore::SharedWorkerThread::SharedWorkerThread):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::MessageWorkerContextTask):
        (WebCore::MessageWorkerTask::MessageWorkerTask):
        (WebCore::WorkerExceptionTask::WorkerExceptionTask):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::Task::Task):
        (WebCore::WorkerRunLoop::postTaskForMode):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):

2009-10-06  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Windowless plugins: Use X Pixmap instead of QPixmap.

        This has the following advantages:
        1. Allows more sharing of code between gtk and Qt ports in the future
        2. QPixmap creates 24-bit by default. We have to later 'upgrade' it to 32-bit.
        3. QPixmap may sometime change depth behind our back! This will require us to
        update the plugin about the new visual and colormap.
        4. We cannot ensure that QPixmap is backed by a X Drawable. For example, with
        -graphicssystem raster, QPixmap uses the raster (image) backend.

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

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::platformDestroy):

2009-10-06  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Add support for windowless NPAPI plugins

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

        * plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect):
        (WebCore::PluginView::handleEvent):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::setSharedXEventFields):
        (WebCore::PluginView::initXEvent):
        (WebCore::setXKeyEventSpecificFields):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::inputEventState):
        (WebCore::setXButtonEventSpecificFields):
        (WebCore::setXMotionEventSpecificFields):
        (WebCore::setXCrossingEventSpecificFields):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::handleFocusInEvent):
        (WebCore::PluginView::handleFocusOutEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::forceRedraw):
        (WebCore::getPluginDisplay):
        (WebCore::PluginView::platformStart):

2009-10-05  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Filters do not support source images besides "sourceGraphic"
        [https://bugs.webkit.org/show_bug.cgi?id=6022]

        Add support for SourceAlpha to SVG filters.

        Test: svg/filters/sourceAlpha.svg

        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::calculateEffectRect):
        (WebCore::SourceAlpha::apply):
        * platform/graphics/filters/SourceAlpha.h:

2009-10-05  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Adam Barth.

        Fix reliablity bot crash in DateExtension.
        https://bugs.webkit.org/show_bug.cgi?id=30033

        There were a few problems using the weak persistent pointers because no one else had a
        handle to them.  The new approach stores them as a hidden value on the Date constructor.

        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::setAllowSleep):
        (WebCore::DateExtension::GetNativeFunction):
        (WebCore::DateExtension::Setup):
        (WebCore::DateExtension::OnSleepDetected):
        * bindings/v8/DateExtension.h:
        * bindings/v8/V8HiddenPropertyName.cpp:
        (WebCore::V8HiddenPropertyName::sleepFunction):
        * bindings/v8/V8HiddenPropertyName.h:

2009-10-05  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Dan Bernstein.

        Crash when trying to load a null stylesheet for a site specific hack. 
        https://bugs.webkit.org/show_bug.cgi?id=30105

        Created a testcase and tested in browser.  DRT doesn't test
        site specific hacks.

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

2009-10-05  James Robinson  <jamesr@google.com>

        Reviewed by Darin Adler.

        Fix forward declaration (struct vs class mismatch)

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

        * loader/RedirectScheduler.h:

2009-10-05  Julie Parent  <jparent@chromium.org>

        Unreviewed, last Chromium build fix corresponding to revision 49113.
        Add include for BeforeLoadEvent to DOMObjectsInclude.h.

        * bindings/v8/DOMObjectsInclude.h:

2009-10-05  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build.

        * html/HTMLMediaElement.cpp:

2009-10-05  Simon Fraser  <simon.fraser@apple.com>

        Fix the build: MediaControllerThemeQT was renamed to MediaControllerThemeQuickTime.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart):

2009-10-05  Pierre d'Herbemont  <pdherbemont@webkit.org>

        Reviewed by Simon Fraser
        
        Support fullscreen in MediaPlayer (Mac)
        https://bugs.webkit.org/show_bug.cgi?id=26742

        Add a fullscreen button to the <video> controller if the media engine,
        and the theme have support for fullscreen, and can show appropriate controls.
        Clicking the button calls through the ChromeClient to the WebVideoFullscreenController
        in WebKit to do a nice animation to fullscreen, with a custom controller.

        * DerivedSources.make:
        * WebCore.Video.exp: Added.
        New export file for when VIDEO is enabled.
        
        * WebCore.base.exp: Export WebCore::HTMLNames::videoTag
        * WebCore.xcodeproj/project.pbxproj: New files
        
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::willRemove):
        (WebCore::HTMLMediaElement::screenRect):
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):
        (WebCore::HTMLMediaElement::platformMedia):
        Add fullscreen logic. platformMedia returns a pointer to platform-specific playback data
        used for fullscreen.
        
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen): Check with both the player and the ChromeClient
        to see if it's possile to enter fullscreen for this element.
        
        * page/ChromeClient.h:
        (WebCore::ChromeClient::supportsFullscreenForNode):
        (WebCore::ChromeClient::enterFullscreenForNode):
        (WebCore::ChromeClient::exitFullscreenForNode):
        New methods
        
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::platformMedia):
        (WebCore::MediaPlayer::platformMedia):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::platformMedia):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::platformMedia):
        (WebCore::MediaPlayerPrivate::supportsFullscreen):
        New methods to return platform-specific playback data for fullscreen.
        
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):
        Hook up the fullscreen button.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart):
        Allow the RenderThemeMac to make a decision about the availability of fullscreen based
        on the QuickTime version, since this affects what controls are availabl.e

2009-10-05  Kevin Decker  <kdecker@apple.com>

        Export a few more methods from Settings.h
        
        Rubberstamped by Jon Honeycutt.
        
        * WebCore.base.exp:

2009-10-05  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        1-char fix for obviously reverse condition.
        https://bugs.webkit.org/show_bug.cgi?id=30100
        No test since the only difference is a timing of GC.

        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::clear): Revert condition. Almost a typo.

2009-09-30  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Update platform-specific #ifdefs in GraphicsContext3D.h for the
        Chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=29936

        * platform/graphics/GraphicsContext3D.h:
        Changed #if PLATFORM(SKIA) to #if PLATFORM(CHROMIUM).

2009-10-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r47440): Inserting text in the middle of content in a scrolled textfield results in painting bugs
        <rdar://problem/7269108>
        https://bugs.webkit.org/show_bug.cgi?id=29982

        Test: fast/repaint/line-in-scrolled-clipped-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock): Use the unclipped overflow rect
        (including layout overflow) for the repaint rect calculation.

2009-10-05  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Chromium wants to turn off SharedWorkers at runtime
        https://bugs.webkit.org/show_bug.cgi?id=29757

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::sharedWorker):
        Now returns jsUndefined if isAvailable() returns false, to allow SharedWorkers to be disabled at runtime.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerRepository::isAvailable):
        Made SharedWorkers available by default.
        * workers/SharedWorkerRepository.h:
        Added definition for SharedWorkerRepository::isAvailable().

2009-10-05  Hironori Bono  <hbono@chromium.org>

        Reviewed by Eric Seidel.

        A super quick fix for Bug 28710.

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

        This change just resets the style sent to addStyleMarkup() to avoid an assertion error
        and creates an empty style when computedStyleAtPosition is 0 to avoid a crash.
        (This change is nothing but a better-than-crash change.)

        Tests: editing/selection/select-crash-001.html
               editing/selection/select-crash-002.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::editingStyleAtPosition): Resets the style sent to addStyleMarkup() if it is not valid.
        * editing/markup.cpp:
        (WebCore::createMarkup): Creates an empty style if computedStyleAtPosition is 0.

2009-10-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Silence duplicate errors logged for missing getComputedStyle
        implementations. Improves the error message as well.

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

2009-10-05  Julie Parent  <jparent@chromium.org>

        Unreviewed, Chromium build fix #3.  Add V8BeforeLoadEvent.[cc|h] to derived sources.

        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:

2009-10-05  Mark Rowe  <mrowe@apple.com>

        Try and fix the GTK build.

        * GNUmakefile.am:

2009-10-05  Julie Parent  <jparent@chromium.org>

        Unreviewed, Chromium build fix #2.  Add new BEFORELOADEVENT to V8ClassIndex.

        * bindings/v8/V8Index.h:

2009-10-05  Julie Parent  <jparent@chromium.org>

        Unreviewed, Chromium build fix.  Missing "," after entry for BeforeLoadEvent.idl. 

        * WebCore.gypi:

2009-10-05  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Add a beforeload event that will be fired before subresources load. (It isn't fired yet.)  The event
        has one field, the URL that is going to be requested.  Setting preventDefault will stop the load
        from occurring.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/BeforeLoadEvent.h: Added.
        (WebCore::BeforeLoadEvent::create):
        (WebCore::BeforeLoadEvent::initBeforeLoadEvent):
        (WebCore::BeforeLoadEvent::url):
        (WebCore::BeforeLoadEvent::BeforeLoadEvent):
        * dom/BeforeLoadEvent.idl: Added.
        * dom/EventNames.h:
        * page/DOMWindow.idl:

2009-10-05  Priit Laes  <plaes@plaes.org>

        Reviewed by Gustavo Noronha.

        Add Gentoo-specific paths for searching browser plugins.
        https://bugs.webkit.org/show_bug.cgi?id=30088

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories):

2009-10-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adele Peterson.

        Add functionality to pause/throttle CSS transitions/animations in a WebView
        https://bugs.webkit.org/show_bug.cgi?id=29942

        Exporting call from AnimationController

        * WebCore.base.exp:

2009-10-05  Kevin Decker  <kdecker@apple.com>

        Rubberstamped by Anders Carlsson.
        
        * WebCore.base.exp: Update export of HaltablePlugin/PluginHalterClient.
        * WebCore.xcodeproj/project.pbxproj: Likewise.

2009-10-05  Eric Seidel  <eric@webkit.org>

        No review, rolling out r49104.
        http://trac.webkit.org/changeset/49104

        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/ValidityState.cpp:
        * html/ValidityState.h:
        (WebCore::ValidityState::rangeUnderflow):
        (WebCore::ValidityState::rangeOverflow):
        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::SliderRange):
        (WebCore::SliderRange::valueFromElement):

2009-10-05  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Update style immediately when validation-related values are updated.
        https://bugs.webkit.org/show_bug.cgi?id=28868

        In order to apply :valid, :invalid, :optional or :required lively,
          - call setNeedsStyleRecalc() when properties which can change
            willValidate state are updated, and
             (Parent form element, name, disabled, readonly)
          - call updateValidity() when properties which can change validity
            state are updated. (value, pattern, required)

        Tests: fast/forms/input-live-pseudo-selectors.html
               fast/forms/textarea-live-pseudo-selectors.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        (WebCore::HTMLFormControlElement::required):
        (WebCore::HTMLFormControlElement::updateValidity):
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):

2009-10-05  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Implement min/max attributes, ValidityState.rangeUnderflow and
        ValidityState.rangeOverflow for <input type=number> and <input type=range>
        https://bugs.webkit.org/show_bug.cgi?id=29069

        Tests: fast/forms/ValidityState-rangeOverflow-number.html
               fast/forms/ValidityState-rangeOverflow-range.html
               fast/forms/ValidityState-rangeUnderflow-number.html
               fast/forms/ValidityState-rangeUnderflow-range.html
               fast/forms/input-minmax.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::rangeUnderflow):
        (WebCore::HTMLInputElement::rangeOverflow):
        (WebCore::HTMLInputElement::rangeMinimum):
        (WebCore::HTMLInputElement::rangeMaximum):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::rangeUnderflow):
        (WebCore::ValidityState::rangeOverflow):
        * html/ValidityState.h:
        * rendering/RenderSlider.cpp:
        (WebCore::SliderRange::SliderRange):
        (WebCore::SliderRange::valueFromElement):

2009-10-05  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Introduces
         - new CSS pseudo selector: "-webkit-input-list-button"
         - new CSS apperance type: "list-button"
         - new ControlPart value: "ListButtonPart"
        for the UI of the list attribute of the input element, and adds
        implementation to draw ListButtonPart on Mac.
        The code is guarded by ENABLE(DATALIST).

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

        Test: platform/mac/fast/forms/input-list-button-size.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * css/CSSValueKeywords.in:
        * css/html.css:
        * html/HTMLInputElement.cpp:
        * platform/ThemeTypes.h:
        (WebCore::):
        * platform/mac/ThemeMac.mm:
        (WebCore::listButtonSizes):
        (WebCore::button):
        (WebCore::paintButton):
        (WebCore::ThemeMac::controlSize):
        (WebCore::ThemeMac::minimumControlSize):
        (WebCore::ThemeMac::controlBorder):
        (WebCore::ThemeMac::paint):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-10-05  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30065>
        nodeTitleInfo should be placed in ElementsTreeOutline.
        
        Move nodeTitleInfo into ElementsTreeOutline.js from utilities.js.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype._updateTitle):
        (WebInspector.ElementsTreeElement.prototype._nodeTitleInfo):
        * inspector/front-end/utilities.js:

2009-10-02  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Inform the application when a new request is created
        https://bugs.webkit.org/show_bug.cgi?id=29975

        Emit a signal each time a request is created, with the request and the frame
        that created it.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::start):

2009-10-05  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        Add an ASSERT in updateGuidVersionMap.
        https://bugs.webkit.org/show_bug.cgi?id=30077

        * storage/Database.cpp:
        (WebCore::updateGuidVersionMap): ASSERT that the guidMutex() is locked.

2009-10-05  Nate Chapin  <japhet@chromium.org>

        Reviewed by Eric Seidel.

        Allow V8 to throw an exception in _NPN_SetException without worrying about context
        if we don't have enough information to find the correct context.

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

        Part of the fix for Chromium's failure of LayouTests/plugins/netscape-throw-exception.html.

        * bindings/v8/NPV8Object.cpp: 
        (_NPN_SetException): Don't suppress the exception if we can't find the relevant context.

2009-10-05  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Place "Close" button in docked mode on the same side as the window "Close" button in detached mode.

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

        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2009-10-05  J-P Nurmi  <jpnurmi@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Added pure virtual QWebPageClient::pluginParent()

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

        * platform/qt/QWebPageClient.h:

2009-10-05  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] windowsKeyCodeForKeyEvent() returns a wrong value for the F10 key.
        https://bugs.webkit.org/show_bug.cgi?id=30042

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2009-10-05  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix for ENABLE(WEB_SOCKETS) and v8.

        V8ObjectEventListener.h has been removed at r48978

        * bindings/v8/custom/V8WebSocketCustom.cpp:

2009-10-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector console stops working while JS in IFRAME is paused.

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

        * inspector/front-end/InjectedScript.js:
        (InjectedScript._evaluateOn):
        (InjectedScript.addInspectedNode):
        (InjectedScript._ensureCommandLineAPIInstalled):

2009-10-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Introduce inspected object groups for console
        and watch evaluation results so that they could be released
        explicitly.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::wrapObject):
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::wrapObject):
        (WebCore::InspectorBackend::releaseWrapperObjectGroup):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::wrapObject):
        (WebCore::InspectorController::unwrapObject):
        (WebCore::InspectorController::releaseWrapperObjectGroup):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addMessageToConsole):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.evaluate):
        (InjectedScript._evaluateAndWrap):
        (InjectedScript.evaluateInCallFrame):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane):
        (WebInspector.WatchExpressionsSection.prototype.update):

2009-10-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Carlson.

        Move mediaControls extras for the Qt port into WebCore/css like other ports

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

        * WebCore.pro:
        * WebCore.qrc:
        * css/mediaControlsQt.css: Renamed from WebCore/css/qt/mediaControls-extras.css.
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::extraMediaControlsStyleSheet):

2009-10-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Carlson.

        Rename WebCore/css/mediaControlsQT.css and MediaControllerThemeQT

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

        The QT suffix has been expanded to QuickTime, to not cause confusion
        and name-crashes with similar files in the Qt port.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * css/mediaControlsQuickTime.css: Renamed from WebCore/css/mediaControlsQT.css.
        * rendering/RenderThemeMac.mm:
        (WebCore::):
        (WebCore::mediaControllerTheme):
        (WebCore::RenderThemeMac::adjustSliderThumbSize):
        (WebCore::getUnzoomedRectAndAdjustCurrentContext):
        (WebCore::RenderThemeMac::extraMediaControlsStyleSheet):

2009-10-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.
        
        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30064>
        Syntax Highlighting CSS shouldn't be duplicated.

        Refactor syntax highlighting CSS into a new file, add it to the
        projects, and have SourceFrame.js and inspector.html include the
        new CSS file.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspectorSyntaxHighlight.css: Added.
        * inspector/front-end/WebKit.qrc:

2009-10-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.
        
        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30062>
        Inspector should syntax highlight JS/CSS in elements view.

        Add syntax highlighting of CSS and JavaScript tags to the elements panel.
        Copied CSS rules from SourceFrame.js to inspector.css, and have the text nodes
        in utilities.js call the CSS or JS Syntax highlighters if their parent is a script
        or style tag.

        * inspector/front-end/inspector.css:
        * inspector/front-end/utilities.js:

2009-10-04  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel

        Enable Web Sockets in chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=29917

        * WebCore.gyp/WebCore.gyp:

2009-10-04  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustova Noronha.

        [GTK] performs a POST when refreshing a view that was obtained with a GET
        https://bugs.webkit.org/show_bug.cgi?id=29761

        Update the HTTP method in the request stored by willSendRequest
        after a redirect, since it could have changed.

        Test: http/tests/navigation/postredirect-reload.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

2009-10-04  Xan Lopez  <xlopez@igalia.com>

        Revert previous patch, as the newly added test breaks other tests.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

2009-10-04  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustova Noronha.

        [GTK] performs a POST when refreshing a view that was obtained with a GET
        https://bugs.webkit.org/show_bug.cgi?id=29761

        Update the HTTP method in the request stored by willSendRequest
        after a redirect, since it could have changed.

        Test: http/tests/navigation/postredirect-reload.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

2009-10-04  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Fixed Function leak in V8LazyEventListener.
        (Should fix the remaning leak in
        https://bugs.webkit.org/show_bug.cgi?id=29093).
        V8LazyEventListeners used to create FunctionTemplates for each
        wrapped listener which in turn created Functions that were cached
        forever in V8 Context. Now there is at most one such Function per
        Context.
        https://bugs.webkit.org/show_bug.cgi?id=30060

        Added new hidden property name to store toString result:
        * bindings/v8/V8HiddenPropertyName.cpp:
        * bindings/v8/V8HiddenPropertyName.h:

        Switched to static FunctionTemplate:
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListenerToString):
        (WebCore::V8LazyEventListener::prepareListenerObject):

2009-10-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        CSS Source View Should be Syntax Highlighted
        https://bugs.webkit.org/show_bug.cgi?id=14359

          Support for WebKit's CSS Variables @variables and var()

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

2009-10-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector should remember preferences for docked/undocked etc
        https://bugs.webkit.org/show_bug.cgi?id=29089

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources): toggle the preference
        * inspector/front-end/inspector.js:
        (WebInspector._loadPreferences): factored out loading preferences
        (WebInspector.loaded):

2009-10-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        CSS Source View Should be Syntax Highlighted
        https://bugs.webkit.org/show_bug.cgi?id=14359

          Trigger the Syntax Highlighter for CSS files.

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.syntaxHighlightJavascript):
        (WebInspector.SourceFrame.prototype.syntaxHighlightCSS):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._contentLoaded):

          Factored out the Syntax Highlighting procedure into a "Class"
          Added CSSSourceSyntaxHighlighter and JavaScriptSourceSyntaxHighlighter

        (WebInspector.SourceSyntaxHighligher):
        (WebInspector.SourceSyntaxHighligher.prototype.createSpan):
        (WebInspector.SourceSyntaxHighligher.prototype.process.processChunk):
        (WebInspector.SourceSyntaxHighligher.prototype.process):
        (WebInspector.CSSSourceSyntaxHighligher): the CSS Highlighter
        (WebInspector.JavaScriptSourceSyntaxHighligher): the JS Highlighter

2009-10-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Factor back-forward list methods out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30037

        This change moves these back-forward related methods from FrameLoader
        to Page.  It's possible we should move these methods into some kind of
        "page controller" object, but we can figure that out in a future patch.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::timerFired):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close):
        * page/History.cpp:
        (WebCore::History::length):
        * page/Page.cpp:
        (WebCore::Page::canGoBackOrForward):
        (WebCore::Page::goBackOrForward):
        (WebCore::Page::getHistoryLength):
        * page/Page.h:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: prepare InspectorController for being used from layout tests.
        This change adds evaluateForTestInFrontend method with the callback that
        allows evaluating arbitrary code in the frontend context.

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

        * WebCore.Inspector.exp:
        * WebCore.order:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::didEvaluateForTestInFrontend):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::evaluateForTestInFrontend):
        (WebCore::InspectorController::didEvaluateForTestInFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::evaluateForTestInFrontend):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/inspector.js:
        (WebInspector.evaluateForTestInFrontend):

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

        Reviewed by Timothy Hatcher.

        Web Inspector: Node search mode is not getting reset on element selection.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):

2009-10-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <https://bugs.webkit.org/show_bug.cgi?id=30036>
        Should be able to resize Cookie Columns.

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype.update.callback):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype.resize):

2009-09-25  Jon Honeycutt  <jhoneycutt@apple.com>

        Make WebCore::PluginView participate in plug-in halting.

        Reviewed by Sam Weinig.

        * platform/graphics/BitmapImage.h:
        Declare a create() function that takes an HBITMAP.

        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::create):
        Use GetObject() to fill out a DIBSECTION structure for the given
        HBITMAP. Call CGBitmapContextCreate() to create a CG context from the
        bits of the bitmap. Create a CG image from the context, and pass this
        when creating a new BitmapImage.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        If we successfully started, tell our parent frame's Page.
        (WebCore::PluginView::stop):
        Tell our parent frame's Page that we stopped.
        (WebCore::PluginView::node):

        * plugins/PluginView.h:
        Inherit from HaltablePlugin.
        (WebCore::PluginView::setPlatformPluginWidget):
        On platforms where the platform plug-in widget is the WebCore::Widget's
        platform widget, have setPlatformPluginWidget() call
        setPlatformWidget().

        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::halt):
        Stubbed.
        (WebCore::PluginView::restart):
        Stubbed.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::halt):
        Stubbed.
        (WebCore::PluginView::restart):
        Stubbed.

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::halt):
        Stubbed.
        (WebCore::PluginView::restart):
        Stubbed.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::halt):
        Stubbed.
        (WebCore::PluginView::restart):
        Stubbed.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::platformDestroy):
        After destroying the window, set the platform plug-in widget to 0 to
        ensure that Widget isn't holding a stale handle.
        (WebCore::PluginView::halt):
        Have our element's RenderWidget display a screenshot of the plug-in,
        then stop the plug-in and destroy it.
        (WebCore::PluginView::restart):
        Clear the RenderWidget's substitute image, then start the plug-in.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::showSubstituteImage):
        Set m_substituteImage to the passed image, and repaint.
        (WebCore::RenderWidget::paint):
        If we have a substitute image, paint that instead of allowing the
        widget to paint itself.

        * rendering/RenderWidget.h:
        Declare showSubstituteImage(). Added a member to store the substitute
        image.

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

        Reviewed by Darin Adler.

        Move PolicyCheck out of FrameLoader.{h,cpp}
        https://bugs.webkit.org/show_bug.cgi?id=30035

        Purely code motion (and adding a destructor).

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/PolicyCheck.cpp:
        * loader/PolicyCheck.h:

2009-10-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Add NPNVToolkit value quirk in plugins for nspluginwrapper.
        Plugin error message was:
        ERROR: failed to initialize brower-side RPC events listener
        https://bugs.webkit.org/show_bug.cgi?id=25053

        (WebCore::staticPluginQuirkRequiresGtkToolKit_NPN_GetValue):
        (WebCore::PluginPackage::load):

2009-10-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] X sync our XEmbed container window creation before sending the
        xid to plugins.
        https://bugs.webkit.org/show_bug.cgi?id=25053

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):

2009-10-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Setting zero size on a container of a video element doesn't hide the controller
        https://bugs.webkit.org/show_bug.cgi?id=30031
        
        Fix a logic error in enclosingCompositingLayer() when mixing normal flow and 
        positioned layers. This resulted in enclosingCompositingLayer() giving back a different
        answer to the logic used to actually parent compositing layers, so layer positions
        and layer hierarchy would be out of agreement.
        
        Test: compositing/geometry/clipped-video-controller.html

        * rendering/RenderLayer.cpp:
        (WebCore::compositingContainer):
        (WebCore::RenderLayer::enclosingCompositingLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::setCompositingParent):

2009-10-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        - Move the following methods of HTMLInputElement and HTMLTextAreaElement
          to HTMLTextFormControlElement.
           setSelectionStart()
           setSelectionEnd()
           select()
           setSelectionRange()
           selectionStart()
           selectionEnd()
           selection()

        - Introduce cachedSelectionStart() and cachedSelectionEnd().

        - Unify HTMLInputElement::isTextFieldWithRenderer() and
         HTMLTextAreaElement::rendererAfterUpdateLayout() into textRendererAfterUpdateLayout().
        
        - Unify a part of parseMappedAttribute() of HTMLInputElement and HTMLTextAreaElement.

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

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::textRendererAfterUpdateLayout):
        (WebCore::HTMLTextFormControlElement::setSelectionStart):
        (WebCore::HTMLTextFormControlElement::setSelectionEnd):
        (WebCore::HTMLTextFormControlElement::select):
        (WebCore::HTMLTextFormControlElement::setSelectionRange):
        (WebCore::HTMLTextFormControlElement::selectionStart):
        (WebCore::HTMLTextFormControlElement::selectionEnd):
        (WebCore::HTMLTextFormControlElement::selection):
        (WebCore::HTMLTextFormControlElement::parseMappedAttribute):
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::select):
        (WebCore::HTMLInputElement::cachedSelectionStart):
        (WebCore::HTMLInputElement::cachedSelectionEnd):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::cachedSelectionStart):
        (WebCore::HTMLTextAreaElement::cachedSelectionEnd):

2009-10-02  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Disconnect event listeners on navigation.
        Fixes http://crbug.com/23597.
        https://bugs.webkit.org/show_bug.cgi?id=30027

        Added V8ListenerGuard that is shared by listeners and proxy. On
        navigation proxy sets a flag in the guard turning off listeners.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8ListenerGuard::create):
        (WebCore::V8ListenerGuard::isDisconnected):
        (WebCore::V8ListenerGuard::disconnectListeners):
        (WebCore::V8ListenerGuard::V8ListenerGuard):
        (WebCore::V8AbstractEventListener::disconnected):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getEventListener):
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findOrCreateWrapper):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::disconnectFrame):
        (WebCore::V8Proxy::disconnectEventListeners):
        (WebCore::V8Proxy::clearForNavigation):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::listenerGuard):
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::V8WorkerContextEventListener):
        * bindings/v8/V8WorkerContextEventListener.h:
        (WebCore::V8WorkerContextEventListener::create):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::WorkerContextExecutionProxy):
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):
        * bindings/v8/custom/V8CustomEventListener.h:
        (WebCore::V8EventListener::create):

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

        Reviewed by Dimitri Glazkov.

        [chromium] Fix WebGL build after CustomGetter constructor changes
        https://bugs.webkit.org/show_bug.cgi?id=30020

        * page/DOMWindow.idl:
        Changed CustomGetter to JSCCustomGetter for CanvasArray constructors.

2009-10-02  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: text in a "Request Payload" section disappears on selection
        https://bugs.webkit.org/show_bug.cgi?id=29967

        No new tests.

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshRequestPayload):

2009-10-02  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Recursion guard for V8Proxy::callFunction.
        Fixes http://crbug.com/23278.
        https://bugs.webkit.org/show_bug.cgi?id=29974

        Test: fast/xmlhttprequest/xmlhttprequest-recursive-sync-event.html

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::callFunction):

2009-10-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Fix test breakages by adding null checks, and putting inspector code in
        ENABLE(INSPECTOR).

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):

2009-10-02  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Clean up the QNetworkReplyHandler to only apply HTTP headers
        for protocols in the HTTP family.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2009-10-02  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Move error check into sendResponseIfNeeded() as suggested
        by Eric Seidel. Also, remove some dead code.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2009-10-02  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Assertion failure in CompositeEditCommand::moveParagraphs() and crash in Node::nodeIndex() when pasting.
        <rdar://problem/7148712>
        https://bugs.webkit.org/show_bug.cgi?id=28992

        Test: editing/selection/replace-selection-crash.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::mergeEndIfNeeded): Handle properly the case of
        the destination position matching the end of the paragraph to move.

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

        Reviewed by Dimitri Glazkov.

        Implement per-storage-area quotas for LocalStorage
        https://bugs.webkit.org/show_bug.cgi?id=29991

        I put 90% of the code in StorageMap since the decision to allow an update is
        closely tied to quota tracking.  The quota is set via a page's Settings class.
        Like with the local storage path and whether it's enabled, it's assumed that
        all pages in the same group will have the same settings.  The setting defaults
        to 5mb which is what the spec suggests, but it can easily be changed to
        anything else--including StorageMap::noQuota.  Any values in LocalStorage are
        grandfathered in regarudless of quota, so importItem only tracks (and will
        never block) imports.

        I believe this change is a good transition to more complex quota management.
        For example, if we wanted to track quotas in the SQLite DB, then we'd just add
        a function to the StorageMap that sets the quota.  This would be fine since all
        use of LocalStorage is blocked on the import completing, so you'd never hit a
        quota error in the mean time.  Also, if embedders wanted to ask the user
        whether to expand the quota whenever it's hit (before deciding whether or not
        to raise an exception), a callback via the chrome client should be fairly easy.
        That said, I think it's best to add these features in steps rather than one
        huge patch.  (Both of these are on my TODO list, btw.)

        Included is a layout test that verifies the behavior.  It assumes the default
        quota is 5mb (since that's what Settings defaults to).

        Test: storage/domstorage/localstorage/quota.html

        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setLocalStorageQuota):
        * page/Settings.h:
        (WebCore::Settings::localStorageQuota):
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::create):
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        (WebCore::StorageAreaImpl::setItem):
        (WebCore::StorageAreaImpl::clear):
        * storage/StorageAreaImpl.h:
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::create):
        (WebCore::StorageMap::StorageMap):
        (WebCore::StorageMap::copy):
        (WebCore::StorageMap::setItem):
        (WebCore::StorageMap::removeItem):
        (WebCore::StorageMap::importItem):
        * storage/StorageMap.h:
        (WebCore::StorageMap::quota):
        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::localStorageNamespace):
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::localStorageNamespace):
        (WebCore::StorageNamespaceImpl::sessionStorageNamespace):
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebCore::StorageNamespaceImpl::copy):
        (WebCore::StorageNamespaceImpl::storageArea):
        * storage/StorageNamespaceImpl.h:

2009-10-02  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Database Inspector crashes Safari when table has more than 21 columns
        https://bugs.webkit.org/show_bug.cgi?id=29924

        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.dataGridForResult): adjust the minimum column width percentage to be flexible for many columns.

2009-10-02  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Fixes <http://webkit.org/b/14370>.
        Inspector's timeline should record when certain DOM events fired.
        
        This patch adds calls into the Web Inspector when the main frame
        fires an load event, and when the document fires its DOMContent
        event. Once these values are passed in, they are sent to the Web Inspector
        as a timing change, and these are denoted by vertical lines in the resources
        panel (blue for DOM Content, red for load event).

        * English.lproj/localizedStrings.js: Added tooltip text.
        * dom/Document.cpp:
        (WebCore::Document::finishedParsing): Added an Inspector callback for DOM Content.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent): Tell the main resource it got the event.
        (WebCore::InspectorController::mainResourceFiredLoadEvent): Ditto.
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource): Added new variables.
        (WebCore::InspectorResource::updateScriptObject): Send new variables to inspector.js.
        (WebCore::InspectorResource::markDOMContentEventTime): Send a TimingChange event.
        (WebCore::InspectorResource::markLoadEventTime): Ditto.
        * inspector/InspectorResource.h:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.get mainResourceLoadTime):
        (WebInspector.ResourcesPanel.prototype.set mainResourceLoadTime):
        (WebInspector.ResourcesPanel.prototype.get mainResourceDOMContentTime):
        (WebInspector.ResourcesPanel.prototype.set mainResourceDOMContentTime):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._updateGraphDividersIfNeeded): Draw dividers for event timings.
        (WebInspector.ResourceTimeCalculator.prototype.computePercentageFromEventTime):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent): Add an Inspector callback for the Load event.

2009-10-02  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Add support for blacklist patterns to user stylesheets and scripts in addition to whitelist patterns.

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::pageGroupUserSheets):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptsForWorld):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScript):
        (WebCore::PageGroup::addUserStyleSheet):
        (WebCore::PageGroup::removeUserContentWithURLForWorld):
        (WebCore::PageGroup::removeUserContentForWorld):
        * page/PageGroup.h:
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::matchesPatterns):
        * page/UserContentURLPattern.h:
        * page/UserScript.h:
        (WebCore::UserScript::UserScript):
        (WebCore::UserScript::whitelist):
        (WebCore::UserScript::blacklist):
        * page/UserStyleSheet.h:
        (WebCore::UserStyleSheet::UserStyleSheet):
        (WebCore::UserStyleSheet::whitelist):
        (WebCore::UserStyleSheet::blacklist):

2009-10-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Build fix when SVG is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=30011

        Move TextRenderingMode related functions out from
        the ENABLE(SVG) guard.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextRenderingMode):

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

        Reviewed by Oliver Hunt.

        WebGL crashes with recent CanvasArray change
        https://bugs.webkit.org/show_bug.cgi?id=30018

        Test: fast/canvas/webgl/array-unit-tests.html

        * html/canvas/CanvasArray.cpp:
        (WebCore::CanvasArray::CanvasArray):
        Fix bug where PassRefPtr was tested after transferring value to RefPtr.

2009-10-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Mark Rowe.

        <https://bugs.webkit.org/show_bug.cgi?id=29989>
        Safari version number shouldn't be exposed in WebKit code
        
        For a WebKit version of 532.3.4:
        Product version is: 5.32.3.4 (was 4.0.3.0)
        File version is: 5.32.3.4 (was 4.532.3.4)

        * WebCore.vcproj/QTMovieWin.rc:

2009-10-02  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

        Enable two point radial gradients in Chromium/Skia.

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

        Covered by the following tests:

        LayoutTests/svg/W3C-SVG-1.1/pservers-grad-13-b.svg
        LayoutTests/fast/backgrounds/svg-as-background-3.html
        LayoutTests/fast/gradients/generated-gradients.html
        LayoutTests/fast/gradients/simple-gradients.html

        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::platformGradient):

2009-10-02  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

        Conditionally guard cursor code (cursor and updateCursor functions) with !QT_NO_CURSOR.
        Otherwise, it is inconsistent with class declaration of QCursor.

        No new tests.

        * platform/qt/QWebPageClient.h:

2009-10-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] missing support for anamorphic PAR video size
        https://bugs.webkit.org/show_bug.cgi?id=29717

        cleanup of caps handling in the video sink

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_set_caps):

2009-10-02  Prasanth Ullattil  <prasanth.ullattil@nokia.com>

        Reviewed by Simon Hausmann.

        Fix compiler warnings about unused function arguments.

        * bridge/qt/qt_class.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::initializeParserContext):
        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/qt/FontFallbackListQt.cpp:
        (WebCore::FontFallbackList::setPlatformFont):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::setURLForRect):
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::frameBufferAtIndex):
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::setEndTime):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::containsCharacters):
        * platform/graphics/qt/StillImageQt.h:
        (WebCore::StillImage::destroyDecodedData):
        * platform/network/qt/DnsPrefetchHelper.h:
        (WebCore::DnsPrefetchHelper::lookedUp):
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::ContextMenu::setPlatformDescription):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asURL):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::populate):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::supportsFocusRing):
        (WebCore::RenderThemeQt::systemFont):
        (WebCore::RenderThemeQt::adjustButtonStyle):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQt::paintMediaSeekBackButton):
        (WebCore::RenderThemeQt::paintMediaSeekForwardButton):
        * platform/qt/ScrollViewQt.cpp:
        (WebCore::ScrollView::platformAddChild):
        * platform/qt/SearchPopupMenuQt.cpp:
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/qt/TemporaryLinkStubs.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::paint):
        * xml/XSLStyleSheetQt.cpp:
        (WebCore::XSLStyleSheet::loadChildSheet):
        (WebCore::XSLStyleSheet::setParentStyleSheet):
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTMessageHandler::handleMessage):
        (WebCore::XSLTProcessor::transformToString):

2009-10-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] missing support for anamorphic PAR video size
        https://bugs.webkit.org/show_bug.cgi?id=29717

        Scale the cairo surface of the video sink depending on the
        pixel-aspect-ratio of the video buffer to paint. Also
        destruct/re-create the surface when setSize() is called with a new
        size.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::naturalSize):
        (WebCore::MediaPlayerPrivate::setSize):
        (WebCore::MediaPlayerPrivate::paint):
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_idle_func):

2009-10-02  Ben Murdoch  <benm@google.com>

        Reviewed by David Kilzer.

        Stale database version persists through browser refresh (changeVersion doesn't work)
        https://bugs.webkit.org/show_bug.cgi?id=27836

        Tests: storage/change-version-handle-reuse.html
               storage/change-version.html

        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Implement the V8 binding for database.changeVersion().
        (WebCore::createTransaction): Fix a bug that was checking the wrong argument index to save the success callback.
        * storage/Database.cpp:
        (WebCore::updateGuidVersionMap): Safely update the Guid/version hash map.
        (WebCore::Database::~Database): Remove code that removes the database from the guid->database and guid->version maps.
        (WebCore::Database::setVersionInDatabase): Add a comment to explain some behaviour.
        (WebCore::Database::close): Move the code that updates the maps from the destructor to here.
        (WebCore::Database::performOpenAndVerify): Call updateGuidVersionMap instead of setting the hash map directly.
        (WebCore::Database::setExpectedVersion): Update the in memory guid->version map when we want to update the database version.

2009-10-02  Janne Koskinen <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        Partial WINSCW build fix.

        Add parentheses around the function pointer declaration, similar to the
        second hunk in r48825.

        * loader/CachedResourceHandle.h:

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

        Unreviewed attempted build fix by Xcode magic.

        * WebCore.xcodeproj/project.pbxproj:

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

        Unreviewed build fix.  Actually add the new files.

        * loader/RedirectScheduler.cpp: Added.
        (WebCore::ScheduledRedirection::):
        (WebCore::ScheduledRedirection::ScheduledRedirection):
        (WebCore::RedirectScheduler::RedirectScheduler):
        (WebCore::RedirectScheduler::~RedirectScheduler):
        (WebCore::RedirectScheduler::redirectScheduledDuringLoad):
        (WebCore::RedirectScheduler::clear):
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        (WebCore::RedirectScheduler::scheduleRefresh):
        (WebCore::RedirectScheduler::locationChangePending):
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        (WebCore::RedirectScheduler::timerFired):
        (WebCore::RedirectScheduler::schedule):
        (WebCore::RedirectScheduler::startTimer):
        (WebCore::RedirectScheduler::cancel):
        * loader/RedirectScheduler.h: Added.

2009-10-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Move RedirectScheduler to its own file
        https://bugs.webkit.org/show_bug.cgi?id=29952

        This change is purely code motion.

        No behavior change.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/RedirectScheduler.cpp: Added.
        (WebCore::ScheduledRedirection::):
        (WebCore::ScheduledRedirection::ScheduledRedirection):
        (WebCore::RedirectScheduler::RedirectScheduler):
        (WebCore::RedirectScheduler::~RedirectScheduler):
        (WebCore::RedirectScheduler::redirectScheduledDuringLoad):
        (WebCore::RedirectScheduler::clear):
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        (WebCore::RedirectScheduler::scheduleRefresh):
        (WebCore::RedirectScheduler::locationChangePending):
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        (WebCore::RedirectScheduler::timerFired):
        (WebCore::RedirectScheduler::schedule):
        (WebCore::RedirectScheduler::startTimer):
        (WebCore::RedirectScheduler::cancel):
        * loader/RedirectScheduler.h: Added.

2009-10-02  Dave MacLachlan  <dmaclach@gmail.com>

        Reviewed by David Levin.

        Clean up warnings in WebCore/bindings/v8/npruntime.cpp
        https://bugs.webkit.org/show_bug.cgi?id=29971

        Gets rid of warnings on gcc about using anonymous namespaces 
          warning: 'StringKeyHashTraits' has a base
          'WTF::GenericHashTraits<<unnamed>::StringKey>' 
          whose type uses the anonymous namespace
        and
          warning: 'WTF::PairHashTraits<StringKeyHashTraits,
          WTF::HashTraits<PrivateIdentifier*> >' has a base
          'WTF::GenericHashTraits<std::pair<<unnamed>::StringKey,
          PrivateIdentifier*> >' whose type uses the anonymous namespace

        No tests required.

        * bindings/v8/npruntime.cpp:

2009-10-01  Mark Rowe  <mrowe@apple.com>

        Fix the Tiger build.  Don't unconditionally enable 3D canvas as it is not supported on Tiger.

        * Configurations/FeatureDefines.xcconfig:

2009-10-01  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Turn on ENABLE_3D_CANVAS in TOT
        https://bugs.webkit.org/show_bug.cgi?id=29906

        Fixed a bug found when running tests with flag on

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.base.exp:
        * bindings/js/JSCanvasArrayBufferConstructor.h:
        (WebCore::construct):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/canvas/CanvasArray.cpp:
        (WebCore::CanvasArray::CanvasArray):
        * html/canvas/CanvasByteArray.cpp:
        (WebCore::CanvasByteArray::create):
        * html/canvas/CanvasFloatArray.cpp:
        (WebCore::CanvasFloatArray::create):
        * html/canvas/CanvasIntArray.cpp:
        (WebCore::CanvasIntArray::create):
        * html/canvas/CanvasShortArray.cpp:
        (WebCore::CanvasShortArray::create):
        * html/canvas/CanvasUnsignedByteArray.cpp:
        (WebCore::CanvasUnsignedByteArray::create):
        * html/canvas/CanvasUnsignedIntArray.cpp:
        (WebCore::CanvasUnsignedIntArray::create):
        * html/canvas/CanvasUnsignedShortArray.cpp:
        (WebCore::CanvasUnsignedShortArray::create):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setWebGLEnabled):
        * page/Settings.h:
        (WebCore::Settings::webGLEnabled):

2009-10-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/7264725> Re-add a vendor prefix to box-
        shadow (29927)
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=29927

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::ShadowParseContext::ShadowParseContext):
        (WebCore::ShadowParseContext::commitValue):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::ShadowParseContext::commitColor):
        (WebCore::cssPropertyID):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap):

2009-10-01  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Sam Weinig.

        At bad merge at some point in the development of my patch must have 
        put TextRenderMode.h in a weird spot in the xcodeproj. Moving it 
        back where it belongs!

        * WebCore.xcodeproj/project.pbxproj:

2009-09-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove FrameLoader::schedule* APIs
        https://bugs.webkit.org/show_bug.cgi?id=29950

        Change clients of FrameLoader::schedule* to call redirectScheduler
        directly.

        No behavior change.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::createWindow):
        (WebCore::JSDOMWindow::open):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::reload):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::navigateIfAllowed):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::createWindow):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::processHttpEquiv):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::requestFrame):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::receivedFirstData):
        * loader/FrameLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        * page/History.cpp:
        (WebCore::History::back):
        (WebCore::History::forward):
        (WebCore::History::go):

2009-10-01  Beth Dakin  <bdakin@apple.com>

        Just removing a comment I accidentally committed earlier. 

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCFStringAttributes):

2009-09-30  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        Clean up use of const and mutable in StorageMap
        https://bugs.webkit.org/show_bug.cgi?id=29933

        What's the point of having every single member variable be mutable and nearly
        every method be const?  Let's clean it up.

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::setIteratorToIndex):
        (WebCore::StorageMap::key):
        (WebCore::StorageMap::importItem):
        * storage/StorageMap.h:

2009-10-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/6934421> Support CSS for Text Kerning and 
        ligature
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=6136

        This patch makes the SVG CSS property text-rendering work with any 
        HTML, much like it does in Firefox. It accepts four possible input 
        values: auto, optimizeSpeed, optimizeLegibility, and 
        geometricPrecision. Right now, in this implementation, here is what 
        those values correspond to:

        auto = optimizeSpeed = what we normally when the value's not set
        optimizeLegibility = geometricPrecision = ligatures kerning

        Add new file TextRenderingMode.h to the project files.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        CSS support for the new CSSPropertyTextRendering
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextRenderingMode):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:

        All the old SVG CSS support for this property can go away. When 
        it's used in SVG, it will just fall into the normal HTML case.
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * css/SVGCSSValueKeywords.in:

        FontDescription stores the m_textRendering bit.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::textRenderingMode):
        (WebCore::FontDescription::setTextRenderingMode):
        (WebCore::FontDescription::operator==):

        We want to fall into the complex text rendering code path if 
        kerning and ligatures have been enabled with this property.
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::canUseGlyphCache):

        Now takes a TextRenderingMode as a parameter.
        * platform/graphics/SimpleFontData.h:

        New header for the enum.
        * platform/graphics/TextRenderingMode.h: Added.
        (WebCore::):

        getCFStringAttributes() now takes a TextRenderingMode as an 
        attribute.
        * platform/graphics/mac/CoreTextController.cpp:
        (WebCore::CoreTextController::collectCoreTextRunsForCharacters):

        Enable kerning and ligatures whenever the TextRenderingMode is 
        OptimizeLegibility or GeometricPrecision
        * platform/graphics/mac/FontMacATSUI.mm:
        (WebCore::disableLigatures):
        (WebCore::initializeATSUStyle):
        (WebCore::ATSULayoutParameters::initialize):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCFStringAttributes):

        More SVG CSS stuff that isn't needed anymore since SVG will use the 
        new HTML CSS implementation.
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h:

2009-10-01  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Use isClosure property of scope proxy to decide whether the
        scope is a closure.

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

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

2009-10-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Odd color transitions on anchors with transition-property: all
        https://bugs.webkit.org/show_bug.cgi?id=29911

        When transitioning maybe-invalid colors, if the source and destination
        color are both invalid, then don't animate.
        
        This fixes an issue where a child element of an element running a color
        transition, with -webkit-transition-property:all, would show a color change.
        This happened because the "maybe invalid color" logic copied the color style
        into -webkit-text-fill-color for both endpoints, causing -webkit-text-fill-color
        to animate while the transition ran, and to then to disappear when the transition
        finished.
        
        Test: transitions/color-transition-all.html

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperMaybeInvalidColor::equals):
        (WebCore::PropertyWrapperMaybeInvalidColor::blend):

2009-10-01  Victor Wang  <victorw@chromium.org>

        Reviewed by Oliver Hunt.

        Allow dragging a node who has child nodes.

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

        Test: fast/events/drag-parent-node.html

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

2009-10-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] media player: better mute support
        https://bugs.webkit.org/show_bug.cgi?id=29960

        Handle volume and mute state with the two corresponding properties
        of playbin2.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::setMuted):
        (WebCore::MediaPlayerPrivate::setVolume):

2009-10-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] video sink pad template colorspace is wrong
        https://bugs.webkit.org/show_bug.cgi?id=29953

        Set sink pad template colorspace depending on byte order.

        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_idle_func):

2009-10-01  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Refactored V8 event listeners:
        (This change should fix http://crbug.com/21079 and
        https://bugs.webkit.org/show_bug.cgi?id=29093.)
         o All listeners use weak handles to JS objects to avoid creating
           cycles and leaking memory.
         o "Object" variants of listeners removed.
         o All event accessor callbacks are generated.
         o Custom event accessors removed.
         o All wrappers have hidden dependencies on their listeners to
           prevent listeners from being collected.
         o All variats of getEventListener function grouped in V8DOMWrapper.
         o Pointers to C+EventListener wrappers are stored in JS objects
           instead of event listener lists.
        https://bugs.webkit.org/show_bug.cgi?id=29825

        * WebCore.gypi: Removed "Object" listeners.
        * bindings/scripts/CodeGeneratorV8.pm: Now handles event accessors.
        * bindings/v8/DOMObjectsInclude.h:

        V8AbstractEventListener manages weak JS handle:
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::weakEventListenerCallback):
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::~V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::disposeListenerObject):
        (WebCore::V8AbstractEventListener::setListenerObject):
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::cast):
        (WebCore::V8AbstractEventListener::isLazy):
        (WebCore::V8AbstractEventListener::getListenerObject):
        (WebCore::V8AbstractEventListener::getExistingListenerObject):
        (WebCore::V8AbstractEventListener::hasExistingListenerObject):
        (WebCore::V8AbstractEventListener::disconnectFrame):
        (WebCore::V8AbstractEventListener::disconnected):
        (WebCore::V8AbstractEventListener::prepareListenerObject):
        (WebCore::V8AbstractEventListener::lineNumber):
        (WebCore::V8AbstractEventListener::virtualisAttribute):

        Grouped getEventListener functions:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::getEventListener):
        * bindings/v8/V8DOMWrapper.h:

        Removed most event listener objects bookkeeping:
        * bindings/v8/V8EventListenerList.cpp:
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findWrapper):
        (WebCore::V8EventListenerList::clearWrapper):
        (WebCore::V8EventListenerList::doFindWrapper):
        (WebCore::V8EventListenerList::getHiddenProperty):
        (WebCore::V8EventListenerList::findOrCreateWrapper):

        Added hidden properties for storing EventListener wrappers:
        * bindings/v8/V8HiddenPropertyName.cpp:
        (WebCore::V8HiddenPropertyName::listener):
        (WebCore::V8HiddenPropertyName::attributeListener):
        * bindings/v8/V8HiddenPropertyName.h:

        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore::V8LazyEventListener::callListenerFunction):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::isLazy):
        * bindings/v8/V8ObjectEventListener.cpp: Removed.
        * bindings/v8/V8ObjectEventListener.h: Removed.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::disconnectFrame):
        (WebCore::V8Proxy::disconnectEventListeners):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::reportError):
        (WebCore::V8WorkerContextEventListener::getReceiverObject):
        * bindings/v8/V8WorkerContextEventListener.h:
        * bindings/v8/V8WorkerContextObjectEventListener.cpp: Removed.
        * bindings/v8/V8WorkerContextObjectEventListener.h: Removed.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::findOrCreateEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):
        (WebCore::V8EventListener::getListenerFunction):
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/custom/V8CustomEventListener.h:
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:

2009-10-01  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Rename QWebGraphicsItem to QGraphicsWebView

        * WebCore.pro:

2009-10-01  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Read-only transactions do not change file sizes and therefore
        should not trigger quota updates.

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

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        (WebCore::SQLTransaction::runStatements):

2009-09-30  Timothy Hatcher  <timothy@apple.com>

        Fix list box scrolling by correctly overriding the scroll()
        function on RenderBox.

        <rdar://problem/7255440> REGRESSION (r48683): Mousewheel scrolling
        of listboxes is broken (29756)

        Reviewed by Dan Bernstein.

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scroll):
        * rendering/RenderListBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::scroll):
        * rendering/RenderTextControlSingleLine.h:

2009-10-01  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Make a copy of listeners array before dispatching an event in
        WebInspector.Object.prototype.dispatchEventToListeners. Otherwise if current
        listener removes itself from the array next listener will be skipped.

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

        * inspector/front-end/Object.js:
        (WebInspector.Object.prototype.dispatchEventToListeners): make a copy of listeners array before dispatching an event

2009-10-01  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] GtkIMContext filtering interferes with DOM key events
        https://bugs.webkit.org/show_bug.cgi?id=28733

        Ensure that keyboard events filtered by the GtkIMContext still create
        the proper DOM events.

        No tests added. Instead previously skipped tests have been enabled.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        (WebCore::singleCharacterString):

2009-10-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] data: uri support in media player
        https://bugs.webkit.org/show_bug.cgi?id=29842

        New GStreamer element to handle data: uris. For now only base64
        encoded data is supported. Decoded data is handed over to
        giostreamsrc.

        * GNUmakefile.am:
        * platform/graphics/gtk/DataSourceGStreamer.cpp: Added.
        (_do_init):
        (webkit_data_src_base_init):
        (webkit_data_src_class_init):
        (webkit_data_src_reset):
        (webkit_data_src_init):
        (webkit_data_src_finalize):
        (webkit_data_src_uri_get_type):
        (webkit_data_src_uri_get_protocols):
        (webkit_data_src_uri_get_uri):
        (webkit_data_src_uri_set_uri):
        (webkit_data_src_uri_handler_init):
        * platform/graphics/gtk/DataSourceGStreamer.h: Added.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::do_gst_init):
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::mimeTypeCache):

2009-09-30  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=29944
        
        Reduces false positives in the XSSAuditor by explicitly allowing requests
        that do not contain illegal URI characters.
        
        As a side effect of this change, the tests property-inject.html, 
        property-escape-noquotes.html, and property-escape-noquotes-tab-slash-chars.html 
        fail because these attacks do not contain any illegal URI characters and 
        thus are now allowed by the XSSAuditor, where previously they weren't. A future
        change may reinstate this functionality.

        Tests: http/tests/security/xssAuditor/script-tag-safe2.html
               http/tests/security/xssAuditor/script-tag-safe3.html

        * page/XSSAuditor.cpp:
        (WebCore::isIllegalURICharacter): Added method.
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::findInRequest): Added parameter 
        allowRequestIfNoIllegalURICharacters.
        * page/XSSAuditor.h:

2009-09-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        reproducible freeze and crash on closing form popup at bosch-home.nl
        https://bugs.webkit.org/show_bug.cgi?id=28948

        showModalDialog calls getDirect on what is actually a window shell,
        so ends up not getting a value (since no value can ever be placed
        directly on the shell), which leads to incorrect behaviour.

        We use a manual test rather than automatic as it was not
        possible to get a modal run loop to work inside DRT.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::showModalDialog):
        * manual-tests/showModalDialog-returnValue.html: manual testcase.

2009-09-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Adds ValidityState.tooLong support for <input> and <textarea>.

        Introduces tooLong() in HTMLFormControlElement and it always returns false.
        HTMLInputElement and HTMLTextAreaElement overrides it and checks the text
        length and maxLength.  tooLong() should work only for `dirty' values.
        So, introduces m_isDirty flag for HTMLTextAreaElement, and
        !m_data.value().isNull() works as a dirty flag for HTMLInputElement.

        Renames parameter names of setMaxLength().

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

        Tests: fast/forms/ValidityState-tooLong-input.html
               fast/forms/ValidityState-tooLong-textarea.html

        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::tooLong):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::tooLong):
        (WebCore::HTMLInputElement::setMaxLength):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
        (WebCore::HTMLTextAreaElement::reset):
        (WebCore::HTMLTextAreaElement::updateValue):
        (WebCore::HTMLTextAreaElement::setMaxLength):
        (WebCore::HTMLTextAreaElement::tooLong):
        * html/HTMLTextAreaElement.h:
        * html/ValidityState.h:
        (WebCore::ValidityState::tooLong):

2009-09-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        Factor RedirectScheduler out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=29948

        This change introduces a new sub-object of Frame, redirectScheduler.
        The redirectScheduler is responsible for scheduling redirects.

        This change leaves the code for the redirectScheduler in
        FrameLoader.cpp.  A future change will move the class into its own
        file.

        No behavior change (hopefully!).

        * loader/FrameLoader.cpp:
        (WebCore::RedirectScheduler::RedirectScheduler):
        (WebCore::RedirectScheduler::~RedirectScheduler):
        (WebCore::RedirectScheduler::redirectScheduledDuringLoad):
        (WebCore::RedirectScheduler::clear):
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::setDefersLoading):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::didExplicitOpen):
        (WebCore::FrameLoader::cancelAndClear):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::checkCompleted):
        (WebCore::FrameLoader::isScheduledLocationChangePending):
        (WebCore::FrameLoader::scheduleHTTPRedirection):
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::FrameLoader::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::FrameLoader::scheduleFormSubmission):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        (WebCore::FrameLoader::scheduleRefresh):
        (WebCore::RedirectScheduler::scheduleRefresh):
        (WebCore::RedirectScheduler::locationChangePending):
        (WebCore::FrameLoader::scheduleHistoryNavigation):
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        (WebCore::RedirectScheduler::timerFired):
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::RedirectScheduler::schedule):
        (WebCore::RedirectScheduler::startTimer):
        (WebCore::RedirectScheduler::cancel):
        (WebCore::FrameLoader::completed):
        (WebCore::FrameLoader::open):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::committedFirstRealDocumentLoad):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::redirectScheduler):
        * page/Frame.h:

2009-09-30  Maciej Stachowiak  <mjs@apple.com>

        Build fix, not reviewed.

        More Windows build fixes for https://bugs.webkit.org/show_bug.cgi?id=29943

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):

2009-09-30  Maciej Stachowiak  <mjs@apple.com>

        Build fix, not reviewed.

        Fix windows build for fix for https://bugs.webkit.org/show_bug.cgi?id=29943

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):

2009-09-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [V8] HTMLAudioElement, HTMLImageElement, and HTMLOptionElement are constructable, but they shouldn't be.
        Only Audio, Image, and Option should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=29940

        Test: fast/dom/dom-constructor.html

        * WebCore.gypi: Added new files to project.
        * bindings/scripts/CodeGeneratorV8.pm: Modified to generate custom constructors.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate): Removed handling of HTMLImageElement, HTMLOptionElement
          and HTMLAudioElement construction.
        * bindings/v8/V8HTMLAudioElementConstructor.h: Added.
        * bindings/v8/V8HTMLImageElementConstructor.h: Added.
        * bindings/v8/V8HTMLOptionElementConstructor.h: Added.
        * bindings/v8/V8Index.cpp: Added new headers.
        * bindings/v8/V8Index.h: Added Audio, Image and Option decls.
        * bindings/v8/custom/V8CustomBinding.h: Ditto.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_GETTER): Added custom constructors.
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::V8HTMLImageElementConstructor::GetTemplate): Added custom template creator.
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::V8HTMLOptionElementConstructor::GetTemplate): Ditto.
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::V8HTMLImageElementConstructor::GetTemplate): Ditto.

2009-09-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Brady Eidson.

        307 redirects should pass along http body and Content-Type header
        https://bugs.webkit.org/show_bug.cgi?id=29943

        Follow-up fix for:
        <rdar://problem/3802660> SAP: 307 (Temporary Redirect) responses should use POST, not GET
        
        Test: http/tests/loading/resources/redirect-methods-result.php

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest): Pass along http body and Content-Type header.
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]): ditto

2009-09-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        Fixed https://bugs.webkit.org/show_bug.cgi?id=29941
        REGRESSION (r48882-r48888): Many memory leaks on SnowLeopard leaks bot

        Forgot to implement a destructor for JSDOMWindowBaseData, so it was
        leaking its RefPtr data member.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::destroyJSDOMWindowBaseData):
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::JSDOMWindowBase::JSDOMWindowBaseData::JSDOMWindowBaseData::JSDOMWindowBaseData):

2009-09-30  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Tim Hatcher.

        Make sure the removal of user stylesheets results in all of the WebViews being updated to
        reflect the changes.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::removeUserContentWithURLForWorld):
        (WebCore::PageGroup::removeUserContentForWorld):

2009-09-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION(r47440): drop down menus at americanexpress.com disappear on mouse out
        https://bugs.webkit.org/show_bug.cgi?id=29209

        Test: fast/inline/relative-positioned-overflow.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeVerticalOverflow): Add self-painting
        inlines to overflow to ensure that they are included in hit-testing.

2009-09-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        transforms/3d tests are not run in Release builds
        https://bugs.webkit.org/show_bug.cgi?id=29827

        Make sure we export the WebCoreHas3DRendering symbol in Release builds,
        because this symbols is used by run-webkit-tests (via 'nm') to detect whether
        WebCore was built with ENABLE_3D_RENDERING turned on.

        * DerivedSources.make:
        * WebCore.3DRendering.exp: Added.
        * WebCore.xcodeproj/project.pbxproj:

2009-09-30  Jeremy Orlow  <jorlow@chromium.org>

        Build fix for QT.  Didn't know WebCore.pro existed.

        * WebCore.pro:

2009-09-30  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Add a method for removal of user scripts and stylesheets by URL from a specific world.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::removeUserContentURLForWorld):
        * page/PageGroup.h:

2009-09-30  Chris Hawk  <hawk@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix for conditionals in the WebCore gyp file, which contained two separate
        'conditions' values for the webcore target. The first entry was ignored,
        resulting in some missine defines.
        https://bugs.webkit.org/show_bug.cgi?id=29907

        * WebCore.gyp/WebCore.gyp:

2009-09-21  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        DOM Storage needs to be more careful about where "ThreadSafe" objects are destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=29265

        DOM Storage needs to be more careful about where "ThreadSafe" objects are
        destroyed.  With the current code, there actually isn't a race condition, but
        it sure would be easy for someone to introduce one.  A bunch of
        ThreadSafeShared objects have RefPtrs to objects that are NOT ThreadSafeShared
        objects.  If it were possible any of these objects' destructors to be fired off
        the main thread, then the you'd have a race condition.  The code should be more
        clear and self-documenting about how things related to each other.

        Since the lifetime of a LocalStorageTask is bounded by the LocalStorageThread
        which is bounded by the StorageSyncManager, StorageAreaImpl, and
        StorageAreaSync, there's no reason for LocalStorageTask to store anything other
        than pointers.  By breaking this dependency, we can eliminate the risk.

        Note that we _could_ have LocalStorageThread's task queue just store
        LocalStorageTask*'s rather than RefPtr<LocalStorageTask>s but then we'd need to
        manually take care of deleting.  It'd probably also be possible to change
        LocalStorageThread around so that it needn't hold onto a reference of itself
        and have a more deterministic shutdown, but my initial attempts to do so
        failed, and I decided it wasn't worth changing.  The queue is killed before
        hand, so the thread is 100% impotent before the main thread continues anyway.

        The constructors and destructors of StorageSyncManager, StorageAreaImpl, and
        StorageAreaSync now have ASSERTs to verify they're running on the main thread. 
        I'm fairly positive that it'd be impossible to hit these asserts and the fact
        that these classes are no longer ThreadSafeShared should make it clear how
        they're meant to be used, but I think it's worth it to be extra sure.  Of
        course, ideally, we'd have such an assert every time a ref is incremented or
        decremented.

        Behavior should be unchanged and this is just an internal code cleanup, so no
        new tests.

        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::LocalStorageTask):
        (WebCore::LocalStorageTask::performTask):
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::createImport):
        (WebCore::LocalStorageTask::createSync):
        (WebCore::LocalStorageTask::createTerminate):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        * storage/LocalStorageThread.h:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::~StorageAreaImpl):
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::~StorageAreaSync):
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::~StorageSyncManager):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h:

2009-09-28  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Chromium needs to be able to override the way storage events are delivered
        https://bugs.webkit.org/show_bug.cgi?id=29655

        Chromium needs to be able to override the way storage events are delivered.
        This replaced https://bugs.webkit.org/show_bug.cgi?id=29257 because it'll be
        faster (no vtables and extra allocation) and somewhat cleaner (no dependency
        injection).  This is necessary because Chromium needs to transport events across
        a process barrier and then dispatch them without use of a Frame*.

        Behavior should not change with this, so no updates to tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::setItem):
        (WebCore::StorageAreaImpl::removeItem):
        (WebCore::StorageAreaImpl::clear):
        * storage/StorageAreaImpl.h:
        * storage/StorageEventDispatcher.cpp: Copied from WebCore/storage/StorageAreaImpl.cpp.
        (WebCore::StorageEventDispatcher::dispatch):
        * storage/StorageEventDispatcher.h: Added.  (Well, technically in the other half of this patch.)

2009-09-30  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        Need to check NULL frame in EventHandler::updateDragAndDrop.
        https://bugs.webkit.org/show_bug.cgi?id=29929

        Test: http/tests/misc/drag-over-iframe-invalid-source-crash.html

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

2009-09-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        ASSERTION FAILED: !repaintContainer || repaintContainer == this
        https://bugs.webkit.org/show_bug.cgi?id=29755
        
        Generalize the fix for this bug to account for cases where there may be multiple
        containing blocks between the repaint container, and the container of the element
        being repainted.

        Test: compositing/repaint/opacity-between-absolute2.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        Call offsetFromAncestorContainer() to get the correct offset.
        
        (WebCore::RenderBox::computeRectForRepaint): Ditto
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint): Ditto.
        
        * rendering/RenderObject.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetFromAncestorContainer):
        New method that computes an offset from some object in the ancestor container() chain.

2009-09-30  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Fix TextCodecQt::decode method after r48752 to return a non-null string if the length of the input is 0.
        This fixes https://bugs.webkit.org/show_bug.cgi?id=29736.

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::decode):

2009-09-29  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Jon Honeycutt.

        Fix a couple of bugs with patterns.  Move the setting of the document URL to before the style
        selector gets constructed so that pattern match testing gets the correct URL.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::parse):

2009-09-29  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Brady Eidson.

        Assertion failure in http/tests/xmlhttprequest/failed-auth.html.

        I couldn't find out why this only started to happen now, but it was incorrect to check
        persistence of a credential returned by CredentialStorage::get() without checking that it
        was non-null. When there is no credential for the protection space in storage, get()
        returns a new object, and Credentil constructor doesn't initialize m_persistence.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]): Moved the
        assertion after credential null check.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Added the same persistence
        assertion, matching sync code (and CF one, as well).

2009-09-29  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Darin Adler.

        Add an ASSERT for UTF8Encoding().isValid()
        https://bugs.webkit.org/show_bug.cgi?id=29908

        * platform/text/TextEncoding.cpp:
        (WebCore::UTF8Encoding):

2009-09-29  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Jon Honeycutt.

        https://bugs.webkit.org/show_bug.cgi?id=29892
        Add support for whitelist patterns to control conditional injection of user scripts and
        user stylesheets.

        No new tests. Not testable until WebKit portion is added in followup patch.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::pageGroupUserSheets):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptsForWorld):
        * page/UserContentURLPattern.cpp: Added.
        (WebCore::UserContentURLPattern::matchesPatterns):
        (WebCore::UserContentURLPattern::parse):
        (WebCore::UserContentURLPattern::matches):
        (WebCore::UserContentURLPattern::matchesHost):
        (WebCore::MatchTester::MatchTester):
        (WebCore::MatchTester::testStringFinished):
        (WebCore::MatchTester::patternStringFinished):
        (WebCore::MatchTester::eatWildcard):
        (WebCore::MatchTester::eatSameChars):
        (WebCore::MatchTester::test):
        (WebCore::UserContentURLPattern::matchesPath):
        * page/UserContentURLPattern.h: Added.
        (WebCore::UserContentURLPattern::UserContentURLPattern):
        (WebCore::UserContentURLPattern::scheme):
        (WebCore::UserContentURLPattern::host):
        (WebCore::UserContentURLPattern::path):
        (WebCore::UserContentURLPattern::matchSubdomains):

2009-09-29  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Reproducible crash pressing return inside quoted content
        at WebCore::BreakBlockquoteCommand::doApply.
        <rdar://problem/7085453>
        In some case, like the one provided in the test case, m_downStreamEnd
        refers to a node that gets deleted when executing the DeleteSelectionCommand.
        We shouldn't use m_downStreamEnd to recalculate the new m_endPosition when
        pruning is needed, because it may be point to a node that has been deleted, but
        rather rely on removeNode in CompositeEditCommand to update m_endPosition correctly.

        Test: editing/selection/blockquote-crash.html

        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply): Added check for invalid position
        to avoid dereferencing a null node pointer.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Don't reset m_endPosition
        using the value in m_downStreamEnd when it is necessary to prune the start block.
        
2009-09-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        Basic authentication credentials are not sent automatically to top resources
        https://bugs.webkit.org/show_bug.cgi?id=29901

        No new tests - I don't want to pollute root directory of http tests to check for this rather
        minor issue.

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set): Changed to always preserve leading slash.
        (WebCore::CredentialStorage::getDefaultAuthenticationCredential): Made breaking out of the
        loop more explicit.

2009-09-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Oliver Hunt.

        Web Inspector REGRESSION(r47820-r47822): Profiles aren't
        added to the inspector unless the inspector is already open
        when the profile completes.

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

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._populateProfiles):

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by David Hyatt.

        Fix to logic of earlier commit 48902.

        When merging two if's before committing, I forgot to invert the
        bool check.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::ignoreHttpError):

2009-09-29  Stephen White  <senorblanco@chromium.org>

        Unreviewed, build fix.

        Fixing Chromium build, following r48884.

        [https://bugs.webkit.org/show_bug.cgi?id=29894]

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        * bindings/v8/V8WorkerContextEventListener.h:

2009-09-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Follows HTML5's maxLength change in September 2009.
        - Change HTMLTextAreaElement.maxLength type to signed.
        - HTMLTextAreaElement.maxLength returns -1 if maxlength= attribute is missing.
        - HTMLTextAreaElement.maxLength and HTMLInputElement.maxLength
          throw INDEX_SIZE_ERR for setting negative values.
        https://bugs.webkit.org/show_bug.cgi?id=29796

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setMaxLength):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::handleBeforeTextInsertedEvent):
        (WebCore::HTMLTextAreaElement::maxLength):
        (WebCore::HTMLTextAreaElement::setMaxLength):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.idl:

2009-09-29  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r48894, because review discussion was not complete.
        http://trac.webkit.org/changeset/48894

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):

2009-09-29  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Filter feComposite implementation is missing
        [https://bugs.webkit.org/show_bug.cgi?id=28362]

        feComposite implementation for SVG.

        Test: svg/filters/feComposite.svg

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::arithmetic):
        (WebCore::FEComposite::apply):

2009-09-29  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Starting all read-only transactions with an explicit BEGIN
        DEFERRED command instead of BEGIN, since some ports (chromium)
        might compile their own SQLite library and set BEGIN to BEGIN
        IMMEDIATE by default; which would result in a deadlock in case of
        two concurrent read-only transactions on the same DB, and would
        unnecessarily delay other potential transactions to the same DB.

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

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):

2009-09-29  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Add support for run-time flag for 3D canvas
        https://bugs.webkit.org/show_bug.cgi?id=29826

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext): Check page settings for
        experimental WebGL flag before returning 3D graphics context.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize new flag to false.
        (WebCore::Settings::setExperimentalWebGLEnabled):
        * page/Settings.h: Set new flag.
        (WebCore::Settings::experimentalWebGLEnabled): Return new flag.

2009-09-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Chromium needs to be able to override the way storage events are delivered - part 1
        https://bugs.webkit.org/show_bug.cgi?id=29889

        Chromium needs to be able to override the way storage events are delivered.
        This replaced https://bugs.webkit.org/show_bug.cgi?id=29257 because it'll be
        faster (no vtables and extra allocation) and somewhat cleaner (no dependency
        injection).  This is necessary because Chromium needs to transport events across
        a process barrier and then dispatch them without use of a Frame*.

        This patch should be a no-op for all ports other than Chromium.

        * WebCore.gypi:
        * storage/StorageEventDispatcher.h: Added.

2009-09-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (missed file).

        Adding file missed in previous commit.

        * manual-tests/gtk/resources/long_cell.cur: Copied from WebCore/dom/PositionCreationFunctions.h.

2009-09-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Correct an issue with XMLHttpRequest attribute event listeners never being cleared.
        https://bugs.webkit.org/show_bug.cgi?id=29888

        Test: LayoutTests/http/tests/xmlhttprequest/xmlhttprequest-abort-readyState-shouldDispatchEvent.html

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::getEventListener): Added isAttribute parameter.
        (WebCore::ACCESSOR_SETTER): Made all event listener setters create attribute listeners.
        (WebCore::CALLBACK_FUNC_DECL): Made addEventListener create object listener.

2009-09-22  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Eric Seidel.

        Fix corruption for non-square images.

        [GTK] REGRESSION: BitmapImage::getGdkPixbuf fails for non-square images
        https://bugs.webkit.org/show_bug.cgi?id=29654

        Added an additional manual-test for this issue to the existing Gtk
        cursor image test.

        * manual-tests/gtk/cursor-image.html:
        * manual-tests/gtk/resources/long_cell.cur: Added.
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::BitmapImage::getGdkPixbuf):

2009-09-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Timothy Hatcher.

        Build fix - pass a proper ScriptExecutipnContext to getEventListenerHandlerBody()

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::getEventListenerHandlerBody):
        * bindings/js/ScriptEventListener.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::getEventListenerHandlerBody):
        * bindings/v8/ScriptEventListener.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):

2009-09-29  Nate Chapin  <japhet@chromium.org>

        Reviewed by Eric Seidel.

        Ensure that we don't scroll lock to an anchor node after a
        user-initiated scroll, even if that scroll doesn't propagate
        all the way up to FrameView.

        Test: fast/events/node-event-anchor-lock.html

        * page/EventHandler.cpp: Call setFrameWasScrolledByUser() when a scroll is handled by a node rather than a frame.
        (WebCore::EventHandler::scrollOverflow):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::sendScrollEvent): Use setFrameWasScrolledByUser();
        (WebCore::EventHandler::setFrameWasScrolledByUser): Split out of sendScrollEvent();
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        * page/EventHandler.h: Declare setFrameWasScrolledByUser().

2009-09-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        Onclick not fired for an element copied with cloneContents() or cloneNode()
        https://bugs.webkit.org/show_bug.cgi?id=25130

        The change here is that JS event listeners don't keep a reference to a global object from
        where they were created, and instead take it as a parameter when parsing source code. Also,
        the listener creation won't fail just because it happens for an element in a frameless
        document.
        Thus, moving nodes between documents no longer results in having incorrect registered
        lazy event listeners on them.

        Tests: fast/events/attribute-listener-cloned-from-frameless-doc-context-2.html
               fast/events/attribute-listener-cloned-from-frameless-doc-context.html
               fast/events/attribute-listener-cloned-from-frameless-doc.xhtml
               fast/events/attribute-listener-extracted-from-frameless-doc-context-2.html
               fast/events/attribute-listener-extracted-from-frameless-doc-context.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener): Don't take a reference to JSDOMGlobalObject.
        (WebCore::JSEventListener::jsFunction): Take ScriptExecutionContext as a parameter for
        getting to JSDOMGlobalObject. It's not used in base class, but is in JSLazyEventListner.
        (WebCore::JSEventListener::markJSFunction): Don't mark the global object.
        (WebCore::JSEventListener::handleEvent): Get global object from ScriptExecutionContext.
        (WebCore::JSEventListener::reportError): Ditto.

        * bindings/js/JSEventListener.h: (WebCore::JSEventListener::create): Don't keep a reference
        to JSDOMGlobalObject.

        * bindings/js/JSLazyEventListener.cpp: (WebCore::JSLazyEventListener::parseCode): Listener
        creation was split between this function and ScriptEventListener; moved it here, as JS
        global object can be different now.

        * bindings/js/JSLazyEventListener.h: (WebCore::JSLazyEventListener::create): Keep source URL,
        which can not be determined at parsing time.

        * bindings/js/ScriptEventListener.cpp: (WebCore::createAttributeEventListener): Moved code
        for listener creation to JSLazyEventListener. XSSAuditor code remains here, because tests
        expect that errors are logged at document parsing time, and because I don't know what other
        side effects moving it vould have.

        * dom/EventListener.h: handleEvent() and reportError() now take ScriptExecutionContext,
        because JSC needs a global context here.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createJSAttributeEventListener):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/objc/ObjCEventListener.h:
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::handleEvent):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * inspector/InspectorDOMStorageResource.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::handleEvent):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):
        Don't pass global object to JSEventListener::create(), which no longer needs it.
        Note that some of these functions still have an early return for null global object, which
        can probably be removed in a later patch.
        Pass ScriptExecutionContext to EventListener methods that now need it.

        * bindings/scripts/CodeGeneratorCOM.pm: Don't force EventTarget implementation on Node -
        it doesn't work yet (it didn't quite work before this patch, too, because it assumed that
        any object implementing EventTarget COM interface originated from WebCore).

        * dom/EventListener.idl: Just like in ObjC, EventListener should be a pure interface in
        COM bindings.

2009-09-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed virtual destructor from JSGlobalObjectData to eliminate pointer
        fix-ups when accessing JSGlobalObject::d.
        
        Replaced with an explicit destructor function pointer.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::destroyJSDOMGlobalObjectData):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObjectData::JSDOMGlobalObjectData):

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Don't rely on QNetworkReply::NetworkError codes, but
        on HTTP error codes instead.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::ignoreHttpError):
        (WebCore::QNetworkReplyHandler::finish):

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Use const references when using Qt's foreach.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Fix handling of QNetworkReply errors.

        In the QNetworkReplyHandler::finish() a response was sent even when
        the reply contained an error. This resulted in a sendResponseIfNeeded()
        calling didReceiveResponse on the client, leading to the destruction
        of the m_resourceHandle, discontinuing further processing in finish(),
        and thus not calling didFail on the client.

        Instead it continued as everything went fine, and
        FrameLoaderClientQt::dispatchDecidePolicyForMIMEType() changed the
        policy to PolicyDownload due to not being able to show the non existing
        MIMEType. As the download also obviously fails, it ended up with a
        policy change error.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        The code for showing error pages when the response was
        a 401/403/404, was not actually doing so. This patch
        fixes that.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):

2009-09-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/7259965> REGRESSION: http/tests/xmlhttprequest/cross-origin-authorization.html
        is failing/crashing intermittently
        https://bugs.webkit.org/show_bug.cgi?id=29322

        This was caused by CStringBuffer::encodeBase64() returning a buffer that wasn't zero terminated.
        The code had other issues as well, so I removed it altogether:
        - it claimed to avoid some buffer copies, but it didn't;
        - and I don't think that base64 encoding should be part of CString interface.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::encodeBasicAuthorization): Encode username and password using Base64.h directly.
        (WebCore::ResourceHandle::start): Use encodeBasicAuthorization().
        (+[WebCoreSynchronousLoader loadRequest:allowStoredCredentials:returningResponse:error:]): Ditto.
        (-[WebCoreSynchronousLoader connection:willSendRequest:redirectResponse:]): Extended logging
        to synchronous case.
        (-[WebCoreSynchronousLoader connectionShouldUseCredentialStorage:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didReceiveResponse:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didReceiveData:]): Ditto.
        (-[WebCoreSynchronousLoader connectionDidFinishLoading:]): Ditto.
        (-[WebCoreSynchronousLoader connection:didFailWithError:]): Ditto.

        * platform/network/cf/ResourceHandleCFNet.cpp: Matched Mac changes.

        * platform/text/CString.cpp:
        * platform/text/CString.h:
        (WebCore::CStringBuffer::create):
        (WebCore::CStringBuffer::CStringBuffer):
        Removed code that was added for Base64 in r48363.

2009-09-29  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Fix typo in Localizations.cpp

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

        * platform/qt/Localizations.cpp:
        (WebCore::localizedMediaControlElementHelpText):

2009-09-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Make the XSLT conditional in DOMWindow.idl's xsltProcessor
        attribute conditional in the generated files, similar to
        r44116.

        * page/DOMWindow.idl:

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann and Tor Arne Vestbø.

        Use the ResourceError as it is supposed to and handle
        not HTTP errors from QNetworkReply.

        Thanks to Adam Roben for his input.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):

2009-09-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Encapsulate JS listeners specifics into ScriptEventListener.

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

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::getEventListenerHandlerBody):
        * bindings/js/ScriptEventListener.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::getEventListenerHandlerBody):
        * bindings/v8/ScriptEventListener.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):

2009-09-29  Xan Lopez  <xlopez@igalia.com>

        Unreviewed attempt to fix the build.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2009-09-28  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Add experimentalWebSocketsEnabled in Settings.
        https://bugs.webkit.org/show_bug.cgi?id=28941

        * WebCore.base.exp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webSocket):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructor):
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setExperimentalWebSocketsEnabled):
        * page/Settings.h:
        (WebCore::Settings::experimentalWebSocketsEnabled):
        
2009-09-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        Add platform code to support WebSocket for chromium.
        https://bugs.webkit.org/show_bug.cgi?id=29171

        To build within chromium tree, it requires a patch in bug 29174.
        Real implementation will be landed in chromium tree.

        * WebCore.gypi:
        * platform/network/chromium/SocketStreamError.h: Added.
        (WebCore::SocketStreamError::SocketStreamError):
        * platform/network/chromium/SocketStreamHandle.h: Added.
        (WebCore::SocketStreamHandle::create):

2009-09-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7157288> Crash in RenderStyle::computedLineHeight()
        when Times New Roman is not installed

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getLastResortFallbackFont): If Times New Roman is
        not available, use the Windows default GUI font.

2009-09-28  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Do not add platform-specific methods to cross-platform header
        FileSystem.h per Darin's feedback for 29109.
        https://bugs.webkit.org/show_bug.cgi?id=29830

        * platform/FileSystem.h:
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):
        * platform/chromium/FileSystemChromium.cpp:

2009-09-28  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Register Chromium's VFSs with a proper sqlite3_io_methods
        finder. This should only affect the POSIX implementation. The
        Windows change is included for consistency and in case sqlite
        starts using something similar in its Windows VFS in the future.

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

        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):

2009-09-28  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Change the V8 bindings' handling of window.toString(),
        so we return [object DOMWindow] (like JSC), not [object global].

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

        This will fix a couple of Chromium port test failures and enable us to
        use the default expectations for a bunch more.

        * bindings/v8/custom/V8DOMWindowCustom.cpp: Use the DOMWindow wrapper instead
        of the global object wrapper when it's available in the DOMWindow toString callback.

2009-09-28  Nate Chapin  <japhet@chromium.org>

        Rubber stamped by David Levin.

        Chromium build fix, add back in #include of V8Proxy.h in V8WebKitPointConstructor.cpp.

        * bindings/v8/custom/V8WebKitPointConstructor.cpp: Re-include V8Proxy.h.

2009-09-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        NotNullPassRefPtr: smart pointer optimized for passing references that are not null
        https://bugs.webkit.org/show_bug.cgi?id=29822
        
        Added NotNullPassRefPtr, and deployed it in all places that initialize
        JavaScript objects.

        * bindings/js/DOMObjectWithSVGContext.h:
        (WebCore::DOMObjectWithSVGContext::DOMObjectWithSVGContext):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObject::DOMObject):
        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        (WebCore::DOMConstructorWithDocument::DOMConstructorWithDocument):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
        * bindings/js/JSInspectedObjectWrapper.cpp:
        (WebCore::JSInspectedObjectWrapper::JSInspectedObjectWrapper):
        * bindings/js/JSInspectedObjectWrapper.h:
        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::JSInspectorCallbackWrapper):
        * bindings/js/JSInspectorCallbackWrapper.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::JSQuarantinedObjectWrapper):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::JSWorkerContextBase::JSWorkerContextBase):
        * bindings/js/JSWorkerContextBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp):
        * bridge/runtime_object.h:

2009-09-28  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Allow V8 to handle x/y parameters in a WebKitPoint constructor.
        https://bugs.webkit.org/show_bug.cgi?id=29823

        Fixes V8's handling of LayoutTests/fast/dom/Window/webkitConvertPoint.html

        * bindings/v8/custom/V8WebKitPointConstructor.cpp: Allow for x/y parameters in constructor.

2009-09-28  Mark Rowe  <mrowe@apple.com>

        Fix the build by doing something approximating reasonableness in the Xcode project.

        * WebCore.xcodeproj/project.pbxproj:

2009-09-28  Simon Hausmann  <hausmann@webkit.org>

        Prospective Tiger build fix.

        * WebCore.xcodeproj/project.pbxproj: Try to use unique IDs for the new files.

2009-09-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add explicit frontend event for commit load.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didCommitLoad):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._setDocument):
        * inspector/front-end/inspector.js:
        (WebInspector.addResource):
        (WebInspector.didCommitLoad):

2009-09-28  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Dimitri Glazkov.

        Chromium port - recognize we are being built independently
        of chromium and look for dependencies under webkit/chromium rather
        than chromium/src.

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

        * WebCore.gyp/WebCore.gyp: See above. Also removed a few files from
          the sources list, since they are not supposed to be built here.

2009-09-28  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement XSLT support with QtXmlPatterns.
        https://bugs.webkit.org/show_bug.cgi?id=28303

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::setTransformSource):
        * dom/Document.h:
        (WebCore::Document::transformSource):
        * dom/TransformSource.h: Added.
        (WebCore::TransformSource::platformSource):
        * dom/TransformSourceLibxslt.cpp: Added.
        (WebCore::TransformSource::TransformSource): Wraps a libxml2 document.
        (WebCore::TransformSource::~TransformSource):
        * dom/TransformSourceQt.cpp: Added.
        (WebCore::TransformSource::TransformSource): Wraps a plain string.
        (WebCore::TransformSource::~TransformSource):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::doEnd):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::doEnd):
        (WebCore::XMLTokenizer::parseProcessingInstruction):
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::sheetString):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::document):
        * xml/XSLStyleSheetQt.cpp: Added.
        * xml/XSLTProcessor.h:
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xmlDocPtrFromNode):
        * xml/XSLTProcessorQt.cpp: Added.
        (WebCore::XSLTMessageHandler::XSLTMessageHandler): A subclass of QAbstractMessageHandler.
        (WebCore::XSLTMessageHandler::handleMessage): Forwards all processor messages to the Console.
        (WebCore::XSLTProcessor::transformToString): Uses QXmlQuery.

2009-09-28  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by Eric Carlson.

        Delegate implementation of rendererIsNeeded() for media control elements to RenderTheme.

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

        Covered by LayoutTests/media/video-no-audio.html

        * rendering/MediaControlElements.cpp: Removed subclass implementations of rendererIsNeeded().
        (WebCore::MediaControlElement::rendererIsNeeded): Include calling shouldRenderMediaControlPart().
        (WebCore::MediaControlInputElement::rendererIsNeeded): Include calling shouldRenderMediaControlPart().
        * rendering/MediaControlElements.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::shouldRenderMediaControlPart): New method.  Contains logic moved from subclass implementations of rendererIsNeeded().
        * rendering/RenderTheme.h:
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::shouldRenderMediaControlPart): Override to always render mute button.
        * rendering/RenderThemeChromiumSkia.h:

2009-09-28  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [chromium] DragData::asURL should return file URL.
        https://bugs.webkit.org/show_bug.cgi?id=29109

        Tested by LayoutTests/fast/events/drag-to-navigate.html.

        * platform/FileSystem.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::asURL):
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::getAbsolutePath):
        (WebCore::isDirectory):
        (WebCore::filePathToURL):

2009-09-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        [V8] Add a special case to handle index arguments, because we need to be
        able to see if they're < 0.
        https://bugs.webkit.org/show_bug.cgi?id=29810

        Test: LayoutTests/dom/html/level1/core/hc_characterdataindexsizeerrdeletedatacountnegative.html

        * bindings/scripts/CodeGeneratorV8.pm: Added special case (matching CodeGeneratorJS.pm)
          for index arguments.

2009-09-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Extend the MediaWiki/KHTMLFixes.css workaround to cover older MediaWiki versions
        https://bugs.webkit.org/show_bug.cgi?id=29792

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet): If site specific hacks are
        enabled, check if the linked style sheet is one of two versions of the
        MediaWiki KHTMLFixes.css. If so, remove the offending rule.

2009-09-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Fix an error in type logic in CodeGeneratorV8.pm, where
        unsigned ints are accidentally used as signed.
        https://bugs.webkit.org/show_bug.cgi?id=29810

        Test: LayoutTests/fast/forms/textarea-maxlength.html

        * bindings/scripts/CodeGeneratorV8.pm: Made sure "unsigned long" in IDL is
          properly generates on "unsigned" return value.

2009-09-28  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=28303

        In preparation for adding XSLT support with QtXmlPatterns to the Qt
        port, rename XSLStyleSheet.cpp to XSLStyleSheetLibxslt.cpp as we will
        have our own implementation which most likely will not share any code
        with the current one.

        Additionally, fix some coding style issues.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * xml/XSLStyleSheet.cpp: Renamed to XSLStyleSheetLibxslt.cpp.
        * xml/XSLStyleSheetLibxslt.cpp: Added.

2009-09-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Prospective build fix for r48812.

        Forgot to remove the inline reset() implementation when reverting the indentation
        changes in the file.

        * xml/XSLTProcessor.h:

2009-09-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by nobody (trivial follow up fix), Joseph Pecoraro LGTM-ed.

        Web Inspector: Follow up to r48809.
        InspectorController.wrapObject should only be called on the inspectable page side.

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

        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype.update.callback):
        (WebInspector.EventListenersSidebarPane.prototype.update):
        (WebInspector.EventListenersSection):
        (WebInspector.EventListenersSection.prototype.update):
        (WebInspector.EventListenerBar):
        (WebInspector.EventListenerBar.prototype.update):

2009-09-28  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Move the libxslt specific part of XSLTProcessor to a separate file.
        https://bugs.webkit.org/show_bug.cgi?id=28303

        In preparation for adding XSLT support with QtXmlPatterns to the Qt
        port, move the libxslt part of the XSLTProcessor implementation into
        another file and leave the part that can be reused and shared.

        Additionally, fix some coding style issues.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Remove trailing whitespaces.
        (WebCore::createFragmentFromSource): Remove trailing whitespaces.
        (WebCore::XSLTProcessor::transformToFragment): Remove trailing whitespaces.
        (WebCore::XSLTProcessor::reset): Moved out of the class definition.
        * xml/XSLTProcessorLibxslt.cpp: Added.
        (WebCore::XSLTProcessor::genericErrorFunc): Moved.
        (WebCore::XSLTProcessor::parseErrorFunc): Moved.
        (WebCore::docLoaderFunc): Moved.
        (WebCore::setXSLTLoadCallBack): Moved.
        (WebCore::writeToVector): Moved.
        (WebCore::saveResultToString): Moved.
        (WebCore::xsltParamArrayFromParameterMap): Moved.
        (WebCore::freeXsltParamArray): Moved.
        (WebCore::xsltStylesheetPointer): Moved.
        (WebCore::xmlDocPtrFromNode): Moved.
        (WebCore::resultMIMEType): Moved.
        (WebCore::XSLTProcessor::transformToString): Moved.

2009-09-28  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by Nikolas Zimmermann.

        Fix the crash of SVG that crashes when use a non-exist symbol
        https://bugs.webkit.org/show_bug.cgi?id=27693

        Test: svg/custom/use-non-existing-symbol-crash.svg

        * svg/SVGUseElement.cpp:
        (WebCore::shadowTreeContainsChangedNodes):

2009-09-28  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector Should Show Event Listeners/Handlers Registered on each Node
        https://bugs.webkit.org/show_bug.cgi?id=17429
        
          Extracted a method from dispatchEvent to get the event ancestor chain
        
        * dom/Node.cpp:
        (WebCore::Node::eventAncestors): the extracted method
        (WebCore::Node::dispatchGenericEvent): use eventAncestors
        * dom/Node.h:

          Asynchronous Flow For the Inspector, Backend -> DOM Agent -> Frontend
          The DOMAgent's getEventListenersForNode handles the logic of finding
          all the relevant listeners in the event flow.

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getEventListenersForNode):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::buildObjectForNode): added localName
        * inspector/InspectorDOMAgent.h:
        (WebCore::EventListenerInfo::EventListenerInfo):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetEventListenersForNode):
        * inspector/InspectorFrontend.h:
        (WebCore::InspectorFrontend::scriptState):
        * inspector/front-end/DOMAgent.js: added localName to WebInspector.DOMNode from payload
        (WebInspector.EventListeners.getEventListenersForNodeAsync.mycallback):
        (WebInspector.EventListeners.getEventListenersForNodeAsync):

          New Sidebar Pane in the Element's Panel
          Includes Gear Menu for filtering the Event Listeners on the
          "Selected Node Only" or "All Nodes"

        * inspector/front-end/ElementsPanel.js: Handles refreshing the Pane when necessary
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.updateEventListeners):
        * inspector/front-end/EventListenersSidebarPane.js: Added. 
        (WebInspector.EventListenersSidebarPane): The 1st level in the Pane
        (WebInspector.EventListenersSidebarPane.prototype.update.callback):
        (WebInspector.EventListenersSidebarPane.prototype.update):
        (WebInspector.EventListenersSection): The 2nd level in the Pane
        (WebInspector.EventListenersSection.prototype.update): filters on Preference
        (WebInspector.EventListenersSection.prototype.addListener):
        (WebInspector.EventListenerBar): The 3rd level in the Pane
        (WebInspector.EventListenerBar.prototype._getNodeDisplayName):
        (WebInspector.EventListenerBar.prototype._getFunctionDisplayName):
        (WebInspector.EventListenersSidebarPane.prototype._changeSetting): For the Gear Menu
        
          Consolidated "appropriateSelectorForNode"

        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/utilities.js:

          Miscellaneous Updates

        * English.lproj/localizedStrings.js: "Event Listeners", "No Event Listeners", "Selected Node Only", "All Nodes"
        * WebCore.gypi: included the new inspector files
        * WebCore.vcproj/WebCore.vcproj: included source files that were missing
        * inspector/front-end/Images/grayConnectorPoint.png: Added. Thanks to Timothy Hatcher.
        * inspector/front-end/Images/whiteConnectorPoint.png: Added. Thanks to Timothy Hatcher.
        * inspector/front-end/inspector.js: Preferences for the Gear Menu Event Listeners filter
        * inspector/front-end/inspector.css: reused as much as possible
        * inspector/front-end/inspector.html: include the new script
        * inspector/front-end/WebKit.qrc: included the new inspector files

2009-09-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29760
        Implement CSSOM Range.getClientRects/getBoundingClientRect 

        Tests: fast/dom/Range/getBoundingClientRect-getClientRects-relative-to-viewport.html
               fast/dom/Range/getBoundingClientRect.html
               fast/dom/Range/getClientRects.html

        * dom/Range.cpp:
        (WebCore::Range::getClientRects):
        (WebCore::Range::getBoundingClientRect):
        (WebCore::adjustFloatQuadsForScrollAndAbsoluteZoom):
        (WebCore::Range::getBorderAndTextQuads):
        * dom/Range.h:
        * dom/Range.idl:
        Implement Range.getClientRects/getBoundingClientRect.

        * dom/Element.cpp:
        * rendering/RenderObject.h: 
        (WebCore::adjustForAbsoluteZoom):
        (WebCore::adjustIntRectForAbsoluteZoom):
        (WebCore::adjustFloatPointForAbsoluteZoom):
        (WebCore::adjustFloatQuadForAbsoluteZoom):
        Move point/quad adjustment methods from Element.cpp to RenderObject.h
        so that Range.cpp can use them as well.

2009-09-27  Simon Hausmann  <hausmann@webkit.org>

        Unreviewed fix for WebInspector with Qt build.

        Simply re-generate the Qt resource file by running
        WebKitTools/Scripts/generate-qt-inspector-resource

        * inspector/front-end/WebKit.qrc:

2009-09-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by nobody (trivial ChangeLog fix).

        Restore WebCore/ChangeLog truncated in r48778.

2009-09-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: DOM store is being unbound twice, leading to assertion failure.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didOpenDatabase):
        (WebCore::InspectorController::didUseDOMStorage):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::unbind):

2009-09-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Do not track DOM changes while inspector window is closed.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDocument):
        * inspector/InspectorDOMAgent.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        * page/android/InspectorControllerAndroid.cpp:
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):

2009-09-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [REGRESSION] Double Clicking Resources Fails to Open in New Window

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

        * inspector/front-end/InjectedScript.js:
        (InjectedScript.setStyleText):
        (InjectedScript.openInInspectedWindow):
        * inspector/front-end/InjectedScriptAccess.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):

2009-09-26  David Kilzer  <ddkilzer@apple.com>

        Part 2 of 2: <http://webkit.org/b/29753> DerivedSources.make broken for non-Mac targets

        Reviewed by Darin Adler.

        Fix ENABLE_ORIENTATION_EVENTS for non-Mac platforms.

        * DerivedSources.make: Moved Platform.h check for
        ENABLE_ORIENTATION_EVENTS into Mac-only section and added
        default of ENABLE_ORIENTATION_EVENTS = 0 to non-Mac section.
        Added ifndef test to make it possible to override both
        ENABLE_DASHBOARD_SUPPORT and ENABLE_ORIENTATION_EVENTS external
        to the makefile.  Moved addition of ENABLE_ORIENTATION_EVENTS to
        ADDITIONAL_IDL_DEFINES to common section.
        * GNUmakefile.am: Added support for ENABLE_ORIENTATION_EVENTS if
        it is ever used.
        * WebCore.pro: Ditto.

2009-09-26  Kent Tamura  <tkent@chromium.org>

        Reviewed by David Kilzer.

        Move placeholder-related code to HTMLTextFormControlElement from
        HTMLInputElement, WMLInputElement, InputElement, and
        HTMLTextAreaElement.
        https://bugs.webkit.org/show_bug.cgi?id=28703

        * dom/InputElement.cpp:
        (WebCore::InputElement::dispatchFocusEvent):
        (WebCore::InputElement::dispatchBlurEvent):
        (WebCore::InputElement::setValueFromRenderer):
        * dom/InputElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::HTMLTextFormControlElement):
        (WebCore::HTMLTextFormControlElement::~HTMLTextFormControlElement):
        (WebCore::HTMLTextFormControlElement::dispatchFocusEvent):
        (WebCore::HTMLTextFormControlElement::dispatchBlurEvent):
        (WebCore::HTMLTextFormControlElement::placeholderShouldBeVisible):
        (WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::handleFocusEvent):
        (WebCore::HTMLTextFormControlElement::handleBlurEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::handleFocusEvent):
        (WebCore::HTMLInputElement::handleBlurEvent):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::setValueFromRenderer):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::supportsPlaceholder):
        (WebCore::HTMLInputElement::isEmptyValue):
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::parseMappedAttribute):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
        (WebCore::HTMLTextAreaElement::createRenderer):
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::supportsPlaceholder):
        (WebCore::HTMLTextAreaElement::isEmptyValue):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        * rendering/RenderTextControlSingleLine.h:
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::createRenderer):
        * wml/WMLInputElement.h:

2009-09-26  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Alexey Proskuryakov.

        Optimize the code so only the text from start to end is scanned.
        https://bugs.webkit.org/show_bug.cgi?id=29092

        On a platform with webkit+Qt+Symbian, the parsing time for a 600K text
        file improved from 400ms to 40ms (10x faster).

        * dom/Text.cpp:
        (WebCore::Text::createWithLengthLimit):

2009-09-26  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Eric Seidel.

        This Patch fixes [chromium] the drop-down is always left-aligned even
        for RTL element.
        https://bugs.webkit.org/show_bug.cgi?id=29612

        For auto-complete, the items in drop-down should be right-aligned if
        the directionality of <input> field is RTL.
        For <select><option>, the items in drop-down should be right-aligned
        if the directionality of <select> is RTL.

        No automatic test is possible. Manual tests are added.

        * manual-tests/autofill_alignment.html: Added.
        * manual-tests/select_alignment.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::paintRow): Adjust the starting x-axis of text to
        be paint if it should be right-aligned.

2009-09-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r48775) FontList.plist written by TOT WebKit causes Safari 4
        to crash on launch
        https://bugs.webkit.org/show_bug.cgi?id=29759

        * platform/graphics/win/FontDatabase.cpp:
        (WebCore::writeFontDatabaseToPlist): Reverted to saving the CG font DB
        property list at the root of FontList.plist, but with an additional
        key for the last value of the Fonts registry key.
        (WebCore::populateFontDatabase): Pass the FontList.plist in its entirety
        to populatFontDatabaseFromPlist.

2009-09-25  Kevin Ollivier  <kevino@theolliviers.com>

        Build fix. Adding missing header files.

        * bindings/js/JSNamedNodeMapCustom.cpp:

2009-09-25  David Kilzer  <ddkilzer@apple.com>

        Part 1 of 2: <http://webkit.org/b/29753> DerivedSources.make broken for non-Mac targets

        Reviewed by Darin Adler.

        * DerivedSources.make: Move tests for ENABLE_CONTEXT_MENUS,
        ENABLE_DRAG_SUPPORT and ENABLE_INSPECTOR into Mac-only section.

2009-09-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Load blocks during unload should not affect targeted loads
        https://bugs.webkit.org/show_bug.cgi?id=29747

        Move the check of the unload state after checking for targeted links.

        Test: fast/loader/unload-hyperlink-targeted.html

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

2009-09-25  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        [Chromium] Add initial V8 bindings for WebGL
        https://bugs.webkit.org/show_bug.cgi?id=29664

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CanvasArrayBufferCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CanvasArrayCustom.h: Added.
        (WebCore::constructCanvasArray):
        * bindings/v8/custom/V8CanvasByteArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasFloatArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasIntArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext3DCustom.cpp: Added.
        (WebCore::jsArrayToFloatArray):
        (WebCore::jsArrayToIntArray):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * bindings/v8/custom/V8CanvasShortArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasUnsignedByteArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasUnsignedIntArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasUnsignedShortArrayCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * platform/graphics/GraphicsContext3D.h:

2009-09-25  Jeremy Orlow  <jorlow@chromium.org>

        This is breaking Chromium try bots, so I'm counting this as a build fix.

        Add more svn:ignore exceptions.  On different platforms, these files are
        generated with different case for WebCore.

        * WebCore.gyp: Changed property svn:ignore.

2009-09-25  Alexey Proskuryakov  <ap@apple.com>

        Reverting r48767, as it broke Windows build in a non-trivial way.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createJSAttributeEventListener):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::jsFunction):
        (WebCore::JSEventListener::markJSFunction):
        (WebCore::JSEventListener::handleEvent):
        (WebCore::JSEventListener::reportError):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::create):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::jsFunction):
        (WebCore::JSLazyEventListener::parseCode):
        * bindings/js/JSLazyEventListener.h:
        (WebCore::JSLazyEventListener::create):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/objc/ObjCEventListener.h:
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::handleEvent):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventListener.h:
        (WebCore::EventListener::reportError):
        (WebCore::EventListener::jsFunction):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * inspector/InspectorDOMStorageResource.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::handleEvent):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):

2009-09-24  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        Add a gyp variable to allow building a debug webcore without debug
        symbols.  This allows for faster compile, link, and gdb times.

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

        No new tests, build config change.

        * WebCore.gyp/WebCore.gyp:

2009-09-25  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Declare RegisteredEventListener as a class instead of a struct.
        This fixes a warning in the Chromium build.

        * dom/RegisteredEventListener.h:

2009-09-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jon Honeycutt.

        WebCore part of
        <rdar://problem/7211635> 2 byte characters are displayed as garbaged
        <rdar://problem/7212626> garbled/gibberish text (off-by-one)

        When the Windows Fonts directory contains more than one font file for a
        given font name, which of the fonts gets assigned to the name in the
        Core Graphics font database was determined arbitrarily and did not
        always match the font GDI used for the same font name. The mismatch
        caused character-to-glyph mapping to use one font and glyph rendering to
        use another.

        The fix is to update the Core Graphics font database from the registry
        entries (that reflect the name-to-font mapping that GDI uses) after
        populating it with the result of scanning the Fonts directory. As a
        consequence, the directory needs to be scanned at startup every time the
        registry key changes, so the last value of the registry key is kept
        in the property list on disk so that it could be compared to the current
        value on startup.

        * platform/graphics/win/FontDatabase.cpp:
        (WebCore::populateFontDatabaseFromPlist): Now takes a property list as
        a parameter and avoids round-tripping through XML by calling
        wkAddFontsFromPlist() instead of wkAddFontsFromPlistRepresentation().
        (WebCore::fontFilenamesFromRegistryKey):
        (WebCore::cgFontDBKey):
        (WebCore::writeFontDatabaseToPlist): Now takes the CG font DB property
        list and a property list with the font filenames from the registry and
        writes a dictionary with those property lists as values.
        (WebCore::fontFilenamesFromRegistry): Added. Returns an array with the
        values in the HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
        registry key.
        (WebCore::populateFontDatabase): Changed to read the contents of the
        Fonts registry key and compare it with the last-saved value from the
        property list, and to call wkAddFontsFromRegistry() after populating the
        CG font DB from the file system. Uses wkCreateFontsPlist() instead of
        wkCreateFontsPlistRepresentation() to avoid round-tripping through XML.

2009-09-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Inlined some object creation code, including lexicalGlobalObject access
        https://bugs.webkit.org/show_bug.cgi?id=29750

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::currentCallFrame):
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::hasBreakpoint): Updated for JavaScriptCore
        API changes.

2009-09-25  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=24399
        Make @import work in user stylesheets.  The first bug was that the URL wasn't being set on the
        user sheets themselves, so relative @import URLs couldn't resolve properly.  The second bug
        was that the loads would be denied.  This is fixed by using the requestUserCSSStyleSheet method
        instead of the normal request method.  In order to know when to do this, CSSStyleSheets now have
        a propagated boolean, m_isUserStyleSheet, that lets them know if they are user stylesheets or not.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/CSSStyleSheet.h:
        (WebCore::CSSStyleSheet::setIsUserStyleSheet):
        (WebCore::CSSStyleSheet::isUserStyleSheet):
        * dom/Document.cpp:
        (WebCore::Document::pageUserSheet):
        (WebCore::Document::pageGroupUserSheets):

2009-09-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        ASSERTION FAILED: !repaintContainer || repaintContainer == this
        https://bugs.webkit.org/show_bug.cgi?id=29755
        
        It's possible for RenderObject::container() to return an object that is higher
        in the hierarchy than the repaintContainer that is being used to repaint an
        object. For example, this can happen when running an accelerated opacity
        transition on an element with a position:absolute parent, and a position:absolute child.
        
        In this case we need to detect when RenderObject::container() will skip over
        repaintContainer, and in that case adjust the coords to shift into repaintContainer's space.

        Test: compositing/repaint/opacity-between-absolute.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::container):
        * rendering/RenderObject.h:

2009-09-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Crash with hardware accelerated rotation of a PDF image in a data URL
        <rdar://problem/7250378>
        
        PDF images don't return a color space from CGImageGetColorSpace(),
        so we need to null-check the return value before use.

        Test: compositing/color-matching/pdf-image-match.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToImage):

2009-09-25  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        Null-deref when first access to an Attr node is after its Element is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=29748

        Test: fast/dom/Attr/access-after-element-destruction.html

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::markChildren): Added. Keeps the ownerElement alive as
        long as the Attr is alive.

        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::markChildren): Added. Keeps the Element alive as
        long as the NamedNodeMap is alive.

        * dom/Attr.idl: Added CustomMarkFunction attribute.

        * dom/NamedAttrMap.cpp:
        (WebCore::NamedNodeMap::getAttributeItem): Tweaked formatting.
        (WebCore::NamedNodeMap::detachFromElement): Call clearAttributes so we don't
        have attributes hanging around that might need an Attr node created; that way
        we won't crash with a null-dereference trying to deal with one of them. This
        can't happen when working with JavaScript since the Element will be kept
        alive due to the change above.
        (WebCore::NamedNodeMap::addAttribute): Fix function name in comment.
        (WebCore::NamedNodeMap::removeAttribute): Removed unneeded "1" and added
        missing braces.

        * dom/NamedAttrMap.h: Made the element function public so it can be used by
        the JavaScript binding to keep the Element alive.

        * dom/NamedNodeMap.idl: Added CustomMarkFunction attribute.

2009-09-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        Onclick not fired for an element copied with cloneContents() or cloneNode()
        https://bugs.webkit.org/show_bug.cgi?id=25130

        The change here is that JS event listeners don't keep a reference to a global object from
        where they were created, and instead take it as a parameter when parsing source code. Also,
        the listener creation won't fail just because it happens for an element in a frameless
        document.
        Thus, moving nodes between documents no longer results in having incorrect registered
        lazy event listeners on them.

        Tests: fast/events/attribute-listener-cloned-from-frameless-doc-context-2.html
               fast/events/attribute-listener-cloned-from-frameless-doc-context.html
               fast/events/attribute-listener-cloned-from-frameless-doc.xhtml
               fast/events/attribute-listener-extracted-from-frameless-doc-context-2.html
               fast/events/attribute-listener-extracted-from-frameless-doc-context.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener): Don't take a reference to JSDOMGlobalObject.
        (WebCore::JSEventListener::jsFunction): Take ScriptExecutionContext as a parameter for
        getting to JSDOMGlobalObject. It's not used in base class, but is in JSLazyEventListner.
        (WebCore::JSEventListener::markJSFunction): Don't mark the global object.
        (WebCore::JSEventListener::handleEvent): Get global object from ScriptExecutionContext.
        (WebCore::JSEventListener::reportError): Ditto.

        * bindings/js/JSEventListener.h: (WebCore::JSEventListener::create): Don't keep a reference
        to JSDOMGlobalObject.

        * bindings/js/JSLazyEventListener.cpp: (WebCore::JSLazyEventListener::parseCode): Listener
        creation was split between this function and ScriptEventListener; moved it here, as JS
        global object can be different now.

        * bindings/js/JSLazyEventListener.h: (WebCore::JSLazyEventListener::create): Keep source URL,
        which can not be determined at parsing time.

        * bindings/js/ScriptEventListener.cpp: (WebCore::createAttributeEventListener): Moved code
        for listener creation to JSLazyEventListener. XSSAuditor code remains here, because tests
        expect that errors are logged at document parsing time, and because I don't know what other
        side effects moving it vould have.

        * dom/EventListener.h: handleEvent() and reportError() now take ScriptExecutionContext,
        because JSC needs a global context here.

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::createJSAttributeEventListener):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/objc/ObjCEventListener.h:
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::handleEvent):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * inspector/InspectorDOMStorageResource.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::handleEvent):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):
        Don't pass global object to JSEventListener::create(), which no longer needs it.
        Note that some of these functions still have an early return for null global object, which
        can probably be removed in a later patch.
        Pass ScriptExecutionContext to EventListener methods that now need it.

2009-09-25  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler, Dan Bernstein, Adele Peterson, and others.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29740
        <rdar://problem/7168738> Gmail: After changing a foreground text color, pressing return doesn't apply background to new line

        Change the way style is preserved when inserting a new paragraph.
        The original code handled insertion at the beginning and at the end of a paragraph as special
        cases. The newly created paragraph contained a set of nodes generated starting from the
        computed style of the insertion node. This approach has two problems:
        1. if the insertion node has a non opaque background color and one of the parent element did have
        a solid background color the new paragraph did not have the element with the solid color in the tree.
        2. in some circumstances it generated more markup than the original paragraph had (a span with bold, italic,
        background color and some font attribute was being reproduced as span bold italic font as separate tags.
        The new approach is to recreate in the new paragraph the same hierarchy of nodes found in the
        paragraph where the insertion point is.

        Test: editing/inserting/insert-bg-font.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::getAncestorsInsideBlock): retrieves the list of all the ancestors
        between the insert node and the outer block.
        (WebCore::InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock): uses the list of ancestors to recreate
        in the new paragraph the same element hierarchy present in the starting paragraph.
        (WebCore::InsertParagraphSeparatorCommand::doApply): changed the code to handle the general case of insertion
        in the middle of the paragraph to use the new methods. Changed the handling of the insertion at the beginning and
        at the end of the paragraph to use the new methods instead of applying the calculated style.
        * editing/InsertParagraphSeparatorCommand.h: added methods getAncestorsInsideBlock and cloneHierarchyUnderNewBlock.

2009-09-25  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Content-type parameters not taken into account when building form-data
        https://bugs.webkit.org/show_bug.cgi?id=28970

        existing manual test case extended with new tests

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshFormData):
        (WebInspector.ResourceView.prototype._refreshParms):
        * manual-tests/inspector/display-form-data.html:

2009-09-25  Yuan Song  <song.yuan@ericsson.com>

        Reviewed by Darin Adler.

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

        Raise SECURITY_ERR exception if an attempt is made to change document.domain to an invalid value.

        Test: fast/js/invalid-domain-change-throws-exception.html

        * dom/Document.cpp:
        (WebCore::Document::setDomain):
        * dom/Document.h:
        * dom/Document.idl:

2009-09-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Teach ScheduledAction::execute about isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=27703

        When setTimeout is called with a string argument in an isolated
        world, we now compile the string in the isolated world.

        Last time we tried this change, we got a lot of crashes.  This
        time we're using a fresh local handle as our context to avoid
        trouble if the peristent handle gets disposed before we leave
        the context.

        Test: fast/dom/timer-clear-interval-in-handler-and-generate-error.html

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

2009-09-25  Paul Godavari  <paul@chromium.org>

        Reviewed by Darin Fisher.

        Fix a regression in Mac Chromium popup menus, where the user's
        selection was ignored and the popup became unresponsive.
        https://bugs.webkit.org/show_bug.cgi?id=29726

        The fix is to notify the popup's client that the popup was hidden,
        even if the popup has no parent.

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

2009-09-25  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Dan Bernstein.

        Enable Pasteboard::writePlainText for Chromium and fix code style nits.
        https://bugs.webkit.org/show_bug.cgi?id=29734

        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writePlainText):

2009-09-25  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Ariya Hidayat.

        https://bugs.webkit.org/show_bug.cgi?id=28876
        [Qt] reduce peak memory consumption of text decoding.

        Chop large input buffer into small buffers to reduce peak memory
        during decoding.

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::decode):

2009-09-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Add a mechanism for automatically halting plug-ins.

        Reviewed by Oliver Hunt and Alice Liu.

        * GNUmakefile.am:

        * WebCore.base.exp:
        Update export of Page constructor.

        * WebCore.gypi:

        * WebCore.pro:

        * WebCore.vcproj/WebCore.vcproj:
        Add PluginHalter.{h,cpp}, PluginHalterClient.h, and
        HaltablePlugin.h.

        * WebCore.xcodeproj/project.pbxproj:
        Add files to Mac project.

        * loader/EmptyClients.h:
        Added an empty PluginHalterClient.
        (WebCore::EmptyPluginHalterClient::shouldHaltPlugin):
        Return false.

        * page/PluginHalter.cpp: Added.
        (WebCore::PluginHalter::PluginHalter):
        (WebCore::PluginHalter::didStartPlugin):
        Add the object to the plug-in set. If this is the only item in the set,
        set m_oldestStartTime to this object's time, and start the timer.
        (WebCore::PluginHalter::didStopPlugin):
        Remove the plug-in from the set.
        (WebCore::PluginHalter::timerFired):
        Find the cut-off time as the current time minus the allowed run time;
        plug-ins older than this may be halted. Iterate over the plug-ins. Find
        the object with the oldest start time that is too young to be halted;
        we'll use its start time to set the timer's next fire time. For all
        plug-ins that are candidates to be halted, call the
        PluginHalterClient's shouldHaltPlugin(). If this function returns true,
        call the plug-in's halt() function. Remove these objects from the set
        of tracked plug-ins. Call startTimerIfNecessary() to restart the timer.
        (WebCore::PluginHalter::startTimerIfNecessary):
        If the timer is set to fire, or the set of tracked plug-ins is empty,
        return early. Set the timer to fire after the oldest plug-in has run
        for the allowed run time.

        * page/PluginHalter.h: Added.
        (WebCore::PluginHalter::setPluginAllowedRunTime):

        * page/PluginHalterClient.h: Added.
        (WebCore::PluginHalterClient::~PluginHalterClient):

        * page/Page.cpp:
        (WebCore::Page::Page):
        Initialize m_pluginHalterClient. Call pluginHalterEnabledStateChanged()
        to create the PluginHalter if necessary.
        (WebCore::Page::pluginHalterEnabledStateChanged):
        If plug-in halting is enabled, create the PluginHalter. If it is
        disabled, clear it.
        (WebCore::Page::pluginAllowedRunTimeChanged):
        If there is a plug-in halter, call its setPluginAllowedRunTime().
        (WebCore::Page::didStartPlugin):
        If there is a plug-in halter, call its didStartPlugin().
        (WebCore::Page::didStopPlugin):
        If there is a plug-in halter, call its didStopPlugin().

        * page/Page.h:
        Add a parameter to the Page constructor for the PluginHalterClient.
        Added declarations for didStartPlugin() and didStopPlugin(), which are
        called when HaltablePlugins are added to or removed from the page. Adds
        pluginAllowedRunTimeChanged() and pluginHalterEnabledStateChanged() to
        notify the Page when these settings are changed. Added members to hold
        the PluginHalter and the PluginHalterClient.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setPluginHalterEnabled):
        If the enabled state has changed, call the Page's
        pluginHalterEnabledStateChanged().
        (WebCore::Settings::setPluginAllowedRunTime):
        Call the Page's pluginAllowedRunTimeChanged().

        * page/Settings.h:
        (WebCore::Settings::pluginHalterEnabled):
        (WebCore::Settings::pluginAllowedRunTime):

        * page/HaltablePlugin.h: Added. Defines an interface for plug-ins that
        can be automatically halted.
        (WebCore::HaltablePlugin::~HaltablePlugin):

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        Pass a dummy PluginHalterClient.

2009-09-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION: webkit-transform scale no longer works properly in nightly build
        https://bugs.webkit.org/show_bug.cgi?id=29730
        
        When the initial or final state of a scale animation does not specify a transform,
        use a default scale of 1, rather than zero.

        Test: compositing/transitions/scale-transition-no-start.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::getTransformFunctionValue):

2009-09-24  John Gregg  <johnnyg@google.com>

        Reviewed by Eric Seidel.

        isEnabled switch for notifications (experimental) in Page Settings
        https://bugs.webkit.org/show_bug.cgi?id=28930

        Adds a run-time flag in Settings object that controls whether
        to expose desktop notifications.

        No new test, but test code also modified to set this preference.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitNotifications): check preference before returning notifications object
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setExperimentalNotificationsEnabled):
        * page/Settings.h:
        (WebCore::Settings::experimentalNotificationsEnabled):

2009-09-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Fix <rdar://problem/7162000> Crash while trying to
        calculate the horizontal position of image

        Test: fast/inline-block/relative-positioned-rtl-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced): Corrected an
        isInline() test to isRenderInline(). This is similar to r41259.

2009-09-24  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Timothy Hatcher.

        Fix expanding profile call stacks being broken after sorting.
        https://bugs.webkit.org/show_bug.cgi?id=26423

        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.sort):
        Set shouldRefreshChildren to true on collapsed nodes with children so that expanding it
        causes the children to be placed in the right positions.

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Stephanie Lewis.

        Fixed sudden termination console spew due to too many calls to
        enableSuddenTermination.
        
        <rdar://problem/7063125> 10A410: Safari logging enableSuddenTermination errors

        * page/DOMWindow.cpp:
        (WebCore::removeUnloadEventListener):
        (WebCore::removeAllUnloadEventListeners):
        (WebCore::removeBeforeUnloadEventListener):
        (WebCore::removeAllBeforeUnloadEventListeners): Only
        enableSuddenTermination if the set of listeners is empty *and* this
        window was in the set. Otherwise, a no-op will cause us to enableSuddenTermination.

2009-09-24  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Alexey Proskuryakov.

        WebKit returns "" instead of null when getting
        inexistent, forbidden or invalidly named headers.
        https://bugs.webkit.org/show_bug.cgi?id=29140

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getResponseHeader):
        Changed to return null as it should according to the spec.

2009-09-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add GYP generated files to svn:ignore
        https://bugs.webkit.org/show_bug.cgi?id=29724

        Adding the following files to the svn:ignore list (all in the
        WebCore/WebCore.gyp directory)

        WebCore.xcodeproj
        WebCore.sln
        WebCore.vcproj
        WebCore_Debug.rules
        WebCore_Release.rules
        WebCore_Release - no tcmalloc.rules
        WebCore_Purify.rules
        WebCore.mk
        WebCore_Debug_rules.mk
        WebCore_Release_rules.mk
        WebCore_Release - no tcmalloc_rules.mk
        WebCore_Purify_rules.mk
        WebCore.scons
        WebCore_main.scons

        * WebCore.gyp: Changed property svn:ignore.

2009-09-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Mac build fix.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::shouldTurnVerticalTicksIntoHorizontal):
        remove unused parameter from function signature;

2009-09-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Oliver Hunt.

        Implement correct horizontal scrollbar behavior for GTKalso on
        styled scrollbars.

        https://bugs.webkit.org/show_bug.cgi?id=29348
        [Gtk] Scrollwheel on horizontal scrollbars should slide horizontally

        Test: platform/gtk/scrollbars/overflow-scrollbar-horizontal-wheel-scroll.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): on GTK+, when using the
        wheel with the pointer on the horizontal scrollbar, scroll
        horizontally;
        * platform/PlatformWheelEvent.h:
        * platform/gtk/WheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::swapOrientation): allow adding a
        vertical scroll to the horizontal one;

2009-09-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Eric Seidel.

        StorageNamespace::storageArea() should take in a PassRefPtr<StorageOrigin>
        https://bugs.webkit.org/show_bug.cgi?id=29290

        Modified StorageNamespace::storageArea() to take in a PassRefPtr<StorageOrigin>
        per http://webkit.org/coding/RefPtr.html

        No behavior change, so no tests.

        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::storageArea):
        * storage/StorageNamespaceImpl.h:

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Added back enable/disableSuddenTermination() functionality I accidentally
        removed in my last patch.

        * page/DOMWindow.cpp:
        (WebCore::addUnloadEventListener):
        (WebCore::removeUnloadEventListener):
        (WebCore::removeAllUnloadEventListeners):
        (WebCore::addBeforeUnloadEventListener):
        (WebCore::removeBeforeUnloadEventListener):
        (WebCore::removeAllBeforeUnloadEventListeners):
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents):
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):

2009-09-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg and Mark Rowe.

        Don't pass -F to GCC on non-mac platforms since it is an darwin only.

        * DerivedSources.make:

2009-09-24  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * dom/Element.idl:

2009-09-23  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Revert the relevant parts of r47925, and implement an alternate
        fix (localize the coordinate check to GraphicsContext::clipPath()).
        This fixes http://crbug.com/21174.

        Covered by LayoutTests/svg/dynamic-updates/SVGClipPathElement-dom-clipPathUnits-attr.html.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::currentPathInLocalCoordinates):

2009-09-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Merge changes from Mozilla's FTP directory parser.
        <rdar://problem/7227620> and https://bugs.webkit.org/show_bug.cgi?id=29294

        FTP layout tests not possible at this time.
        https://bugs.webkit.org/show_bug.cgi?id=29719 tracks making them possible.

        * loader/FTPDirectoryParser.cpp:
        (WebCore::ParsingFailed):
        (WebCore::parseOneFTPLine):

2009-09-24  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] re-enable some media tests
        https://bugs.webkit.org/show_bug.cgi?id=29716

        make canPlayType() return "probably" if mime-type is known
        and codecs string is not empty. If codecs is empty return
        "maybe".

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

2009-09-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29703
        Add a function to element to check whether it matches a CSS selector

        Implement Element.webkitMatchesSelector.

        * css/CSSSelectorList.cpp:
        (WebCore::forEachTagSelector):
        (WebCore::forEachSelector):
        (WebCore::SelectorNeedsNamespaceResolutionFunctor::operator()):
        (WebCore::CSSSelectorList::selectorsNeedNamespaceResolution):
        * css/CSSSelectorList.h:
        Moved code to iterate the CSSSelectorList and determine if any
        selectors need namespace resolution from a static function in
        Node.cpp to CSSSelectorList so that it can be used by webkitMatchesSelector
        as well as querySelector/querySelectorAll.

        * dom/Element.cpp:
        (WebCore::Element::webkitMatchesSelector):
        * dom/Element.h: 
        * dom/Element.idl:
        Implement the new function. Handles exceptional cases identically to
        querySelector/querySelectorAll.

        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):
        Moved selectorsNeedNamespaceResolution to CSSSelectorList from here.

2009-09-24  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fixed bindings build after http://trac.webkit.org/changeset/48701
        https://bugs.webkit.org/show_bug.cgi?id=29713

        Got rid of isWindowEvent in function signatures:
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::getReceiverObject):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::callListenerFunction):
        * bindings/v8/V8LazyEventListener.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::handleEvent):
        (WebCore::V8WorkerContextEventListener::callListenerFunction):
        (WebCore::V8WorkerContextEventListener::getReceiverObject):
        * bindings/v8/V8WorkerContextEventListener.h:
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/custom/V8CustomEventListener.h:

        Switched to EventTarget methods of adding/removing listeners:
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
        (WebCore::toEventID):
        (WebCore::ACCESSOR_SETTER):

        * dom/EventTarget.h: Some functions were incorrectly marked
        as JSC-specific.

2009-09-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Color-code watch expression errors with red.

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

        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        (WebInspector.WatchExpressionTreeElement.prototype.update):
        * inspector/front-end/inspector.css:

2009-09-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Fix formatting for messages derived from resource warnings,
        couple of drive-by formatting fixes.

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

        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addMessageToConsole):
        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._evaluateAndWrap):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):

2009-09-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Implement InspectorController::copyNode(id).

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::copyNode):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.handleCopyEvent):

2009-09-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY(rollout)

        Roll out r48712 as it is incorrect.

        Overriding getPropertyNames is incorrect.

        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:

2009-09-24  Xan Lopez  <xlopez@igalia.com>

        Revert r48697, since it broke key handling notification to GTK+.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        (WebCore::singleCharacterString):

2009-09-24  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GStreamer MediaPlayer is unable to correctly querry duration
        https://bugs.webkit.org/show_bug.cgi?id=24639

        check duration returned by gst_element_query_duration() only
        when using GStreamer < 0.10.23.

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

2009-09-24  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Eric Seidel.

        The indices of RuntimeArray should be enumerated like for a regular array.
        https://bugs.webkit.org/show_bug.cgi?id=29005

        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getPropertyNames):
        * bridge/runtime_array.h:

2009-09-23  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Eric Seidel.

        Introduce Pasteboard::writePlaintext(const String&) so that copying
        of the inspected elements HTML will be possible in WebInspector.
        https://bugs.webkit.org/show_bug.cgi?id=29634

        * platform/Pasteboard.h:
        * platform/android/TemporaryLinkStubs.cpp:
        (Pasteboard::writePlainText):
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/haiku/PasteboardHaiku.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writePlainText):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        * platform/wince/PasteboardWince.cpp:
        (WebCore::Pasteboard::writePlainText):
        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):

2009-09-24  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        Fix QApp::translate() calls to provide the correct class name without
        a trailing comma.

        * platform/qt/Localizations.cpp:
        (WebCore::localizedMediaTimeDescription):

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        More build fix: Removed JSSharedWorkerContextCustom.cpp from project
        files, since it no longer exists in the repository.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: Declare set/unsetPendingActivity public, so
        SharedWorkerScriptLoader can call them.

        * dom/ActiveDOMObject.h:

2009-09-24  Geoffrey Garen  <ggaren@apple.com>

        Fixed a bit of the Windows build.

        * workers/SharedWorker.idl: Declare a custom mark function. (I accidentally
        removed this in my last patch.)
        * WebCore.xcodeproj/project.pbxproj: Added JSSharedWorkerCustom.cpp back
        to the build. (I accidentally removed this in my last patch.)

2009-09-23  Geoffrey Garen  <ggaren@apple.com>

        32-bit build fix: restore previous cast that I thought was unnecessary.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):

2009-09-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Bring a little sanity to this crazy EventTarget world of ours
        https://bugs.webkit.org/show_bug.cgi?id=29701

        Lots of EventTarget refactoring to achieve a single shared implementation
        that fixes some of the performance and correctness bugs of the many individual
        implementations, and makes reasoning about EventTargets and EventListeners
        much easier.
        
        The basic design is this:
            - EventTarget manages a set of EventListeners.
            - onXXX EventListener attributes forward to standard EventTarget APIs.
            - Since the onXXX code is repetitive, it is usually done with macros
              of the form DEFINE_ATTRIBUTE_EVENT_LISTENER(attributeName).
            - EventTarget provides a shared implementation of dispatchEvent,
              which subclasses with special event dispatch rules, like Node, override.
            - To support Node, which lazily instantiates its EventTarget data,
              EventTarget has no data members, and instead makes a virtual call
              to get its data from wherever its subclass chose to store it.
              
        Code that used to call dispatchEvent, passing an ExceptionCode paratmeter,
        even though no exception could be thrown, has been changed not to do so,
        to improve clarity and performance.
        
        Code that used to call a special dispatchXXXEvent function, which just
        turned around and called dispatchEvent, has been changed to call
        dispatchEvent, to improve clarity and performance.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj: Another day in the life of a WebKit
        engineer.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::isObservableThroughDOM): Updated for Node API change. Added
        "is not in the document but is firing event listeners" as a condition
        that makes a Node observable in the DOM, so that event listeners firing
        on removed nodes are not destroyed midstream. (This was a long-standing
        bug that was somewhat hidden by the old implementation's habit of
        copying the RegisteredEventListener vector before firing events, which
        would keep almost all the relevant objects from being destroyed.)

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent): Removed the isWindowEvent flag
        because it was one of the most elaborately planned no-ops in the history
        of software crime, and one of the reasons clients thought they needed more
        than one dispatchEvent function even though they didn't.
        * bindings/js/JSEventListener.h:

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::markChildren):
        (WebCore::JSMessagePort::markChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren):
        * bindings/js/JSAbstractWorkerCustom.cpp:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        * bindings/js/JSDedicatedWorkerContextCustom.cpp:
        * bindings/js/JSEventSourceCustom.cpp:
        * bindings/js/JSMessagePortCustom.cpp:
        * bindings/js/JSSharedWorkerContextCustom.cpp: Removed.
        * bindings/js/JSWebSocketCustom.cpp:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::markChildren):
        * bindings/js/JSWorkerCustom.cpp:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::markChildren): EventListener marking is
        now autogenerated. Classes that still have custom mark functions for other
        reasons now call a shared EventTarget API to mark their EventListeners.

        * bindings/objc/ObjCEventListener.h:
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::handleEvent): Bye bye isWindowEvent.

        * bindings/scripts/CodeGeneratorJS.pm: Autogeneration support for
        marking and invalidating event listeners.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::willRemoveChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/Document.cpp:
        (WebCore::Document::removeAllEventListeners):
        (WebCore::Document::implicitClose):
        (WebCore::Document::setFocusedNode):
        (WebCore::Document::dispatchWindowEvent):
        (WebCore::Document::dispatchWindowLoadEvent):
        (WebCore::Document::finishedParsing):
        * dom/Document.h: Use dispatchEvent directly.

        * dom/Element.h: Moved a few event listener attributes down from Node,
        since they don't apply to all Nodes, only Elements.

        * dom/EventListener.h: Removed isWindowEvent parameter.

        * dom/EventNames.h: Added the "display" event name, so it works correctly
        with attribute macros, and for performance.

        * dom/EventTarget.cpp:
        (WebCore::forbidEventDispatch):
        (WebCore::allowEventDispatch):
        (WebCore::eventDispatchForbidden): Made this code (embarrasingly) thread
        safe, since it's now called on multiple threads. (Currently, we only forbid
        event dispatch on the main thread. If we ever want to forbid event dispatch
        on secondary threads, we can improve it then.)

        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::setAttributeEventListener):
        (WebCore::EventTarget::getAttributeEventListener):
        (WebCore::EventTarget::clearAttributeEventListener):
        (WebCore::EventTarget::dispatchEvent):
        (WebCore::EventTarget::fireEventListeners):
        (WebCore::EventTarget::getEventListeners):
        (WebCore::EventTarget::removeAllEventListeners):
        * dom/EventTarget.h:
        (WebCore::FiringEventEndIterator::FiringEventEndIterator):
        (WebCore::EventTarget::ref):
        (WebCore::EventTarget::deref):
        (WebCore::EventTarget::markEventListeners):
        (WebCore::EventTarget::invalidateEventListeners):
        (WebCore::EventTarget::isFiringEventListeners):
        (WebCore::EventTarget::hasEventListeners): The ONE TRUE IMPLEMENTATION of
        EventTarget APIs, crafted from an amalgam of all the different versions
        we used to have. The most significant change here is that we no longer
        make a copy of an EventListener vector before firing the events in the
        vector -- instead, we use a reference to the original vector, along with
        a notification mechanism for the unlikely case when an EventListener is
        removed from the vector. This substantially reduces malloc, copying, and
        refcount overhead, and complexity.

        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create): Use dispatchEvent directly.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::eventTargetData):
        (WebCore::MessagePort::ensureEventTargetData):
        * dom/MessagePort.h:
        (WebCore::MessagePort::setOnmessage):
        (WebCore::MessagePort::onmessage):
        * dom/MessagePort.idl: Removed custom EventTarget implementation.

        * dom/MutationEvent.h:
        (WebCore::MutationEvent::create): Added some default values so callers
        can construct MutationEvents more easily, without calling a custom dispatch
        function.

        * dom/Node.cpp:
        (WebCore::Node::addEventListener):
        (WebCore::Node::removeEventListener):
        (WebCore::Node::eventTargetData):
        (WebCore::Node::ensureEventTargetData):
        (WebCore::Node::handleLocalEvents):
        (WebCore::Node::dispatchEvent):
        (WebCore::Node::dispatchGenericEvent):
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchUIEvent):
        (WebCore::Node::dispatchKeyEvent):
        (WebCore::Node::dispatchMouseEvent):
        (WebCore::Node::dispatchWheelEvent):
        (WebCore::Node::dispatchFocusEvent):
        (WebCore::Node::dispatchBlurEvent):
        * dom/Node.h:
        (WebCore::Node::preDispatchEventHandler):
        (WebCore::Node::postDispatchEventHandler):
        * dom/Node.idl:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::eventTargetData):
        (WebCore::NodeRareData::ensureEventTargetData): Use the shared EventTarget
        interface, and call dispatchEvent directly instead of custom dispatchXXXEvent
        functions that just forwarded to dispatchEvent.

        * dom/RegisteredEventListener.cpp:
        * dom/RegisteredEventListener.h:
        (WebCore::RegisteredEventListener::RegisteredEventListener):
        (WebCore::operator==): This is just a simple struct now, since we no longer
        do a complicated copy / refCount / isRemoved dance just to honor the rule
        that an EventListener can be removed during event dispatch.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Removed another custom dispatchEvent.

        * html/HTMLBodyElement.cpp:
        * html/HTMLBodyElement.h: Use the shared EventTarget API.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFormControlChangeEvent):
        (WebCore::HTMLFormControlElement::checkValidity):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::handleLocalEvents):
        (WebCore::HTMLFormElement::prepareSubmit):
        (WebCore::HTMLFormElement::reset):
        * html/HTMLFormElement.h: Use the standard dispatchEvent API.

        * html/HTMLFrameSetElement.cpp:
        * html/HTMLFrameSetElement.h: Use the shared EventTarget API.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::onSearch):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadInternal):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        (WebCore::HTMLScriptElement::dispatchErrorEvent):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::errorEventTimerFired):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::notifyFinished): Use the standard dispatchEvent API.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):
        * inspector/InspectorDOMStorageResource.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        (WebCore::HashChangeEventTask::performTask):
        (WebCore::FrameLoader::pageHidden): No more isWindowEvent.

        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::CallCacheListenerTask::performTask):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::notifyDOMApplicationCache):
        * loader/appcache/ApplicationCacheHost.h:
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::eventTargetData):
        (WebCore::DOMApplicationCache::ensureEventTargetData):
        * loader/appcache/DOMApplicationCache.h:
        * loader/appcache/DOMApplicationCache.idl: Switched to the standard
        EventTarget API. As a part of this, I switched this class from using a
        custom internal event name enumeration to using the standard EventNames.

        * notifications/Notification.cpp:
        (WebCore::Notification::eventTargetData):
        (WebCore::Notification::ensureEventTargetData):
        * notifications/Notification.h:
        (WebCore::Notification::scriptExecutionContext):
        * notifications/Notification.idl: Switched to the standard EventTarget API.

        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::event):
        (WebCore::windowsWithUnloadEventListeners):
        (WebCore::windowsWithBeforeUnloadEventListeners):
        (WebCore::allowsBeforeUnloadListeners):
        (WebCore::DOMWindow::dispatchAllPendingBeforeUnloadEvents):
        (WebCore::DOMWindow::pendingUnloadEventListeners):
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents): Changed the "pending"
        unload / beforeunload listener tracker just to track which windows had
        such listeners, instead of actually keeping a copy of the listeners. Now,
        this code can use the standard EventTarget API.

        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::postMessageTimerFired):
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::dispatchLoadEvent):
        (WebCore::DOMWindow::dispatchEvent):
        (WebCore::DOMWindow::removeAllEventListeners):
        (WebCore::DOMWindow::captureEvents):
        (WebCore::DOMWindow::releaseEvents):
        (WebCore::DOMWindow::eventTargetData):
        (WebCore::DOMWindow::ensureEventTargetData):
        * page/DOMWindow.h:
        * page/DOMWindow.idl: Use the standard EventTarget APIs.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::canMouseDownStartSelect):
        (WebCore::EventHandler::canMouseDragExtendSelect):
        (WebCore::EventHandler::sendResizeEvent):
        (WebCore::EventHandler::sendScrollEvent): Use dispatchEvent directly.

        * page/EventSource.cpp:
        (WebCore::EventSource::endRequest):
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::parseEventStreamLine):
        (WebCore::EventSource::stop):
        (WebCore::EventSource::createMessageEvent):
        (WebCore::EventSource::eventTargetData):
        (WebCore::EventSource::ensureEventTargetData):
        * page/EventSource.h:
        * page/EventSource.idl: Use the standard EventTarget APIs.

        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedNode):
        (WebCore::FocusController::setFocusedFrame):
        * page/Frame.cpp:
        (WebCore::Frame::shouldClose):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::valueChanged):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::selectionChanged):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged): Use dispatchEvent.

        * svg/SVGElement.cpp:
        (WebCore::hasLoadListener): Rewritten for new EventTarget API.

        * svg/SVGElementInstance.cpp:
        (WebCore::dummyEventTargetData):
        (WebCore::SVGElementInstance::addEventListener):
        (WebCore::SVGElementInstance::removeEventListener):
        (WebCore::SVGElementInstance::removeAllEventListeners):
        (WebCore::SVGElementInstance::dispatchEvent):
        (WebCore::SVGElementInstance::eventTargetData):
        (WebCore::SVGElementInstance::ensureEventTargetData): Use the EventTarget API.

        * svg/SVGElementInstance.h:
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::dispatchErrorEvent): Use dispatchEvent directly.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::transferEventListenersToShadowTree): Updated for
        new EventTarget API.

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::handleEvent): No more isWindowEvent.

        * websockets/WebSocket.cpp:
        (WebCore::ProcessWebSocketEventTask::create):
        (WebCore::ProcessWebSocketEventTask::performTask):
        (WebCore::ProcessWebSocketEventTask::ProcessWebSocketEventTask):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):
        (WebCore::WebSocket::eventTargetData):
        (WebCore::WebSocket::ensureEventTargetData):
        * websockets/WebSocket.h:
        * websockets/WebSocket.idl:
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::eventTargetData):
        (WebCore::AbstractWorker::ensureEventTargetData):
        * workers/AbstractWorker.h:
        * workers/AbstractWorker.idl:
        * workers/DedicatedWorkerContext.cpp:
        * workers/DedicatedWorkerContext.h:
        * workers/DedicatedWorkerContext.idl:
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerConnectTask::performTask):
        (WebCore::SharedWorkerScriptLoader::load):
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        * workers/SharedWorker.idl:
        * workers/SharedWorkerContext.cpp:
        (WebCore::createConnectEvent):
        * workers/SharedWorkerContext.h:
        * workers/SharedWorkerContext.idl:
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        * workers/Worker.idl:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::eventTargetData):
        (WebCore::WorkerContext::ensureEventTargetData):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::MessageWorkerTask::performTask):
        (WebCore::WorkerExceptionTask::performTask):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::networkError):
        (WebCore::XMLHttpRequest::abortError):
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::eventTargetData):
        (WebCore::XMLHttpRequest::ensureEventTargetData):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestProgressEvent.h:
        (WebCore::XMLHttpRequestProgressEvent::create):
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::eventTargetData):
        (WebCore::XMLHttpRequestUpload::ensureEventTargetData):
        * xml/XMLHttpRequestUpload.h:
        * xml/XMLHttpRequestUpload.idl: Use new EventTarget API.

2009-09-23  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        - Support for maxLength of <textarea>
        - Move numGraphemeClusters() and numCharactersInGraphemeClusters() from InputElement to String.
        https://bugs.webkit.org/show_bug.cgi?id=29292

        Test: fast/forms/textarea-maxlength.html

        * dom/InputElement.cpp:
        (WebCore::InputElement::sanitizeUserInputValue):
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        (WebCore::HTMLTextAreaElement::handleBeforeTextInsertedEvent):
        (WebCore::HTMLTextAreaElement::sanitizeUserInputValue):
        (WebCore::HTMLTextAreaElement::maxLength):
        (WebCore::HTMLTextAreaElement::setMaxLength):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.idl:
        * platform/text/PlatformString.h:
        * platform/text/String.cpp:
        (WebCore::String::numGraphemeClusters):
        (WebCore::String::numCharactersInGraphemeClusters):

2009-09-23  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] REGRESSION: BitmapImage::getGdkPixbuf fails for non-square images
        https://bugs.webkit.org/show_bug.cgi?id=29654

        Give GDK_Backspace key events the proper text properties.

        Instead of adding new tests, this change removes existing tests
        from Gtk's skipped list.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):
        (WebCore::singleCharacterString):

2009-09-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26989
        Should allow navigation of top-level openers
        <rdar://problem/7034025>

        Allow navigation of cross-origin window.opener if it is top-level frame.

        Test: http/tests/security/frameNavigation/cross-origin-opener.html

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

2009-09-23  Marshall Culpepper  <mculpepper@appcelerator.com>

        Reviewed by Eric Seidel.

        Added $(WebKitLibrariesDir)/include/cairo so cairo.h is found by
        default when the necessary dependencies are extracted into the
        WebKitLibrariesDir.
        https://bugs.webkit.org/show_bug.cgi?id=29661

        * WebCore.vcproj/WebCoreCairo.vsprops:

2009-09-23  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Crash when website does a history.back() followed by an alert()
        https://bugs.webkit.org/show_bug.cgi?id=29686
        rdar://problem/6984996

        When loading is deferred, we need to defer timer-based loads
        too, not just networking-driven loads. Otherwise we can get
        syncronouse navigation while running a script, which leads to
        crashes and other badness.

        This patch includes a manual test; an automated test may be
        possible some time in the future.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Use scheduleLocationChange
        instead of scheduleHTTPRedirection to implement the navigation
        needed for x-frame-options.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader): Updated for data members with
        new names and new data members.
        (WebCore::FrameLoader::setDefersLoading): When turning deferral
        off, call startRedirectionTimer and startCheckCompleteTimer, since
        either of them might have been fired and ignored while defersLoading
        was true.
        (WebCore::FrameLoader::clear): Updated for replacement of the
        m_checkCompletedTimer and m_checkLoadCompleteTimer timers.
        (WebCore::FrameLoader::allAncestorsAreComplete): Added.
        (WebCore::FrameLoader::checkCompleted): Added code to set
        m_shouldCallCheckCompleted to false. Changed code that calls
        startRedirectionTimer to call it unconditionally, since that
        function now knows when to do work and doesn't expect callers
        to handle that any more.
        (WebCore::FrameLoader::checkTimerFired): Added. Replaces the old
        timer fired callbacks. Calls checkCompleted and checkLoadComplete
        as appropriate, but not when defersLoading is true.
        (WebCore::FrameLoader::startCheckCompleteTimer): Added. Replaces
        the two different calls to start timers before. Only starts the
        timers if they are needed.
        (WebCore::FrameLoader::scheduleCheckCompleted): Changed to call
        startCheckCompleteTimer after setting boolean.
        (WebCore::FrameLoader::scheduleCheckLoadComplete): Ditto.
        (WebCore::FrameLoader::scheduleHistoryNavigation): Removed
        canGoBackOrForward check. The logic works more naturally when
        we don't do anything until the timer fires.
        (WebCore::FrameLoader::redirectionTimerFired): Do nothing if
        defersLoading is true. Also moved canGoBackOrForward check here.
        (WebCore::FrameLoader::scheduleRedirection): Changed code that
        calls startRedirectionTimer to do so unconditionally. That
        function now handles the rules about when to start the timer
        rather than expecting the caller to do so.
        (WebCore::FrameLoader::startRedirectionTimer): Added code to
        handle the case where there is no redirection scheduled,
        where the timer is already active, or where this is a classic
        redirection and there is an ancestor that has not yet completed
        loading.
        (WebCore::FrameLoader::completed): Call startRedirectionTimer
        here directly instead of calling a cover named parentCompleted.
        Hooray! One less function in the giant FrameLoader class!
        (WebCore::FrameLoader::checkLoadComplete): Added code to set
        m_shouldCallCheckLoadComplete to false.

        * loader/FrameLoader.h: Replaced the two functions
        checkCompletedTimerFired and checkLoadCompleteTimerFired with
        one function, checkTimerFired. Removed the parentCompleted
        function. Added the startCheckCompleteTimer and
        allAncestorsAreComplete functions. Replaced the
        m_checkCompletedTimer and m_checkLoadCompleteTimer data
        members with m_checkTimer, m_shouldCallCheckCompleted, and
        m_shouldCallCheckLoadComplete.

        * manual-tests/go-back-after-alert.html: Added.
        * manual-tests/resources/alert-and-go-back.html: Added.

2009-09-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/29660> Move "Generate 64-bit Export File" build phase script into DerivedSources.make

        Reviewed by Mark Rowe.

        The "Generate 64-bit Export File" build phase script generated
        the WebCore.LP64.exp export file used to link 64-bit WebCore.
        Instead of having a separate build phase script, move its
        generation into DerivedSources.make where WebCore.exp is
        generated.

        * DerivedSources.make: Added a rule to make WebCore.LP64.exp.
        Added code to append WebCore.PluginHostProcess.exp to
        $(WEBCORE_EXPORT_DEPENDENCIES) when WTF_USE_PLUGIN_HOST_PROCESS
        is set to 1.
        * WebCore.PluginHostProcess.exp: Renamed from WebCore/WebCore.LP64.exp.
        * WebCore.xcodeproj/project.pbxproj: Removed the "Generate
        64-bit Export File" build phase script. Renamed WebCore.LP64.exp
        to WebCore.PluginHostProcess.exp.

2009-09-23  Peter Kasting  <pkasting@google.com>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=29694
        [Chromium] Eliminate dependency on gfx::Rect from ImageSkia.

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawResampledBitmap):

2009-09-22  Timothy Hatcher  <timothy@apple.com>

        Prevent scrolling multiple elements during latched wheel events.

        Reviewed by Anders Carlsson.

        * page/EventHandler.cpp:
        (WebCore::scrollAndAcceptEvent):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scroll):
        * rendering/RenderBox.h:

2009-09-23  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=29523
        
        Fixes an issue where a JavaScript URL that was URL-encoded twice can bypass the
        XSSAuditor.
        
        The method FrameLoader::executeIfJavaScriptURL decodes the URL escape 
        sequences in a JavaScript URL before it is eventually passed to the XSSAuditor.
        Because the XSSAuditor also decodes the URL escape sequences as part of its
        canonicalization, the double decoding of a JavaScript URL would
        not match the canonicalization of the input parameters.

        Tests: http/tests/security/xssAuditor/iframe-javascript-url-url-encoded.html
               http/tests/security/xssAuditor/javascript-link-url-encoded.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Moved call to 
        XSSAuditor::canEvaluateJavaScriptURL into FrameLoader::executeIfJavaScriptURL.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::executeIfJavaScriptURL): Modified to call 
        XSSAuditor::canEvaluateJavaScriptURL on the JavaScript URL before it is
        decoded.

2009-09-22  Dave Hyatt  <hyatt@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=29657
        Columns don't break properly in positioned elements with a fixed height.  Make sure that
        a block is still considered to have columns even when the column count is 1 if the column
        width is non-auto.
    
        Added fast/multicol/positioned-with-constrained-height.html

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

2009-09-23  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Simon Hausmann.

        Add a null check for the Document*. In the mirror benchmarking
        application a crash from a call from JavaScript was observed.

        I was not able to come up with a test case for this issue.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookieJar):

2009-09-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix the Qt/Windows build, after the introduction of
        the page client.

        * plugins/win/PluginViewWin.cpp:
        (windowHandleForPageClient):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::platformStart):

2009-09-23  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] media tests failing after their rework
        https://bugs.webkit.org/show_bug.cgi?id=29532

        Correctly advertise the mime types used by the common formats used
        in the tests.

        Tests that regressed, and will pass again:

           media/video-canvas-source.html
           media/video-controls.html
           media/video-currentTime-set2.html
           media/video-dom-autoplay.html
           media/video-dom-src.html
           media/video-error-abort.html
           media/video-load-networkState.html
           media/video-load-readyState.html
           media/video-muted.html
           media/video-no-autoplay.html
           media/video-pause-empty-events.html
           media/video-play-empty-events.html
           media/video-seekable.html
           media/video-seeking.html
           media/video-size.html
           media/video-source-type-params.html
           media/video-source-type.html
           media/video-source.html
           media/video-src-change.html
           media/video-src-invalid-remove.html
           media/video-src-remove.html
           media/video-src-set.html
           media/video-src-source.html
           media/video-src.html
           media/video-timeupdate-during-playback.html
           media/video-volume.html

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

2009-09-22  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by Eric Seidel.

        Fix the crash problem with absolte positioned children in foreignobject
        htts://bugs.webkit.org/show_bug.cgi?id=26342

        Test: svg/custom/foreignobject-crash-with-absolute-positioned-children.svg

        * rendering/RenderForeignObject.h:
        (WebCore::RenderForeignObject::isSVGForeignObject):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGForeignObject):

2009-09-22  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        SharedWorkers "name" attribute is now optional.
        https://bugs.webkit.org/show_bug.cgi?id=28897

        Test: fast/workers/shared-worker-name.html

        * bindings/js/JSSharedWorkerConstructor.cpp:
        (WebCore::constructSharedWorker):
        Default 'name' attribute to empty string if it is not provided.
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Default 'name' attribute to empty string if it is not provided.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::matches):
        Now matches URLs if names are empty strings.
        (WebCore::DefaultSharedWorkerRepository::getProxy):
        Pass URL in to SharedWorkerProxy::matches().

2009-09-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, another build fix.

        [Chromium] Add another missing include.
        https://bugs.webkit.org/show_bug.cgi?id=29536

        * inspector/InspectorController.cpp: Added DOMWindow.h include.

2009-09-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Add missing include.
        https://bugs.webkit.org/show_bug.cgi?id=29536

        * inspector/InspectorDOMStorageResource.cpp: Added DOMWindow.h include.

2009-09-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Tighten up the ScheduledRedirection machinery to prepare for a bug fix
        https://bugs.webkit.org/show_bug.cgi?id=29663

        * loader/FrameLoader.cpp:
        (WebCore::ScheduledRedirection::ScheduledRedirection): Added a boolean,
        initialized to false, to keep track if the redirection has been
        communicated to the client.
        (WebCore::FrameLoader::stopLoading): Tweaked a comment.
        (WebCore::FrameLoader::cancelRedirection): Removed code to clear
        m_scheduledRedirection.clear since stopRedirectionTimer does that now.
        (WebCore::FrameLoader::allChildrenAreComplete): Added.
        (WebCore::FrameLoader::checkCompleted): Use allChildrenAreComplete
        function for clarity.
        (WebCore::FrameLoader::checkCallImplicitClose): Ditto.
        (WebCore::FrameLoader::scheduleRedirection): Changed to take a PassOwnPtr.
        (WebCore::FrameLoader::startRedirectionTimer): Added code to set the
        toldClient flag and not call clientRedirected a second time if it is set.
        (WebCore::FrameLoader::stopRedirectionTimer): Changed so this can be safely
        called multiple times and it will call clientRedirectCancelledOrFinished
        only once.

        * loader/FrameLoader.h: Changed scheduleRedirection to be a PassOwnPtr.
        Added allChildrenAreComplete function.

2009-09-22  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Migrate Databases tab to InjectedScript /
        serialized interaction.

        DOMStorage interaction is now serialized into JSON messages
        and doesn't require quarantined objects.
        
        https://bugs.webkit.org/show_bug.cgi?id=28873

        * dom/EventListener.h:
        (WebCore::EventListener::):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::selectDOMStorage):
        (WebCore::InspectorBackend::getDOMStorageEntries):
        (WebCore::InspectorBackend::setDOMStorageItem):
        (WebCore::InspectorBackend::removeDOMStorageItem):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::selectDOMStorage):
        (WebCore::InspectorController::getDOMStorageEntries):
        (WebCore::InspectorController::setDOMStorageItem):
        (WebCore::InspectorController::removeDOMStorageItem):
        (WebCore::InspectorController::getDOMStorageResourceForId):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::InspectorDOMStorageResource):
        (WebCore::InspectorDOMStorageResource::bind):
        (WebCore::InspectorDOMStorageResource::unbind):
        (WebCore::InspectorDOMStorageResource::startReportingChangesToFrontend):
        (WebCore::InspectorDOMStorageResource::handleEvent):
        (WebCore::InspectorDOMStorageResource::operator==):
        * inspector/InspectorDOMStorageResource.h:
        (WebCore::InspectorDOMStorageResource::cast):
        (WebCore::InspectorDOMStorageResource::id):
        (WebCore::InspectorDOMStorageResource::domStorage):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::selectDOMStorage):
        (WebCore::InspectorFrontend::didGetDOMStorageEntries):
        (WebCore::InspectorFrontend::didSetDOMStorageItem):
        (WebCore::InspectorFrontend::didRemoveDOMStorageItem):
        (WebCore::InspectorFrontend::updateDOMStorage):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage):
        (WebInspector.DOMStorage.prototype.get id):
        (WebInspector.DOMStorage.prototype.get domStorage):
        (WebInspector.DOMStorage.prototype.get isLocalStorage):
        (WebInspector.DOMStorage.prototype.getEntriesAsync):
        (WebInspector.DOMStorage.prototype.setItemAsync):
        (WebInspector.DOMStorage.prototype.removeItemAsync):
        * inspector/front-end/DOMStorageDataGrid.js:
        (WebInspector.DOMStorageDataGrid):
        (WebInspector.DOMStorageDataGrid.prototype._startEditingColumnOfDataGridNode):
        (WebInspector.DOMStorageDataGrid.prototype._startEditing):
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted):
        (WebInspector.DOMStorageDataGrid.prototype._editingCancelled):
        (WebInspector.DOMStorageDataGrid.prototype.deleteSelectedRow):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype.update):
        (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
        (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageEntries):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.show):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.selectDOMStorage):
        (WebInspector.StoragePanel.prototype.updateDOMStorage):
        (WebInspector.StoragePanel.prototype._domStorageForId):
        * inspector/front-end/inspector.js:
        (WebInspector.addDOMStorage):
        (WebInspector.updateDOMStorage):

2009-09-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Fix for XMLHttpRequest.abort() should destroy the response text.
        https://bugs.webkit.org/show_bug.cgi?id=29658
        <rdar://problem/5301430>

        Clearing the response text after calling XMLHttpRequest.abort() is necessary
        per spec and matches Firefox. It is also a potential memory win.

        Test: http/tests/xmlhttprequest/abort-should-destroy-responseText.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::abort): Clear the response text making sure to
        keep the actual ResourceReponse around so that the response status and response
        status text are kept around.

2009-09-22  Dimitri Glazkov  <dglazkov@chromium.org>

        No review, rolling out r48639.
        http://trac.webkit.org/changeset/48639

        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectGrouperVisitor::visitDOMWrapper):

2009-09-22  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Changing the transaction coordinator to (re-)allow multiple read
        transactions on the same database to run concurrently (without
        risking a deadlock this time).

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

        Tests: storage/read-and-write-transactions-dont-run-together.html
               storage/read-transactions-running-concurrently.html

        * storage/SQLTransaction.h:
        (WebCore::SQLTransaction::isReadOnly): Returns the type of the
        transaction.
        * storage/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::acquireLock): Changed to
        allow multiple read transactions on the same DB to run
        concurrently.
        (WebCore::SQLTransactionCoordinator::releaseLock): Changed to
        allow multiple read transactions on the same DB to run
        concurrently.
        (WebCore::SQLTransactionCoordinator::shutdown): Renamed the map.
        * storage/SQLTransactionCoordinator.h:

2009-09-22  Peter Kasting  <pkasting@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=29652
        Support true system colors for CSS system colors in Chromium/Win.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::cssValueIdToSysColorIndex):
        (WebCore::RenderThemeChromiumWin::systemColor):
        * rendering/RenderThemeChromiumWin.h:

2009-09-22  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/6925121> SAP: Wrong width calculation in 
        table with fixed layout
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=29501

        New Tests:
        * fast/table/fixed-table-with-percent-inside-percent-table.html: Added.
        * fast/table/fixed-table-with-percent-width-inside-auto-table.html: Added.
        * fast/table/fixed-table-with-percent-width-inside-div.html: Added.
        * fast/table/fixed-table-with-percent-width-inside-extra-large-div.html: Added.
        * fast/table/fixed-table-with-percent-width-inside-fixed-width-table.html: Added.
        * fast/table/fixed-table-with-small-percent-width.html: Added.

        This new quirk is very similar to an existing one that was 
        implemented in revision 4316.
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcPrefWidths):

2009-09-22  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        List HTTP status code with response headers in resources tab of Web Inspector.
        http://webkit.org/b/19945

        This patch adds a new top level list in the resources tab, HTTP Information, that 
        for now, contains the Request Method (GET, POST, etc.) and the Status Code (200, 404, etc.).
        Additionally, it adds a colored dot next to the requested URL to show the status 
        (green for success, orange for redirect, red for error).

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView):
        * inspector/front-end/Images/errorRedDot.png: Added.
        * inspector/front-end/Images/successGreenDot.png: Added.
        * inspector/front-end/Images/warningOrangeDot.png: Added.
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.StatusTextForCode):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._refreshURL):
        (WebInspector.ResourceView.prototype._refreshHTTPInformation):
        * inspector/front-end/inspector.css:

2009-09-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Back list isn't properly updated for fragment changes after a redirect.
        <rdar://problem/6142803> and https://bugs.webkit.org/show_bug.cgi?id=20355

        Test: fast/loader/fragment-after-redirect-gets-back-entry.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL): Properly reset the policy FrameLoadType before
          consulting the policy delegate for fragment scrolling.

2009-09-22  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Drop down selects get stuck in the non-visible state and cannot be opened.
        https://bugs.webkit.org/show_bug.cgi?id=29645

        All paths that lead to hiding the popup menu must call popupDidHide on
        the PopupMenuClient.  This change makes it so by moving all of the
        hiding logic to PopupListBox::hidePopup.

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

2009-09-22  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        WebInspector.log() function not protected if console not yet created
        https://bugs.webkit.org/show_bug.cgi?id=29336
        
        No new tests.  Only affects Web Inspector developers adding logging
        to their code during development.

        * inspector/front-end/inspector.js:
        (WebInspector.log.isLogAvailable):
        (WebInspector.log.flushQueue):
        (WebInspector.log.flushQueueIfAvailable):
        (WebInspector.log.logMessage):
        (WebInspector.log):

2009-09-22  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by David Levin.

        Ported chromium.org's webcore.gyp for the webkit chromium port.

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

        * WebCore.gyp/WebCore.gyp: Added.

2009-09-22  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by Adam Barth.

        [v8] Don't keep clean wrappers artificially alive        
        We currently keep all DOM node wrappers alive, even when there are
        no more references to them from JS, in case they have properties
        that we need to keep around if new JS references are created.
        This changes the policy to only keep wrappers artificially alive
        if they have changed since they were created. Empty wrappers are
        discarded and recreated as needed.
        https://bugs.webkit.org/show_bug.cgi?id=29330

        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectGrouperVisitor::visitDOMWrapper):

2009-09-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: console.count and console.timeEnd
        crash when inspector is opened.

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

        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addMessageToConsole):

2009-09-22  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix bogus build fix I did last night.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):

2009-09-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        NPAPI/Mac: Don't paint plugins if we don't have a CGContextRef

        * plugins/mac/PluginViewMac.cpp:

2009-09-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reivewed by Simon Hausmann.

        Fix the Qt/Mac build after r48604 (Implement new QWebPageClient class)

        There's no QWidget::x11Info() on Mac, and setPlatformPluginWidget()
        takes a QWidget*, not a QWebPageClient*

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):

2009-09-21  Adam Barth  <abarth@webkit.org>

        Attempted fix for the V8 build.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):

2009-09-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Don't re-enter JavaScript after performing access checks
        https://bugs.webkit.org/show_bug.cgi?id=29531

        Moved the access check slightly later in this functions to avoid
        re-entering the JavaScript interpreter (typically via toString)
        after performing the access check.

        I can't really think of a meaningful test for this change.  It's more
        security hygiene.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHref):
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::assign):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        (WebCore::if):
        (CALLBACK_FUNC_DECL):
        (V8Custom::WindowSetLocation):
        (V8Custom::ClearTimeoutImpl):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-09-21  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Make all write transaction start with a BEGIN IMMEDIATE command
        instead of BEGIN.

        We cannot test this change in a layout test, because in order to
        test it we need to spawn two database threads and execute
        transaction steps on these two threads in a very specific order,
        which seems impossible to do when they share the same main thread
        (as they would in a layout test). The SQLite docs and the case
        described in the bug though should be enough proof that we do have
        a problem here and that this patch will fix it.

        Relevant SQLite documentation:
        http://www.sqlite.org/lang_transaction.html
        http://www.sqlite.org/lockingv3.html#locking

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

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::SQLiteTransaction): Added a readOnly
        parameter.
        (WebCore::SQLiteTransaction::begin): Changed to BEGIN IMMEDIATE
        for write transactions.
        * platform/sql/SQLiteTransaction.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight): Passing
        the read-only flag to the SQLiteTransaction instance.

2009-09-21  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Mark Rowe.

        * DerivedSources.make: Fix the Xcode build on SnowLeopard.

2009-09-15  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Fisher.

        Prevent sleeps in unload handlers.
        https://bugs.webkit.org/show_bug.cgi?id=29193

        Test: fast/dom/Window/slow_unload_handler.html

        * WebCore.gypi:
        * bindings/v8/DateExtension.cpp: Added.
        (WebCore::DateExtension::DateExtension):
        (WebCore::DateExtension::get):
        (WebCore::DateExtension::setAllowSleep):
        (WebCore::DateExtension::GetNativeFunction):
        (WebCore::DateExtension::weakCallback):
        (WebCore::DateExtension::GiveEnableSleepDetectionFunction):
        (WebCore::DateExtension::OnSleepDetected):
        * bindings/v8/DateExtension.h: Added.
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createNewContext):
        (WebCore::V8Proxy::registerExtensionWithV8):
        (WebCore::V8Proxy::registeredExtensionWithV8):
        * bindings/v8/V8Proxy.h:

2009-09-21  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Run-time exception in onmessage handler is not forwarded to the
        worker object.
        https://bugs.webkit.org/show_bug.cgi?id=28980

        The previous fix was partially reverted due to a reliability build break
        in chromium. The break happens when an exception is thrown without
        setting a message. We need to check for this scenario and handle it.

        Tested by worker-close.html.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::reportException):

2009-09-21  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Simon Fraser & Sam Weinig.

        Add ENABLE(ORIENTATION_EVENTS)
        https://bugs.webkit.org/show_bug.cgi?id=29508
        
        See documentation here:
        http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW16

        * DerivedSources.make: Use new WebCore.OrientationEvents.exp file if ENABLE_ORIENTATION_EVENTS.
        Add ENABLE_ORIENTATION_EVENTS to the new ADDITIONAL_IDL_DEFINES variable that is passed to the IDL
        code generator. This is because ENABLE_ORIENTATION_EVENTS is not in FEATURE_DEFINES.
        * WebCore.OrientationEvents.exp: Added.
        * WebCore.xcodeproj/project.pbxproj: Add WebCore.OrientationEvents.exp.
        * dom/EventNames.h: Add onorientationchange.
        * html/HTMLAttributeNames.in: Ditto.
        * html/HTMLBodyElement.cpp: Handle onorientationchange properly.
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        (WebCore::HTMLBodyElement::onorientationchange):
        (WebCore::HTMLBodyElement::setOnorientationchange):
        * html/HTMLBodyElement.h: Ditto.
        * html/HTMLBodyElement.idl: Ditto.
        * html/HTMLFrameSetElement.cpp: Ditto.
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLFrameSetElement::onorientationchange):
        (WebCore::HTMLFrameSetElement::setOnorientationchange):
        * html/HTMLFrameSetElement.h: Ditto.
        * html/HTMLFrameSetElement.idl: Ditto.
        * page/DOMWindow.cpp: Ditto.
        (WebCore::DOMWindow::orientation): Calls up the to the Frame for the orientation value.
        (WebCore::DOMWindow::onorientationchange):
        (WebCore::DOMWindow::setOnorientationchange):
        * page/DOMWindow.h: Handle onorientationchange properly.
        * page/DOMWindow.idl: Ditto.
        * page/Frame.cpp: Ditto.
        (WebCore::Frame::Frame):
        (WebCore::Frame::sendOrientationChangeEvent):
        * page/Frame.h: Ditto.
        (WebCore::Frame::orientation):

2009-09-18  Anders Carlsson  <andersca@apple.com>

        Try fixing the build again.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::wndProc):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: completions are always evaluated against
        window (discarding call frames).

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getCompletions):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.selectedCallFrameId):

2009-09-21  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix for Windows (Cairo) target.

        Add stubs for SocketStream classes added in @r47788, which
        broke the WinCairo build.

        No new tests. (Build failure).

        * WebCore.vcproj/WebCore.vcproj:  Add references to new files
          to Cairo build, exclude from standard Apple build.
        * platform/network/curl/SocketStreamError.h: Added.
        * platform/network/curl/SocketStreamHandle.h: Added.
        * platform/network/curl/SocketStreamHandleCurl.cpp: Added.

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Expose InspectorResource fields.

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

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::sourceString):
        (WebCore::InspectorResource::resourceData):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::requestHeaderFields):
        (WebCore::InspectorResource::responseHeaderFields):
        (WebCore::InspectorResource::responseStatusCode):
        (WebCore::InspectorResource::requestMethod):
        (WebCore::InspectorResource::requestFormData):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: JS error drilling down childless node.
        No need to dispatch double click twice - it is already handled
        in TreeElement.treeElementDoubleClicked.

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

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

2009-09-21  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Implement new QWebPageClient class and let our classes
        QWebViewPrivate and QWebGraphicsItemPrivate inherit from it.

        For Qt, platformPageClient() will now return a class derived from
        the QWebPageClient, so the patch adapts our Qt hooks to go though
        this class and not depend on the QWebView.

        * WebCore.pro:
        * platform/Widget.h:
        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/qt/QWebPageClient.h: Added.
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::platformStart):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Evaluating on call frame always returns "undefined".

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

        * inspector/front-end/InjectedScript.js:
        (InjectedScript.evaluate):
        (InjectedScript._evaluateAndWrap):
        (InjectedScript._evaluateOn):
        (InjectedScript.evaluateInCallFrame):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Exception formatting is broken in console.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleCommandResult):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.evaluate):
        (InjectedScript.createProxyObject):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Console object formatting is broken.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._format):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy.wrapPrimitiveValue):

2009-09-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Crash When Logging an Element Before Opening Inspector

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):

2009-09-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Incorrect clipping with accelerated compositing content, and position:fixed
        https://bugs.webkit.org/show_bug.cgi?id=29347
        
        Fix the compositing clipping logic to behave correctly when position:fixed
        elements clip, by using the new backgroundClipRect() method to determine
        when we need to clip, and to compute the clipping layer position.

        Test: compositing/overflow/fixed-position-ancestor-clip.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):

2009-09-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Add back in a special case for window.top in the V8 bindings.

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

        Fixes LayoutTests/fast/dom/Window/window-property-shadowing.html in the Chromium port.

        * bindings/scripts/CodeGeneratorV8.pm: Ensure window.top is not marked as read only, as this breaks the shadowing disabling.

2009-09-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Brady Eidson.

        HTMLMediaElement: media file should not reload when page comes out of page cache
        https://bugs.webkit.org/show_bug.cgi?id=29604

        Test: media/restore-from-page-cache.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::userCancelledLoad): Do nothing unless the element
        is still loading. Only fire an 'emptied' event if the readyState is HAVE_NOTHING,
        otherwise set the network state to NETWORK_IDLE.

2009-09-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey "Sean/Shawn/Shaun" Garen.

        Clarify two FIXMEs.

        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):

2009-09-21  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        Drop down selects fail to close when a value is selected
        https://bugs.webkit.org/show_bug.cgi?id=29582

        Implement PopupListBox::hidePopup, which was previously
        declared but unimplemented.  Removes the declaration of
        showPopup since that method is not implemented.

        PopupListBox::hidePopup takes care of hiding the popup,
        by invoking hidePopup on its parent PopupContainer, and
        then informs the PopupMenuClient that popupDidHide.
        This mimics the old behavior prior to r48370.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::handleKeyEvent):
        (WebCore::PopupListBox::abandon):
        (WebCore::PopupListBox::acceptIndex):
        (WebCore::PopupListBox::hidePopup):

2009-09-21  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Rubber-stamped by Simon Hausmann.

        [Qt] Windows build fix.
        https://bugs.webkit.org/show_bug.cgi?id=29535

        * platform/network/qt/DnsPrefetchHelper.cpp: Missing #include "config.h"  added.

2009-09-21  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed make dist build fix. Missing files.

        * GNUmakefile.am:

2009-09-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        Crash when clicking link in unload handler
        https://bugs.webkit.org/show_bug.cgi?id=29525

        Test that the first navigation always wins when the page tries to start
        a new navigation in an unload handler.

        Tests: fast/loader/unload-form-about-blank.html
               fast/loader/unload-form-post-about-blank.html
               fast/loader/unload-form-post.html
               fast/loader/unload-form.html
               fast/loader/unload-hyperlink.html
               fast/loader/unload-javascript-url.html
               fast/loader/unload-reload.html
               fast/loader/unload-window-location.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):

2009-09-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Sometimes crashes when a page is destroyed/loads another URL while playing video
        https://bugs.webkit.org/show_bug.cgi?id=29496

        Protect the video sink object, and destroy it in an idle callback
        to hopefully avoid a race condition that leads to a crash.

        This is already tested by media/video-seekable.html

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::idleUnref):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::createGSTPlayBin):

2009-09-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix for GTKand a blind one for Qt after r48566.

        * GNUmakefile.am:
        * WebCore.pro:

2009-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29519
        Remove JSNameNodeCollection and just use StaticNodeList

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSNamedNodesCollection.cpp: Removed.
        * bindings/js/JSNamedNodesCollection.h: Removed.

2009-09-19  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=29511
        
        Fixes an issue where script code that contains non-ASCII characters may bypass the 
        XSSAuditor.
        
        Before performing a comparison between the script source code and input parameters, we
        remove all non-ASCII characters, including non-printable ASCII characters from the
        script source code and input parameters.

        Tests: http/tests/security/xssAuditor/img-onerror-non-ASCII-char.html
               http/tests/security/xssAuditor/img-onerror-non-ASCII-char-default-encoding.html
               http/tests/security/xssAuditor/img-onerror-non-ASCII-char2-default-encoding.html
               http/tests/security/xssAuditor/img-onerror-non-ASCII-char2.html

        * page/XSSAuditor.cpp:
        (WebCore::isNonCanonicalCharacter): Modified to remove all non-ASCII characters,
        including non-printable ASCII characters.

2009-09-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Incorrect animation with scale(0) transform (singular matrix)
        https://bugs.webkit.org/show_bug.cgi?id=29465
        
        Make accelerated scale() and translate() animations go through the component animation
        path (rather than just matrix animation) to avoid problems with singular scale matrices,
        and be slightly more efficient.

        Test: compositing/transitions/singular-scale-transition.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::getTransformFunctionValue):
        (WebCore::getValueFunctionNameForTransformOperation):

2009-09-19  Alex Milowski  <alex@milowski.com>

        Reviewed by Maciej Stachowiak.

        Adds CSS styling and basic DOM element support for MathML

        * DerivedSources.make:
          Added user stylesheet and tag factory generation

        * WebCore.xcodeproj/project.pbxproj:
          Added new DOM element code

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAttr):
          Added check for document since stylesheet can be added before there is a document

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
          Added check to add MathML user agent stylesheet

        * css/mathml.css: Added.
          MathML user agent stylesheet

        * dom/Document.cpp:
        (WebCore::Document::createElement):
          Added support for creation of MathML DOM objects

        * dom/Node.h:
        (WebCore::Node::isMathMLElement):
          Added check method for whether the node is a MathML node

        * mathml: Added.
        * mathml/MathMLElement.cpp: Added.
        (WebCore::MathMLElement::MathMLElement):
        (WebCore::MathMLElement::create):
        (WebCore::MathMLElement::createRenderer):
        * mathml/MathMLElement.h: Added.
        (WebCore::MathMLElement::isMathMLElement):
          MathML DOM base class


        * mathml/MathMLInlineContainerElement.cpp: Added.
        (WebCore::MathMLInlineContainerElement::MathMLInlineContainerElement):
        (WebCore::MathMLInlineContainerElement::create):
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/MathMLInlineContainerElement.h: Added.
          Base class for non-text containers

        * mathml/MathMLMathElement.cpp: Added.
        (WebCore::MathMLMathElement::MathMLMathElement):
        (WebCore::MathMLMathElement::create):
        * mathml/MathMLMathElement.h: Added.
          Root Math element

        * mathml/mathtags.in: Added.
          Element list mappings

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
          Added MathML name initialization
2009-09-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Oliver Hunt.

        Canvas drawn with data URL image raises SECURITY_ERR when toDataUrl() called.
        https://bugs.webkit.org/show_bug.cgi?id=29305

        We need to special-case data URLs when tainting a canvas because we
        treat data URLs has having no security origin, unlike other
        browsers.  The reason we do this is to help sites avoid XSS via data
        URLs, but that consideration doesn't apply to canvas taint.

        Also, we were previously incorrectly taking document.domain state
        into account when tainting canvas.

        Tests: http/tests/security/canvas-remote-read-data-url-image.html
               http/tests/security/canvas-remote-read-data-url-svg-image.html
               http/tests/security/canvas-remote-read-remote-image-document-domain.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::checkOrigin):
        (WebCore::CanvasRenderingContext2D::createPattern):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::taintsCanvas):
        * page/SecurityOrigin.h:

2009-09-18  Simon Fraser  <simon.fraser@apple.com>

        Fix stylistic issue raised in code review for previous commit.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::hasNonZeroTransformOrigin):

2009-09-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Element is misplaced during opacity transition with certain configuration of transform-origin and clipping
        https://bugs.webkit.org/show_bug.cgi?id=29495
        
        If an element has zero size, but has a transform origin with absolute values,
        then the transform origin would not be applied because it is implemented via
        anchorPoint, which is expressed as a fraction of the layer size.
        
        Work around this by artificially inflating the size of the backing store when we need to.

        Test: compositing/geometry/transfrom-origin-on-zero-size-layer.html

        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        Init m_artificiallyInflatedBounds to false.
        
        (WebCore::hasNonZeroTransformOrigin):
        Utility function that describes whether the transform-origin contains non-percentage
        x or y offsets.
        
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        New wrapper method around setCompositedBounds() that applies the size inflation
        when necessary, setting the m_artificiallyInflatedBounds as appropriate.
        
        (WebCore::RenderLayerBacking::updateAfterLayout): Call updateCompositedBounds().
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Ditto
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Ditto
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry): Ditto

2009-09-18  Antti Koivisto  <antti@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=29512
        Don't recalculate style when restoring from the page cache

        FrameLoaderClient::forceLayout() also forces style recalc. Instead call FrameView::forceLayout() 
        directly to update the scrollbars while keeping the existing style.
        
        Makes back/forward really fast on complex pages (in cases where page cache works).

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

2009-09-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Implement ES5 Object.defineProperty function
        https://bugs.webkit.org/show_bug.cgi?id=29503

        Override defineOwnProperty on JSDOMWindowShell to forward appropriately,
        and then override defineOwnProperty on JSDOMWindow to disallow cross origin
        defineOwnProperty usage.  We also override defineOwnProperty on QuarantinedObjectWrapper
        to ensure correct wrapping semantics of quarantined objects.

        One major caveat in this patch is that it currently disallows the use
        of Object.defineProperty on DOMObjects other than the window due to
        the significant work involved in correctly propagating attributes and
        ensuring correct semantics on dom objects.

        Tests: fast/js/Object-defineProperty.html
               http/tests/security/xss-DENIED-defineProperty.html

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::DOMObject::defineOwnProperty):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::defineGetter):
        (WebCore::JSDOMWindow::defineSetter):
        (WebCore::JSDOMWindow::defineOwnProperty):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::defineOwnProperty):
        (WebCore::JSDOMWindowShell::defineGetter):
        (WebCore::JSDOMWindowShell::defineSetter):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::defineGetter):
        (WebCore::JSLocationPrototype::defineGetter):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertyDescriptor):
        (WebCore::JSQuarantinedObjectWrapper::defineOwnProperty):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/scripts/CodeGeneratorJS.pm:

2009-09-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=29510
        Active DOM objects should be suspended while a modal dialog is displayed

        * manual-tests/js-timers-beneath-modal-dialog.html: Added a test for JS timers.

        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        Match other platforms, and make Mac also suspend active DOM objects. Since a page that
        currently displays a modal dialog cannot go into page cache, there is no danger of suspending
        an object twice.        

2009-09-18  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        [Qt] Buildfix caused by http://trac.webkit.org/changeset/48513
        https://bugs.webkit.org/show_bug.cgi?id=29351

        * bridge/qt/qt_instance.h: createRuntimeObject method renamed to newRuntimeObject.
        * bridge/runtime.h: Visibility of newRuntimeObject method modified to protected.

2009-09-18  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Fix parameter substitutions in console.log().

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._format):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getPrototypes):
        (InjectedScript.CallFrameProxy.prototype._wrapScopeChain):
        * inspector/front-end/utilities.js:
        ():

2009-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen and Brady Eidson.

        Temporarily remove an assertion that was getting hit when going
        back to a page in the page cache while a banner in Safari was visible.
        We should re-enable this once that is fixed. See <rdar://problem/7218118>

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

2009-09-18  Anders Carlsson  <andersca@apple.com>

        Try fixing the build again.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::wndProc):

2009-09-18  Anders Carlsson  <andersca@apple.com>

        Fix windows build.
        
        * platform/win/PopupMenuWin.cpp:

2009-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin 'BearClaw' Barraclough.

        Convert another callback type object to store the global object
        instead of the frame.

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        (WebCore::JSCustomXPathNSResolver::JSCustomXPathNSResolver):
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSCustomXPathNSResolver.h:

2009-09-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=29332
        <rdar://problem/7231652> 
        REGRESSION (r48446): While a <select> popup menu is open, the
        rest of the WebView doesn't respond to mouse move events.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::translatePoint):
        New helper function that translates a point between HWND coordinates.
        
        (WebCore::PopupMenu::show):
        Protect the PopupMenu if someone removes the <select> in response to a mouse
        event. Handle WM_HOST_WINDOW_MOUSEMOVE events.
        
        (WebCore::PopupMenu::wndProc):
        in the WM_MOUSEMOVE handler, if the mouse is not over the popup, post a 
        WM_HOST_WINDOW_MOUSEMOVE event so that the host window (the WebView) gets the
        mouse move event.

2009-09-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Compositing layers are incorrectly positioned after scrolling with position:fixed
        https://bugs.webkit.org/show_bug.cgi?id=29262
        
        When scrolling a page with compositing layers inside a position:fixed element,
        we need to update the compositing layer positions when the scroll position changes.

        Test: compositing/geometry/fixed-position.html

        * WebCore.base.exp:
        Export FrameView::scrollPositionChanged()
        
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        New method that sends the scroll event, and updates compositing layers positions if necessary.

2009-09-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Transformed elements inside position:fixed container are clipped incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=29346
        
        Fix clipping and hit testing on transformed elements inside a position:fixed element.
        Previously, the code used the overflowClipRect of the parent clip rects, but
        this is not correct for fixed postion elements. Instead, share code that is
        already present in calculateRects() to get the correct rect.

        Test: fast/overflow/position-fixed-transform-clipping.html

        * rendering/RenderLayer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        Call the new backgroundClipRect() to get the correct clipRect.
        
        (WebCore::RenderLayer::backgroundClipRect):
        New method, factored out of calculateRects(), that computes the clip rect,
        doing the right thing for fixed position elements.
        
        (WebCore::RenderLayer::calculateRects):
        Call the new backgroundClipRect() method.
        
2009-09-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Fix <rdar://problem/7050773> REGRESSION (r40098) Crash at
        WebCore::RenderBlock::layoutBlock()
        https://bugs.webkit.org/show_bug.cgi?id=29498

        Test: accessibility/nested-layout-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::updateBackingStore): Changed to
            call Document::updateLayoutIgnorePendingStylesheets() instead of
            calling RenderObject::layoutIfNeeded(). The latter requires that
            there be no pending style recalc, which allows methods that call
            Document::updateLayout() to be called during layout without risking
            re-entry into layout.
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityActionNames]): Null-check
            m_object after calling updateBackingStore(), since style recalc may
            destroy the renderer, which destroys the accessibility object and
            detaches it from the wrapper.
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityFocusedUIElement]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityHitTest:]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityIsIgnored]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
             Ditto.
        (-[AccessibilityObjectWrapper accessibilityPerformPressAction]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityPerformIncrementAction]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityPerformDecrementAction]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityPerformAction:]): Ditto.
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityIndexOfChild:]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
            Ditto.
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):
            Ditto.

2009-09-18  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Simon Hausmann.

        Update Qt build system for Web Socket.
        https://bugs.webkit.org/show_bug.cgi?id=29270

        * WebCore.pro:
        * platform/network/qt/SocketStreamError.h: Added.
        * platform/network/qt/SocketStreamHandle.h: Added.
        * platform/network/qt/SocketStreamHandleSoup.cpp: Added.

2009-09-18  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        NULL check HTMLMediaElement::m_playedTimeRanges.
        Fix for https://bugs.webkit.org/show_bug.cgi?id=29494

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addPlayedRange): New. Create m_playedTimeRanges if
        necessary, add range specified.
        (WebCore::HTMLMediaElement::seek): Use addPlayedRange. 
        (WebCore::HTMLMediaElement::played): Use addPlayedRange. Change time comparison 
        to be more readable.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        * html/HTMLMediaElement.h:

2009-09-18  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Follow up fix for https://bugs.webkit.org/show_bug.cgi?id=29276
        REGRESSION(r48334): WebKit crashes on file select by drag

        Don't use Document.elementFromPoint since it returns null if the point
        is outside the viewport.  Instead, just hit test ourselves.

        Test: fast/events/drag-file-crash.html

        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):

2009-09-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Each wrapped Objective-C object should use a single RuntimeObjectImp
        https://bugs.webkit.org/show_bug.cgi?id=29351
        rdar://problem/7142294

        * WebCore.base.exp: Added a newly-needed exported symbol.

        * bindings/objc/DOMInternal.h: Eliminated unused
        createWrapperCacheWithIntegerKeys; it has not been needed since the
        RGBColor wrappers were reworked.
        * bindings/objc/DOMInternal.mm: Ditto.

        * bridge/objc/objc_instance.h: Made the create function non-inline.
        * bridge/objc/objc_instance.mm:
        (createInstanceWrapperCache): Added. Creates an appropriate map table.
        (ObjcInstance::create): Moved here from header. Uses NSMapGet and
        NSMapInsert to cache the instance in a map table.
        (ObjcInstance::~ObjcInstance): Added a call to NSMapRemove to remove
        the instance from the map table.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::~QtInstance): Remove unneeded code to remove
        the instance from cachedObjects, which no longer exists.
        (JSC::Bindings::QtInstance::newRuntimeObject): Renamed to overload new
        bottleneck. Caching is now handled by the base class.

        * bridge/runtime.cpp:
        (JSC::Bindings::Instance::Instance): Initialize m_runtimeObject to 0.
        (JSC::Bindings::Instance::~Instance): Assert m_runtimeObject is 0.
        (JSC::Bindings::Instance::createRuntimeObject): Use m_runtimeObject
        if it's already set. Set m_runtimeObject and call addRuntimeObject
        if it's not.
        (JSC::Bindings::Instance::newRuntimeObject): Added. Virtual function,
        used only by createRuntimeObject.
        (JSC::Bindings::Instance::willDestroyRuntimeObject): Added.
        Calls removeRuntimeObject and then clears m_runtimeObject.
        (JSC::Bindings::Instance::willInvalidateRuntimeObject): Added.
        Clears m_runtimeObject.

        * bridge/runtime.h: Made createRuntimeObject non-virtual. Added
        willDestroyRuntimeObject, willInvalidateRuntimeObject,
        newRuntimeObject, and m_runtimeObject.

        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp): Removed addRuntimeObject
        call, now handled by caller.
        (JSC::RuntimeObjectImp::~RuntimeObjectImp): Replaced removeRuntimeObject
        call with willDestroyRuntimeObject call; the latter nows calls
        removeRuntimeObject.
        (JSC::RuntimeObjectImp::invalidate): Added willInvalidateRuntimeObject
        call.

        * bridge/runtime_object.h: Made invalidate non-virtual.

2009-09-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Make PlatformWindow return something else than PlatformWidget
        https://bugs.webkit.org/show_bug.cgi?id=29085

        Make platformWindow return a PlatformPageClient
        (for now typedef'ed to PlatformWidget)

        Also, change the name of platformWindow to platformPageClient()

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getPangoLayoutForAtk):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::platformPageClient):
        * page/Chrome.cpp:
        (WebCore::Chrome::platformPageClient):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::wheelEvent):
        (WebCore::EventHandler::currentPlatformMouseEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::eventMayStartDrag):
        * platform/HostWindow.h:
        * platform/Widget.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::show):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformRemoveChild):
        (WebCore::ScrollView::visibleContentRect):
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setCursor):
        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::show):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::monitorInfoForWidget):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupMenu::wndProc):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::nativeWindowForRenderObject):
        * platform/wx/ScrollbarThemeWx.cpp:
        (WebCore::ScrollbarThemeWx::paint):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::platformStart):
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::platformStart):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::platformStart):

2009-09-18  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Web inspector UI adjustments specific to the Qt platform:
        - Hide the close button
        - Hide the dock button
        - Disable the draggable toolbar

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

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

2009-09-18  Joerg Bornemann  <joerg.bornemann@nokia.com>

        Reviewed by Simon Hausmann.

        QtWebKit Windows CE compile fixes

        Exclude certain pure-WINCE specific code paths from the Qt build.

        * platform/graphics/BitmapImage.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop): Guard this code block with NETSCAPE_PLUGIN_API as
        the corresponding PluginViewWndProc has the same guard in the header file.

2009-09-18  Steve Block  <steveblock@google.com>

        Reviewed by Dimitri Glazkov.

        Geolocation does not correctly handle Infinity for PositionOptions properties.
        https://bugs.webkit.org/show_bug.cgi?id=29099

        * bindings/js/JSGeolocationCustom.cpp: Modified.
        (WebCore::createPositionOptions): Modified. If timeout or maximumAge is positive infinity, applies these values as a special case.
        * page/PositionOptions.h: Modified.
        (WebCore::PositionOptions::hasMaximumAge): Added. Determines whether the object has a maximum age.
        (WebCore::PositionOptions::maximumAge): Modified. Asserts that the object has a maximum age.
        (WebCore::PositionOptions::clearMaximumAge): Added. Clears the maximum age.
        (WebCore::PositionOptions::setMaximumAge): Modified. Registers that the maximum age has been set.
        (WebCore::PositionOptions::PositionOptions): Modified. Registers that the maximum age has been set.

2009-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Adele Peterson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29276
        REGRESSION(r48334): WebKit crashes on file select by drag

        Document.elementFromPoint now takes point in client space, not page space.

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

2009-09-17  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        Reimplement default media UI for Mac Chromium to match the style
        of the Windows and Linux versions.  Also breaks the dependency
        on the internal wk* functions that were previously used to
        render the media controller widgets.
        https://bugs.webkit.org/show_bug.cgi?id=29161

        No media layout tests are currently enabled in Mac Chromium, so
        nothing needs rebaselineing, etc.

        This is a recommit of r48438 with a compile fix and merges of
        recent changes to the file.

        * css/mediaControlsChromium.css:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::mediaElementParent):
        (WebCore::RenderThemeChromiumMac::extraMediaControlsStyleSheet):
        (WebCore::mediaSliderThumbImage):
        (WebCore::mediaVolumeSliderThumbImage):
        (WebCore::RenderThemeChromiumMac::paintSliderTrack):
        (WebCore::RenderThemeChromiumMac::adjustSliderThumbSize):
        (WebCore::RenderThemeChromiumMac::paintMediaButtonInternal):
        (WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintMediaControlsBackground):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::adjustSliderThumbSize):

2009-09-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        The Console scope bar should have a divider between All and the other possible
        values (Errors, Warnings, Logs). It will look something like:
        
        All | Errors Warnings Logs.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.createDividerElement):
        (WebInspector.ConsoleView):
        * inspector/front-end/inspector.css:

2009-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove additional references to JSVoidCallback which no longer exists.

        * DerivedSources.cpp:
        * WebCore.vcproj/WebCore.vcproj:

2009-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        Remove commented out onhashchange attribute now that it is implemented.

        * page/DOMWindow.idl:

2009-09-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7007541> 
        CrashTracer: 4800crashes in Safari at com.apple.WebKit • WTF::HashTableIterator...
        
        Make RuntimeObjectImp more robust against m_instance being a null (which can happen if an OOP plug-in
        crashes while we're calling into it).
        
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp):
        (JSC::RuntimeObjectImp::~RuntimeObjectImp):
        (JSC::RuntimeObjectImp::invalidate):
        (JSC::RuntimeObjectImp::fallbackObjectGetter):
        (JSC::RuntimeObjectImp::fieldGetter):
        (JSC::RuntimeObjectImp::methodGetter):
        (JSC::RuntimeObjectImp::getOwnPropertySlot):
        (JSC::RuntimeObjectImp::getOwnPropertyDescriptor):
        (JSC::RuntimeObjectImp::put):
        (JSC::RuntimeObjectImp::defaultValue):
        (JSC::RuntimeObjectImp::getCallData):
        (JSC::RuntimeObjectImp::getConstructData):
        (JSC::RuntimeObjectImp::getPropertyNames):
        * bridge/runtime_object.h:
        (JSC::RuntimeObjectImp::getInternalInstance):

2009-09-17  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Wrap primitive values (as objects) in InspectorController::wrap.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::wrapObject): objects of any type will be wrapped into proxies,
         only object proxies will have objectId.
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions): there is InjectedScript.getCompletionsi
         that accepts an expression and returns possible completions. This way we don't need to wrap
         and unwrap the completions result into a proxy object.
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getCompletions):
        (InjectedScript.evaluate):
        (InjectedScript._evaluateOn):
        (InjectedScript.createProxyObject):
        * inspector/front-end/InjectedScriptAccess.js:

2009-09-17  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Wrap PageTransitionEvents properly for V8's use.

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

        Fixes Chromium's failures for LayoutTests/fast/events/pageshow-pagehide.html.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventToV8Object): Wrap PageTransitionEvents properly.

2009-09-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Hardware-accelerated opacity transition on inline asserts
        https://bugs.webkit.org/show_bug.cgi?id=29342
        
        Remove an erroneous toRenderBox() that could be called on a RenderInline; we can just
        pass an empty size, because the box size is only required for transform animations.

        Test: compositing/transitions/opacity-on-inline.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startTransition):

2009-09-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [V8] OwnHandle might get a weak callback after destruction
        https://bugs.webkit.org/show_bug.cgi?id=29172

        Be sure to clear out weak reference so we don't get a weak callback
        after we've destructed ourselves.  Also, removed some tricky methods
        that had no clients.

        * bindings/v8/OwnHandle.h:
        (WebCore::OwnHandle::clear):

2009-09-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Partial roll out of http://trac.webkit.org/changeset/48455 to
        fix crashes that started happening in V8Proxy::getEnteredContext().

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

2009-09-17  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: labels of checkboxes should, when hit-tested, return the checkbox
        https://bugs.webkit.org/show_bug.cgi?id=29335

        When an accessibility hit test is done and it hits the label of a control element,
        the control element should be returned instead of nothing, since the label
        itself is usually ignored.

        Test: accessibility/label-for-control-hittest.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::correspondingControlForLabelElement):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        (WebCore::AccessibilityRenderObject::correspondingControlForLabelElement):
        * accessibility/AccessibilityRenderObject.h:

2009-09-17  Avi Drissman  <avi@chromium.org>

        Reviewed by Dimitri Glazkov, build fix.

        Change to make RenderThemeChromiumMac compile inside of non PLATFORM(MAC).
        https://bugs.webkit.org/show_bug.cgi?id=29243

        Covered by existing tests.

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):

2009-09-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        [V8] Accessing properties/methods of an object, created with document.implementation.createDocumentType
        creates nodes that have no document (ScriptExecutionContext), which in turn produces NULL-ref crashes.
        https://bugs.webkit.org/show_bug.cgi?id=26402

        Test: fast/dom/DOMImplementation/detached-doctype.html
              fast/dom/doctype-event-listener-crash.html

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getEventListener): Added an extra NULL-check.

2009-09-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        FontDescription.h includes RenderStyleConstants.h, which violates layering
        https://bugs.webkit.org/show_bug.cgi?id=29327

        * GNUmakefile.am: Added FontSmoothingMode.h.
        * WebCore.gypi: Added FontSmoothingMode.h.
        * WebCore.vcproj/WebCore.vcproj: Added FontSmoothingMode.h.
        * WebCore.xcodeproj/project.pbxproj: Added FontSmoothingMode.h and made
            it a private header.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Get the
            font smoothing mode via the font description.
        * css/CSSPrimitiveValueMappings.h: Include FontSmoothingMode.h
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Updated for the rename
            of FontSmoothing to FontSmoothingMode.
        (WebCore::CSSPrimitiveValue::operator FontSmoothingMode): Ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Get the font smoothing mode
            via the font description.
        * platform/graphics/FontDescription.h: Do not include
            RenderStyleConstants.h.
        (WebCore::FontDescription::fontSmoothing): Updated for the rename of
            FontSmoothing to FontSmoothingMode.
        (WebCore::FontDescription::setFontSmoothing): Ditto.
        * platform/graphics/FontSmoothingMode.h: Added.
        (WebCore::FontSmoothingMode): Moved the FontSmoothing enum from
            RenderStyleConstants here and renamed it to this.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::fontSmoothing): Removed this getter, since
            this can be accessed via the font description.
        * rendering/style/RenderStyleConstants.h: Moved the FontSmoothing enum
            from here to FontSmoothingMode.h.

2009-09-17  Kevin Ollivier  <kevino@theolliviers.com>

        wx 2.9 build fix.

        * platform/wx/wxcode/gtk/scrollbar_render.cpp:
        (wxGetGdkWindowForDC):

2009-09-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Elements appear behind <video> when they should be in front sometimes
        https://bugs.webkit.org/show_bug.cgi?id=29314
        
        r45598 added logic that tests for overlap with <video> to determine when to throw
        a layer into compositing mode. That logic was incorrect in some cases, and this patch
        fixes it. When testing overlap, the layer needs to be composited iff some previous layer
        is composited (which adds a rect to the overlay map), and there is overlap.

        Test: compositing/geometry/video-opacity-overlay.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2009-09-17  Avi Drissman  <avi@google.com>

        Reviewed by Darin Fisher.

        Update the Chromium Mac theming files (RenderTheme and Theme) to be
        up-to-date.
        
        https://bugs.webkit.org/show_bug.cgi?id=29243
        http://crbug.com/19604

        Covered by existing tests.

        * WebCore.gypi:
        * platform/chromium/ThemeChromiumMac.h: Added.
        (WebCore::ThemeChromiumMac::ThemeChromiumMac):
        (WebCore::ThemeChromiumMac::~ThemeChromiumMac):
        (WebCore::ThemeChromiumMac::controlRequiresPreWhiteSpace):
        * platform/chromium/ThemeChromiumMac.mm: Added.
        (WebCore::):
        (WebCore::platformTheme):
        (WebCore::controlSizeForFont):
        (WebCore::sizeFromFont):
        (WebCore::setControlSize):
        (WebCore::updateStates):
        (WebCore::inflateRect):
        (WebCore::checkboxSizes):
        (WebCore::checkboxMargins):
        (WebCore::checkboxSize):
        (WebCore::checkbox):
        (WebCore::paintCheckbox):
        (WebCore::radioSizes):
        (WebCore::radioMargins):
        (WebCore::radioSize):
        (WebCore::radio):
        (WebCore::paintRadio):
        (WebCore::buttonSizes):
        (WebCore::buttonMargins):
        (WebCore::button):
        (WebCore::paintButton):
        (WebCore::ThemeChromiumMac::baselinePositionAdjustment):
        (WebCore::ThemeChromiumMac::controlFont):
        (WebCore::ThemeChromiumMac::controlSize):
        (WebCore::ThemeChromiumMac::minimumControlSize):
        (WebCore::ThemeChromiumMac::controlBorder):
        (WebCore::ThemeChromiumMac::controlPadding):
        (WebCore::ThemeChromiumMac::inflateControlPaintRect):
        (WebCore::ThemeChromiumMac::paint):
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/IntRect.h:
        * rendering/RenderThemeChromiumMac.h:
        (WebCore::RenderThemeChromiumMac::supportsControlTints):
        (WebCore::RenderThemeChromiumMac::scrollbarControlSizeForPart):
        (WebCore::RenderThemeChromiumMac::supportsSelectionForegroundColors):
        * rendering/RenderThemeChromiumMac.mm:
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]):
        (-[RTCMFlippedView isFlipped]):
        (-[RTCMFlippedView currentEditor]):
        (WebCore::):
        (WebCore::FlippedView):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeChromiumMac::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeChromiumMac::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeChromiumMac::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumMac::systemFont):
        (WebCore::convertNSColorToColor):
        (WebCore::menuBackgroundColor):
        (WebCore::RenderThemeChromiumMac::systemColor):
        (WebCore::RenderThemeChromiumMac::isControlStyled):
        (WebCore::RenderThemeChromiumMac::adjustRepaintRect):
        (WebCore::RenderThemeChromiumMac::inflateRect):
        (WebCore::RenderThemeChromiumMac::convertToPaintingRect):
        (WebCore::RenderThemeChromiumMac::setFontFromControlSize):
        (WebCore::RenderThemeChromiumMac::paintTextField):
        (WebCore::RenderThemeChromiumMac::paintCapsLockIndicator):
        (WebCore::RenderThemeChromiumMac::paintTextArea):
        (WebCore::RenderThemeChromiumMac::paintMenuList):
        (WebCore::TopGradientInterpolate):
        (WebCore::BottomGradientInterpolate):
        (WebCore::MainGradientInterpolate):
        (WebCore::TrackGradientInterpolate):
        (WebCore::RenderThemeChromiumMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeChromiumMac::paintMenuListButton):
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingLeft):
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingRight):
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingTop):
        (WebCore::RenderThemeChromiumMac::popupInternalPaddingBottom):
        (WebCore::RenderThemeChromiumMac::adjustMenuListButtonStyle):
        (WebCore::RenderThemeChromiumMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeChromiumMac::adjustSliderThumbStyle):
        (WebCore::RenderThemeChromiumMac::paintSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintSearchField):
        (WebCore::RenderThemeChromiumMac::setSearchCellState):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldDecoration):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumMac::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsButton):
        (WebCore::mediaControllerTheme):
        (WebCore::RenderThemeChromiumMac::adjustSliderThumbSize):
        (WebCore::getMediaUIPartStateFlags):
        (WebCore::getUnzoomedRectAndAdjustCurrentContext):
        (WebCore::RenderThemeChromiumMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintMediaRewindButton):
        (WebCore::RenderThemeChromiumMac::paintMediaReturnToRealtimeButton):
        (WebCore::RenderThemeChromiumMac::paintMediaControlsBackground):
        (WebCore::RenderThemeChromiumMac::paintMediaCurrentTime):
        (WebCore::RenderThemeChromiumMac::paintMediaTimeRemaining):
        (WebCore::RenderThemeChromiumMac::extraMediaControlsStyleSheet):

2009-09-16  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=29306
        
        Fixes an issue where an attack that contains accented characters can
        bypass the XSSAuditor.
        
        XSSAuditor::decodeURL used the wrong length for the input string. 
        When the input string was decoded, the decoded result was truncated.
        Hence, XSSAuditor was comparing the source code of the script to the 
        truncated input parameters.

        Test: http/tests/security/xssAuditor/img-onerror-accented-char.html

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

2009-09-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Explore allowing pages with unload handlers into the Page Cache
        https://bugs.webkit.org/show_bug.cgi?id=29021

        No new tests. (All previous tests continue to pass)

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): If the document is in the page cache, don't fire the unload event.

2009-09-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Teach ScheduledAction::execute about isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=27703

        We now save a handle to the original context.  We use that handle to
        call the timeout in the right context / world.

        Tests: http/tests/security/isolatedWorld/window-setTimeout-function.html
               http/tests/security/isolatedWorld/window-setTimeout-string.html

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):

2009-09-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Teach ScheduledAction::execute about isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=27703

        We now save a handle to the original context.  We use that handle to
        call the timeout in the right context / world.

        Tests: http/tests/security/isolatedWorld/window-setTimeout-function.html
               http/tests/security/isolatedWorld/window-setTimeout-string.html

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):

2009-09-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add some groups to the xcode project to make the bindings/js/ group
        a little nicer.

        * WebCore.xcodeproj/project.pbxproj:

2009-09-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29320
        JS callback objects should store the global object

        This just changes the callback objects to store the global object instead
        of the frame. A follow up patch will change them to store the 'current' 
        global object instead of the lexical or dynamic.

        * DerivedSources.make: Remove unused VoidCallback.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::JSCustomPositionCallback):
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionCallback.h:
        (WebCore::JSCustomPositionCallback::create):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::JSCustomPositionErrorCallback):
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.h:
        (WebCore::JSCustomPositionErrorCallback::create):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::JSCustomSQLStatementCallback):
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.h:
        (WebCore::JSCustomSQLStatementCallback::create):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::JSCustomSQLStatementErrorCallback):
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.h:
        (WebCore::JSCustomSQLStatementErrorCallback::create):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::Data::Data):
        (WebCore::JSCustomSQLTransactionCallback::Data::globalObject):
        (WebCore::JSCustomSQLTransactionCallback::JSCustomSQLTransactionCallback):
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.h:
        (WebCore::JSCustomSQLTransactionCallback::create):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::JSCustomSQLTransactionErrorCallback):
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.h:
        (WebCore::JSCustomSQLTransactionErrorCallback::create):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::JSCustomVoidCallback):
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.h:
        (WebCore::JSCustomVoidCallback::create):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::createTransaction):
        (WebCore::JSDatabase::transaction):
        (WebCore::JSDatabase::readTransaction):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionCallback):
        (WebCore::createPositionErrorCallback):
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):

2009-09-15  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        <input maxlength=> should restrict only values specified by users.
        https://bugs.webkit.org/show_bug.cgi?id=21271

        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer):
        (WebCore::InputElement::sanitizeValue):
        (WebCore::InputElement::sanitizeUserInputValue): Rename from constrainValue().
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        (WebCore::InputElement::updateValueIfNeeded):
        * dom/InputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::value):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::sanitizeValue):
        * html/HTMLInputElement.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::constrainValue):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::sanitizeValue):

2009-09-16  Enrica Casucci  <enrica@apple.com>

        Reviewed by Eric Seidel.

        Reorganizing helper functions in htmlediting.h to group them by type of object they return/operate upon.
        https://bugs.webkit.org/show_bug.cgi?id=29319

        * editing/IndentOutdentCommand.cpp:
        Removed implementation of isAtUnsplittableElement.

        * editing/IndentOutdentCommand.h:
        Removed member function isAtUnsplittableElement, because it was not class specific and belonged logically among the helper functions.

        * editing/htmlediting.cpp:
        (WebCore::isAtUnsplittableElement): added. The code was taken from IndentOutdentCommand.

        * editing/htmlediting.h:
        Reordered functions to group them by type of object returned or operate upon.
        Added comments.
        Added isAtUnsplittableElement declaration.

2009-09-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig and Anders Carlsson.

        Removed some vestigial and potentially crashy code that makes consolidating
        event listeners hard.

        * dom/Node.cpp:
        (WebCore::Node::addEventListener): No need to limit when event listeners
        can be added. Other EventTargets don't do this.
        
        Also, check for null when accessing document(). Technically, the JS bindings
        do this check for us, but let's not rely on that.

2009-09-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/7155710>
        HTML selects on windows cause containing window to become inactive when opened
        
        Redo the way we handle events when a popup menu is shown, based on
        http://blogs.msdn.com/oldnewthing/archive/2004/08/20/217684.aspx
        
        Since a non-active window can't capture the mouse, we use the owning window 
        (the WebView) as the capture window. We then run a recursive message pump that 
        forwards all mouse and keyboard events to the popup menu.
        
        * platform/PopupMenu.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::wndProc):

2009-09-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Ada Chan.

        Speculative fix for
        <rdar://problem/6937089> Crashes at RenderWidget::destroy()

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy): Avoid calling renderArena() if node()
        is null. Add two assertions that can help determine how this crash
        happens (in particular, whether node() becomes null during destroy() or
        it is null before destroy() is called).

2009-09-16  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2009-09-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7083741> Implement a CSS extension to 
        adjust sub-pixel anti-aliasing for text
        -and corresponding-
        https://bugs.webkit.org/show_bug.cgi?id=29291

        Added tests:
        * fast/css/font-smoothing.html: Added.
        * fast/css/parsing-webkit-font-smoothing.html: Added.

        This patch adds a new CSS property called -webkit-font-smoothing 
        that accepts the following as valid input: auto | none | 
        antialiased | subpixel-antialiased

        Return appropriate computed style for -webkit-font-smoothing
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

        Add a case for CSSPropertyWebkitFontSmoothing, and accept valid 
        input.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

        Add mappings for FontSmoothing to the right CSS values.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator FontSmoothing):

        Add -webkit-font-smoothing
        * css/CSSPropertyNames.in:

        Set fontSmoothing on the FontDescription.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

        Add antialiased and subpixel-antialiased as possible new CSS 
        values.
        * css/CSSValueKeywords.in:
        Store the font smoothing CSS value in the FontDescription.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::fontSmoothing):
        (WebCore::FontDescription::setFontSmoothing):
        (WebCore::FontDescription::operator==):

        Call setShouldAntialias() and setShouldUseSmoothing() appropriately 
        based on the CSS fontSmoothing() value.
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):

        New function fontSmoothing()
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::fontSmoothing):

        New enum FontSmoothing.
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-09-16  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Remove style property if empty string is entered.

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

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._onmouseout): fixed null pointer exception
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.applyStyleText): if styletext to apply is empty it will return an array to confirm the property removal
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.):
        (WebInspector.StylePropertyTreeElement.prototype):

2009-09-16  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Always reset m_implicitShorthand to false after parsing
        background-repeat style property otherwise properties
        following after it may be erroneously marked as implicit.

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

        Test: fast/backgrounds/repeat/margin-shorthand.html

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

2009-09-16  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Alexey Proskuryakov.

        Incorrect behavior of XMLHttpRequest::getAllResponseHeaders and
        XMLHttpRequest::getResponseHeader in the
        HEADERS_RECEIVED readyState.
        https://bugs.webkit.org/show_bug.cgi?id=29121

        Tests: http/tests/xmlhttprequest/getAllResponseHeaders.html
               http/tests/xmlhttprequest/getResponseHeader.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        (WebCore::XMLHttpRequest::getResponseHeader):
        Changed the minimum valid state from LOADING to HEADERS_RECEIVED.

2009-09-16  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix style violation in V8AbstractEventListener.
        https://bugs.webkit.org/show_bug.cgi?id=29303

        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::operator==):

2009-09-16  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Add Watch Expression support to inspector
        https://bugs.webkit.org/show_bug.cgi?id=27514

        Manual test added.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update.callback):
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        (WebInspector.ObjectPropertiesSection.CompareProperties):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.reset):
        (WebInspector.ScriptsPanel.prototype._callFrameSelected):
        * inspector/front-end/WatchExpressionsSidebarPane.js: Added.
        (WebInspector.WatchExpressionsSidebarPane):
        (WebInspector.WatchExpressionsSidebarPane.prototype.refreshExpressions):
        (WebInspector.WatchExpressionsSection):
        (WebInspector.WatchExpressionsSection.prototype.update):
        (WebInspector.WatchExpressionsSection.prototype.addExpression):
        (WebInspector.WatchExpressionsSection.prototype.updateExpression):
        (WebInspector.WatchExpressionsSection.prototype.findAddedTreeElement):
        (WebInspector.WatchExpressionsSection.prototype.loadSavedExpressions):
        (WebInspector.WatchExpressionsSection.prototype.saveExpressions):
        (WebInspector.WatchExpressionsSection.CompareProperties):
        (WebInspector.WatchExpressionTreeElement):
        (WebInspector.WatchExpressionTreeElement.prototype.update):
        (WebInspector.WatchExpressionTreeElement.prototype._deleteButtonClicked):
        (WebInspector.WatchExpressionTreeElement.prototype.startEditing):
        (WebInspector.WatchExpressionTreeElement.prototype.editingCancelled):
        (WebInspector.WatchExpressionTreeElement.prototype.applyExpression):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:
        * manual-tests/inspector/debugger-watch-expressions.html: Added.

2009-09-16  Greg Bolsinga  <bolsinga@apple.com>

        Add ENABLE(INSPECTOR)
        https://bugs.webkit.org/show_bug.cgi?id=29260

        Reviewed by David Kilzer.

        No new tests. (No change in default behavior.)

        * DerivedSources.make: Use new WebCore.Inspector.exp file if ENABLE_DRAG_SUPPORT.
        * WebCore.base.exp: Move Inspector only exports to WebCore.Inspector.exp.
        * WebCore.xcodeproj/project.pbxproj: Add WebCore.Inspector.exp.
        * bindings/js/JSDOMWindowBase.cpp: Use ENABLE(INSPECTOR) where applicable.
        (WebCore::JSDOMWindowBase::supportsProfiling):
        * bindings/js/JSInspectedObjectWrapper.cpp: Wrap entire file in ENABLE(INSPECTOR).
        * bindings/js/JSInspectorBackendCustom.cpp: Ditto.
        * bindings/js/JSInspectorCallbackWrapper.cpp: Ditto.
        * bindings/js/ScriptObject.cpp: Use ENABLE(INSPECTOR) where applicable.
        * bindings/js/ScriptObject.h: Ditto.
        * bindings/js/ScriptObjectQuarantine.cpp: Wrap entire file in ENABLE(INSPECTOR).
        * dom/Document.cpp: Use ENABLE(INSPECTOR) where applicable.
        (WebCore::Document::recalcStyle):
        (WebCore::Document::addMessage):
        (WebCore::Document::resourceRetrievedByXMLHttpRequest):
        (WebCore::Document::scriptImported):
        * dom/Document.h: Ditto.
        * dom/Node.cpp: Ditto.
        (WebCore::Node::dispatchGenericEvent):
        * dom/ScriptExecutionContext.h: Ditto.
        (WebCore::):
        * html/HTMLDocument.cpp: Ditto.
        (WebCore::HTMLDocument::createTokenizer):
        * html/HTMLTokenizer.cpp: Ditto.
        (WebCore::HTMLTokenizer::write):
        * inspector/ConsoleMessage.cpp: Ditto.
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h: Ditto.
        * inspector/DOMDispatchTimelineItem.cpp: Wrap entire file in ENABLE(INSPECTOR).
        * inspector/InspectorBackend.cpp: Ditto.
        * inspector/InspectorController.cpp: Ditto.
        * inspector/InspectorDOMAgent.cpp: Ditto.
        * inspector/InspectorDOMStorageResource.cpp: Ditto.
        * inspector/InspectorDatabaseResource.cpp: Ditto.
        * inspector/InspectorFrontend.cpp: Ditto.
        * inspector/InspectorResource.cpp: Ditto.
        * inspector/InspectorTimelineAgent.cpp: Ditto.
        * inspector/TimelineItem.cpp: Ditto.
        * loader/FrameLoader.cpp: Use ENABLE(INSPECTOR) where applicable.
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        (WebCore::FrameLoader::dispatchAssignIdentifierToInitialRequest):
        (WebCore::FrameLoader::dispatchWillSendRequest):
        (WebCore::FrameLoader::dispatchDidReceiveResponse):
        (WebCore::FrameLoader::dispatchDidReceiveContentLength):
        (WebCore::FrameLoader::dispatchDidFinishLoading):
        * page/Chrome.cpp: Ditto.
        (WebCore::Chrome::mouseDidMoveOverElement):
        * page/Console.cpp: Ditto.
        (WebCore::Console::addMessage):
        (WebCore::Console::count):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::time):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupEnd):
        * page/ContextMenuController.cpp: Ditto.
        (WebCore::ContextMenuController::handleContextMenuEvent):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp: Ditto.
        (WebCore::DOMWindow::sessionStorage):
        (WebCore::DOMWindow::localStorage):
        * page/EventHandler.cpp: Ditto.
        (WebCore::EventHandler::handleMousePressEvent):
        * page/FrameView.cpp: Ditto.
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h: Ditto.
        * page/Page.cpp: Ditto.
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        * page/Page.h: Ditto.
        * platform/ContextMenu.cpp: Ditto.
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h: Ditto.
        (WebCore::):
        * storage/Database.cpp: Ditto.
        (WebCore::Database::openDatabase):
        * workers/WorkerContext.cpp: Ditto.
        (WebCore::WorkerContext::importScripts):
        * xml/XMLHttpRequest.cpp: Ditto.
        (WebCore::XMLHttpRequest::didFinishLoading):

2009-09-16  Greg Bolsinga  <bolsinga@apple.com>

        Add ENABLE(CONTEXT_MENUS)
        https://bugs.webkit.org/show_bug.cgi?id=29225

        Reviewed by David Kilzer.

        No new tests. (No change in default behavior.)

        * DerivedSources.make: Use new WebCore.ContextMenus.exp file if ENABLE_CONTEXT_MENUS.
        * WebCore.base.exp: Move ContextMenu only exports to WebCore.ContextMenus.exp.
        * WebCore.xcodeproj/project.pbxproj: Add WebCore.ContextMenus.exp.
        * dom/Node.cpp: Use ENABLE(CONTEXT_MENUS) where applicable.
        (WebCore::Node::defaultEventHandler):
        * loader/EmptyClients.h: Ditto.
        * page/ContextMenuController.cpp: Wrap entire file in ENABLE(CONTEXT_MENUS).
        * page/EventHandler.cpp: Use ENABLE(CONTEXT_MENUS) where applicable.
        * page/EventHandler.h: Ditto.
        * page/Page.cpp: Ditto.
        (WebCore::Page::Page):
        * page/Page.h: Ditto.
        * page/mac/EventHandlerMac.mm: Ditto.
        * page/mac/WebCoreViewFactory.h: Ditto.
        * platform/ContextMenu.cpp: Wrap entire file in ENABLE(CONTEXT_MENUS).
        * platform/LocalizedStrings.h: Use ENABLE(CONTEXT_MENUS) where applicable.
        * platform/mac/ContextMenuItemMac.mm: Wrap entire file in ENABLE(CONTEXT_MENUS).
        * platform/mac/ContextMenuMac.mm: Ditto.
        * platform/mac/LocalizedStringsMac.mm: Use ENABLE(CONTEXT_MENUS) where applicable.
        * svg/graphics/SVGImage.cpp: Ditto.
        (WebCore::SVGImage::dataChanged):

2009-09-16  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Clean up invalidation for repainting.  Hoist the dirty rect intersection test in ScrollViewMac up
        into ScrollView so that all platforms do it.
        
        Patch deferred repaints in FrameView::repaintContentRectangle to only add the visible portion of
        the rectangle for repainting.

        * page/FrameView.cpp:
        (WebCore::FrameView::repaintContentRectangle):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::repaintContentRectangle):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformRepaintContentRectangle):

2009-09-16  Greg Bolsinga  <bolsinga@apple.com>

        Add ENABLE(DRAG_SUPPORT)
        https://bugs.webkit.org/show_bug.cgi?id=29233

        Reviewed by David Kilzer.

        No new tests. (No change in default behavior.)

        * DerivedSources.make: Use new WebCore.DragSupport.exp file if ENABLE_DRAG_SUPPORT.
        * WebCore.base.exp: Move Drag Support only exports to WebCore.DragSupport.exp.
        * WebCore.xcodeproj/project.pbxproj: Add WebCore.DragSupport.exp.
        * dom/Clipboard.h: Use ENABLE(DRAG_SUPPORT) where applicable.
        * loader/EmptyClients.h: Ditto.
        * page/DragController.cpp: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * page/EventHandler.cpp: Use ENABLE(DRAG_SUPPORT) where applicable.
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h: Ditto.
        * page/Page.cpp: Ditto.
        (WebCore::Page::Page):
        * page/Page.h: Ditto.
        * page/mac/DragControllerMac.mm: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * page/mac/EventHandlerMac.mm: Use ENABLE(DRAG_SUPPORT) where applicable.
        (WebCore::EventHandler::passSubframeEventToSubframe):
        * platform/DragData.cpp: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * platform/DragImage.cpp: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * platform/mac/ClipboardMac.h: Use ENABLE(DRAG_SUPPORT) where applicable.
        * platform/mac/ClipboardMac.mm: Ditto.
        * platform/mac/DragDataMac.mm: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * platform/mac/DragImageMac.mm: Wrap entire file in ENABLE(DRAG_SUPPORT).
        * rendering/RenderLayer.cpp: Use ENABLE(DRAG_SUPPORT) where applicable.
        (WebCore::RenderLayer::autoscroll):
        * rendering/RenderObject.cpp: Ditto.
        * rendering/RenderObject.h: Ditto.
        * svg/graphics/SVGImage.cpp: Ditto.
        (WebCore::SVGImage::dataChanged):

2009-09-16  Kevin Ollivier  <kevino@theolliviers.com>

        wxMSW build fix after adding support for high resolution times in Win.

        * page/Settings.cpp:
        * page/Settings.h:

2009-09-16  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Added operator==() to event listeners. This fixes V8 bindings
        build broken in http://trac.webkit.org/changeset/48402.
        https://bugs.webkit.org/show_bug.cgi?id=29298

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener): Now
        uses JSEventListenerType.
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::operator==): Only compares
        pointers since we create at most one wrapper for a JS object.

2009-09-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Crash when visiting http://flipper.googlelabs.com/
        https://bugs.webkit.org/show_bug.cgi?id=29293

        Check type for being null or empty before looking it up in the
        hash of supported types.

        Tested by http/tests/loading/redirect-with-no-location-crash.html

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

2009-09-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.
        
        Removed the notion of "disconnected nodes with event listeners" because
        it was vestigial. The reference cycle it tried to solve was solved another
        way in https://bugs.webkit.org/show_bug.cgi?id=21260.

        * dom/Document.cpp:
        (WebCore::Document::removeAllEventListeners):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        (WebCore::Node::insertedIntoDocument):
        (WebCore::Node::removedFromDocument):
        (WebCore::Node::willMoveToNewOwnerDocument):
        (WebCore::Node::didMoveToNewOwnerDocument):
        (WebCore::Node::addEventListener):
        (WebCore::Node::removeEventListener):
        (WebCore::Node::clearAttributeEventListener):

2009-09-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WAI-ARIA: add support for ranges, including the progressbar, slider, and spinbutton roles
        https://bugs.webkit.org/show_bug.cgi?id=28841

        Allow certain ARIA roles to change value with AXIncrement and AXDecrement. 
        Consolidate increment/decrement/changeValue methods. 

        Test: accessibility/aria-slider-value-change.html

        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::increment):
        (WebCore::AccessibilityRenderObject::decrement):
        (WebCore::AccessibilityRenderObject::changeValueByPercent):
        (WebCore::AccessibilityRenderObject::setValue):
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySlider.cpp:
        * accessibility/AccessibilitySlider.h:
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):

2009-09-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed the jsEventListeners set from JSDOMGlobalObject, to simplify
        creation and destruction of JSDOMGlobalObject and event listeners.
        
        Added an abstract operator==() to EventListener, to replace the
        jsEventListeners set's role in determining if two event listeners are
        equal from the DOM's perspective.
        
        Added a type field to EventListener, and casting operations, to support
        operator==() and other abstract operations.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::addEventListener):
        (WebCore::JSDOMApplicationCache::removeEventListener):
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotification::addEventListener):
        (WebCore::):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        (WebCore::JSEventListener::~JSEventListener):
        (WebCore::JSEventListener::markJSFunction):
        (WebCore::JSEventListener::handleEvent):
        (WebCore::JSEventListener::reportError):
        (WebCore::JSEventListener::operator==):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::cast):
        * bindings/js/JSEventSourceCustom.cpp:
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::addEventListener):
        (WebCore::JSMessagePort::removeEventListener):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::addEventListener):
        (WebCore::JSSVGElementInstance::removeEventListener):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::addEventListener):
        (WebCore::JSWorkerContext::removeEventListener):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::addEventListener):
        (WebCore::JSXMLHttpRequest::removeEventListener):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::addEventListener):
        (WebCore::JSXMLHttpRequestUpload::removeEventListener):
        * bindings/objc/ObjCEventListener.h:
        (WebCore::ObjCEventListener::cast):
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::ObjCEventListener):
        (WebCore::ObjCEventListener::operator==):
        * dom/EventListener.h:
        (WebCore::EventListener::):
        (WebCore::EventListener::type):
        (WebCore::EventListener::EventListener):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::addEventListener):
        (WebCore::MessagePort::removeEventListener):
        * dom/Node.cpp:
        (WebCore::Node::removeEventListener):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::mainFrameDocument):
        (WebCore::InspectorDOMAgent::operator==):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::cast):
        * loader/ImageDocument.cpp:
        (WebCore::ImageEventListener::cast):
        (WebCore::ImageEventListener::ImageEventListener):
        (WebCore::ImageEventListener::operator==):
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::addEventListener):
        (WebCore::DOMApplicationCache::removeEventListener):
        * notifications/Notification.cpp:
        (WebCore::Notification::removeEventListener):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::removeEventListener):
        * page/EventSource.cpp:
        (WebCore::EventSource::addEventListener):
        (WebCore::EventSource::removeEventListener):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::ConditionEventListener::cast):
        (WebCore::ConditionEventListener::ConditionEventListener):
        (WebCore::ConditionEventListener::operator==):
        (WebCore::ConditionEventListener::handleEvent):
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::addEventListener):
        (WebCore::AbstractWorker::removeEventListener):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addEventListener):
        (WebCore::WorkerContext::removeEventListener):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::addEventListener):
        (WebCore::XMLHttpRequest::removeEventListener):
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::addEventListener):
        (WebCore::XMLHttpRequestUpload::removeEventListener):

2009-09-15  Alex Milowski  <alex@milowski.com>

        Reviewed by Tor Arne Vestbø.

        Added ENABLE_MATHML to feature defines

        * Configurations/FeatureDefines.xcconfig:

2009-09-14  Andrew Richards  <randrew@gmail.com>

        Reviewed by Sam Weinig.

        Document.elementFromPoint() and Document.caretRangeFromPoint() erroneously returning null at points visible only after scrolling.
        https://bugs.webkit.org/show_bug.cgi?id=29245

        Use visibleContentRect() instead of boundsRect() when checking hit point bounds on viewport.

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::caretRangeFromPoint):

2009-09-15  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Eric Seidel

        http://bugs.webkit.org/show_bug.cgi?id=26660

        Chromium Windows: When rotated, the baseline for a span of complex
        script is completely misaligned with that of the adjacent 
        simple script text. It's fixed by not applying the baseline offset for
        the Skia code path.

        Test: transforms/2d/hindi-rotated.html

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

2009-09-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Pass the PopupMenu pointer to CreateWindowEx and then get it from the LPCREATESTRUCT in
        the WM_CREATE handler. This way we don't have to first create an zero size window and then size it.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::PopupMenuWndProc):

2009-09-15  Drew Wilson  <atwilson@google.com>

        Reviewed by Darin Adler.

        MessageEvent should not be cancelable by default
        https://bugs.webkit.org/show_bug.cgi?id=27846

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        Changed constructor to set cancelable=false by default, per the HTML5 spec.

2009-09-15  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by George Staikos.

        Fix SVG path parsing error if a command starts with dot '.'
        https://bugs.webkit.org/show_bug.cgi?id=29123

        * svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):

2009-09-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Implement conditional breakpoints in the Web Inspector frontend.
        https://bugs.webkit.org/show_bug.cgi?id=28908

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.set condition):
        * inspector/front-end/Popup.js: Added.
        (WebInspector.Popup):
        (WebInspector.Popup.prototype.show):
        (WebInspector.Popup.prototype.hide):
        (WebInspector.Popup.prototype.get visible):
        (WebInspector.Popup.prototype.set element):
        (WebInspector.Popup.prototype.get element):
        (WebInspector.Popup.prototype.positionElement):
        (WebInspector.Popup.prototype.set anchor):
        (WebInspector.Popup.prototype.get anchor):
        (WebInspector.Popup.prototype.set autoHide):
        (WebInspector.Popup.prototype._checkNotVisible):
        (WebInspector.Popup.prototype._keyEventHandler):
        (WebInspector.Popup.prototype._mouseDownEventHandler):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.revealLine):
        (WebInspector.SourceFrame.prototype._loaded):
        (WebInspector.SourceFrame.prototype._documentContextMenu):
        (WebInspector.SourceFrame.prototype._documentMouseDown):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.committed):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition.dismissed):
        (WebInspector.SourceFrame.prototype._editBreakpointCondition):
        (WebInspector.SourceFrame.prototype._showBreakpointConditionPopup):
        (WebInspector.SourceFrame.prototype._createPopupElement):
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):
        (WebInspector.SourceFrame.prototype._removeBreakpointFromSource):
        (WebInspector.SourceFrame.prototype._drawBreakpointImagesIfNeeded.drawBreakpoint):
        (WebInspector.SourceFrame.prototype._drawBreakpointImagesIfNeeded):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.set currentFocusElement):
        (WebInspector.set currentPanel):
        (WebInspector.loaded):
        (WebInspector.contextMenu):
        (WebInspector.elementDragStart):
        (WebInspector.updateResource):
        (WebInspector.drawLoadingPieChart):
        (WebInspector.linkifyURLAsNode):
        (WebInspector.startEditing.getContent):
        (WebInspector.startEditing.editingCancelled):
        (WebInspector.startEditing.editingCommitted):
        * inspector/front-end/utilities.js:
        (Element.prototype.positionAt):
        (Element.prototype.offsetRelativeToWindow):

2009-09-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Page cache should support pages with unload handlers as an experiment.
        <rdar://problem/7196485> and https://bugs.webkit.org/show_bug.cgi?id=29021

        For the experiment, only allow pages with unload handlers into the Page Cache on
        Mac and Windows.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):

2009-09-14  Simon Fraser  <simon.fraser@apple.com>

        Fix the change in r48376 to do a null-check to fix a crashing test.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):

2009-09-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7047282> Safari crashes at WebCore::RenderMenuList::adjustInnerStyle() 436
        
        Avoid a crash when a mouse event handler on a <select> changes the select from a popup
        to a list (by setting the 'size' property) inside the event handler.

        Test: fast/forms/select-change-popup-to-listbox-in-event-handler.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):

2009-09-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Jon Honeycutt.

        More PopupMenu cleanup.
        
        * platform/PopupMenu.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        Call registerClass.
        
        (WebCore::PopupMenu::registerClass):
        Make this a private static member function so it can refer to PopupMenuWndProc.
        
        (WebCore::PopupMenu::PopupMenuWndProc):
        Try to get the PopupMenu and call its wndProc member function.
        
        (WebCore::PopupMenu::wndProc):
        Make this a member function.

2009-09-14  Brady Eidson  <beidson@apple.com>

        Not reviewed, maybe should've been:

        Cleaning up more Windows-specific fallout from the fix for:
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::WebCoreSynchronousLoader::load): Don't allow empty CFStrings as the stored credentials,
          as related checks all look at nullity when they really mean to be looking for emptiness. 

2009-09-14  Anders Carlsson  <andersca@apple.com>

        Speculative Qt build fix.
        
        * platform/qt/QWebPopup.cpp:
        (WebCore::QWebPopup::hidePopup):

2009-09-14  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Darin Fisher.

        Fix RenderThemeChromiumWin::determineClassicState so that classic_state
        matches the state values (and you get a single classic_state value
        for a given {part,state} value. This change will be tested by a 
        chromium patch that will land after this.

        This will be tested by code landing downstream on Chromium.org; the
        code does not execute on webkit.org.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::determineClassicState):
        (WebCore::RenderThemeChromiumWin::getThemeData):

2009-09-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=29138
        Simplify popup menu handling.

        * platform/PopupMenuClient.h:
        Rename hidePopup to popupDidHide.
        
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::handleKeyEvent):        
        (WebCore::PopupListBox::abandon):
        (WebCore::PopupListBox::acceptIndex):
        Call popupDidHide instead of hidePopup.
        
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::menuUnmapped):
        Ditto.
        
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::show):
        Ditto.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::hide):
        Call popupDidHide.
        
        (WebCore::PopupWndProc):
        Call PopupMenu::hide.
        
        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::OnMenuItemSelected):
        Call popupDidHide.
        
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::hidePopup):
        (WebCore::RenderMenuList::popupDidHide):
        * rendering/RenderMenuList.h:
        Set the "popup is visible" flag in popupDidHide.
        
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::popupDidHide):
        * rendering/RenderTextControlSingleLine.h:
        Ditto.

2009-09-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        - Fix <rdar://problem/7182275>.

        Make sure that the newly created scrollbar's style is up to date.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::~PopupMenu):
        Call setParent so that the scrollbar's parts are torn down correctly.
        
        (WebCore::PopupMenu::show):
        Call styleChanged.

2009-09-11  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7197644> WebKit should broadcast an MSAA event when
        jumping to a named anchor

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

        Reviewed by Adam Roben.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        Added declaration for handleScrolledToAnchor(). Added a new entry to
        the enum of accessibility notifications.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::firstAccessibleObjectFromNode):
        Code moved from AccessibilityRenderObject::internalLinkElement() and
        refactored slightly; walks the tree until it finds a Node (with a
        renderer) whose accessibility is not ignored.

        * accessibility/AccessibilityObject.h:
        Added a declaration for firstAccessibleObjectFromNode().

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        Code moved to AccessibilityObject::firstAccessibleObjectFromNode().

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        Stubbed.

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

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        Add a default case that returns early for notifications that Mac
        doesn't handle.
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        Stubbed.

        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        Post an AXScrolledToAnchor notification for the first accessible from
        the anchor Node.
        (WebCore::AXObjectCache::postPlatformNotification):
        If the notification is AXFocusedUIElementChanged, fire an
        EVENT_OBJECT_FOCUS. If the notification is AXScrolledToAnchor, fire
        EVENT_SYSTEM_SCROLLINGSTART, matching Firefox.
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        Code moved to postPlatformNotification().

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor):
        Call AXObjectCache::handleScrolledToAnchor().

2009-09-14  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Timothy Hatcher.

        Cookies are not inspectable after reloading a page
        https://bugs.webkit.org/show_bug.cgi?id=29222

        Create the cookieTreeElement on initialization instead of when the view is shown.
        Reset the selected element of the sidebar on reset.

        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.show):
        (WebInspector.StoragePanel.prototype.reset):


2009-09-14  Brady Eidson  <beidson@apple.com>

        Windows build fix.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::WebCoreSynchronousLoader::didReceiveChallenge):
        (WebCore::WebCoreSynchronousLoader::load):

2009-09-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Safari 4 cannot be used to update firmware on Linksys routers.
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        In http://trac.webkit.org/changeset/42483, we disabled CFNetwork's session credential storage and 
        implemented our own in WebCore.

        One feature we lost is that CFNetwork would automatically send previously authenticated credentials
        with new connections when the paths match, as allowed by RFC 2617 for HTTP Basic and Digest Authentication.  

        Even though it's optional for User Agents to do this, (some?) Linksys routers rely on this behavior for
        HTTP Basic Authentication.  So now WebCore's CredentialStorage will track URL paths for Basic credentials.

        We're not making this enhancement for Digest at this time, since we don't know of anything that broke
        due to the change in Digest behavior.

        Test: http/tests/loading/basic-credentials-sent-automatically.html
              http/tests/loading/basic-auth-resend-wrong-credentials.html

        * WebCore.base.exp:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        * platform/network/Credential.cpp:
        (WebCore::Credential::isEmpty):
        * platform/network/Credential.h:

        Add a slightly more full featured CredentialStore that will track URL paths a credential belongs to:
        * platform/network/CredentialStorage.cpp: Added.
        (WebCore::protectionSpaceToCredentialMap):
        (WebCore::originToDefaultCredentialMap):
        (WebCore::originStringFromURL):
        (WebCore::CredentialStorage::set):
        (WebCore::CredentialStorage::get):
        (WebCore::CredentialStorage::getDefaultAuthenticationCredential):
        * platform/network/CredentialStorage.h: Added.

        Allow ProtectionSpace to be a hash key:
        * platform/network/ProtectionSpace.cpp:
        (WebCore::ProtectionSpace::ProtectionSpace):
        * platform/network/ProtectionSpace.h:
        (WebCore::ProtectionSpace::ProtectionSpace):
        (WebCore::ProtectionSpace::isHashTableDeletedValue):
        * platform/network/ProtectionSpaceHash.h: Added.
        (WebCore::ProtectionSpaceHash::hash):
        (WebCore::ProtectionSpaceHash::equal):

        Allow ResourceHandles to remember the initial credential they used:
        * platform/network/ResourceHandleInternal.h:

        Allow mutable ResourceRequests to update their platform object if HTTP header fields change:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::addHTTPHeaderField):

        Remove WebCoreCredentialStorage:
        * platform/network/cf/AuthenticationCF.cpp:
        * platform/network/cf/AuthenticationCF.h:
        * platform/network/mac/AuthenticationMac.h:
        * platform/network/mac/AuthenticationMac.mm:

        Change ResourceHandleCFNet to try to use stored credentials on new connections, if appropriate:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Only try the ProtectionSpace key'ed
          Credential if it does not match the initially used Credential.
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::WebCoreSynchronousLoader::didReceiveChallenge): Only try the ProtectionSpace key'ed
          Credential if it does not match the initially used Credential.
        (WebCore::WebCoreSynchronousLoader::load):

        Change ResourceHandleMac to try to use stored credentials on new connections, if appropriate:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Only try the ProtectionSpace key'ed
          Credential if it does not match the initially used Credential.
        (WebCore::ResourceHandle::receivedCredential):
        (-[WebCoreSynchronousLoader connection:didReceiveAuthenticationChallenge:]): Only try the 
          ProtectionSpace key'ed Credential if it does not match the initially used Credential.
        (+[WebCoreSynchronousLoader loadRequest:allowStoredCredentials:returningResponse:error:]):

        Add base64-ability to CString:
        * platform/text/CString.cpp:
        (WebCore::CStringBuffer::base64Encode):
        (WebCore::CString::base64Encode):
        * platform/text/CString.h:
        (WebCore::CStringBuffer::create):
        (WebCore::CStringBuffer::CStringBuffer):

2009-09-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Fix <rdar://problem/6954546> Crashes in WebCore::RenderPart::setWidget below FrameLoader::loadPlugin.

        The calls to FrameLoader::requestObject within RenderPartObject::updateWidget can result in a plug-in
        being initialized.  This can run cause arbitrary JavaScript to run and may result in the RenderPartObject
        being detached from the render tree and destroyed, causing a crash like <rdar://problem/6954546>.

        No test is possible until <rdar://problem/7090444> is fixed.

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Ensure that we stay alive for the duration of plug-in initialization.

2009-09-12  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Add RenderWidgetProtector to simplify protecting a RenderWidget from destruction for the
        duration of a function.  Deploy it within RenderWidget.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetPosition): Use a RefPtr rather than explicitly
        ref'ing and deref'ing the node.
        * rendering/RenderWidget.h:
        * rendering/RenderWidgetProtector.h:
        (WebCore::RenderWidgetProtector::RenderWidgetProtector):
        (WebCore::RenderWidgetProtector::~RenderWidgetProtector):

2009-09-14  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        CodeGenerator.pm needs some cleaning up
        https://bugs.webkit.org/show_bug.cgi?id=29238

        * bindings/scripts/CodeGenerator.pm:
        (FindParentsRecursively): Removed; its functionality is now handled in
        AddMethodsConstantsAndAttributesFromParentClasses.
        (ForAllParents): New function that visits an interface's ancestors and
        invokes a callback for each one.
        (AddMethodsConstantsAndAttributesFromParentClasses): Simplified by using
        ForAllParents.
        (GetMethodsAndAttributesFromParentClasses): Ditto.
        (IDLFileForInterface): Factored out previous calls to ScanDirectory into
        this new function, which returns the filename containing a given IDL
        interface definition.
        (ParseInterface): Simplified by using IDLFileForInterface.
        (ScanDirectory): Removed in lieu of IDLFileForInterface.
        * bindings/scripts/CodeGeneratorV8.pm: Drop call to
        FindParentsRecursively and get the list of parents from the
        AddMethodsConstantsAndAttributesFromParentClasses call instead.

2009-09-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Assert hit when dropping a file in QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=29242

        Qt's implementation of DropData::asURL does not return a URL encoded string
        as expected.

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

2009-09-13  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, file was missed during TLS.cpp removal.

        * page/wx/FrameWx.cpp: Added.
        (WebCore::Frame::dragImageForSelection):

2009-09-13  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Oliver Hunt.

        Web Inspector: Add "New Style Rule" to the localizedStrings
        https://bugs.webkit.org/show_bug.cgi?id=29237

        * English.lproj/localizedStrings.js:

2009-09-13  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Implement filesystem functions.

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

        * platform/wx/FileSystemWx.cpp:
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::makeAllDirectories):
        (WebCore::pathByAppendingComponent):
        (WebCore::homeDirectoryPath):
        (WebCore::directoryName):

2009-09-12  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes for wx 2.9.

        * platform/wx/ScrollbarThemeWx.cpp:
        * platform/wx/wxcode/gtk/scrollbar_render.cpp:
        (wxGetGdkWindowForDC):

2009-09-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        [ES5] Implement Object.keys
        https://bugs.webkit.org/show_bug.cgi?id=29170

        Switch from getPropertyNames to getOwnPropertyNames, and provide custom
        getPropertyNames to DOMWindow, DOMWindowShell and QuarantinedObjectWrapper
        in order to ensure correct semantics are maintained.

        Test: fast/js/Object-keys.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getOwnPropertyNames):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertyNames):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertyNames):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::getPropertyNames):
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertyNames):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::getOwnPropertyNames):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::getPropertyNames):
        (JSC::RuntimeObjectImp::getOwnPropertyNames):
        * bridge/runtime_object.h:

2009-09-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29219
        Document.elementFromPoint() should take page scroll into consideration

        Test: fast/dom/elementFromPoint-relative-to-viewport.html

        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::caretRangeFromPoint):

2009-09-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=29217
        Document.caretRangeFromPoint should take the scroll offset into account before hit testing

        In accordance with the CSSOM View Module spec, Document.caretRangeFromPoint should interpret
        the point passed to it as relative to the viewport, not the document.

        Test: fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport.html

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

2009-09-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Added some manual tests to show WebGL in action
        https://bugs.webkit.org/show_bug.cgi?id=29215

        * manual-tests/webgl: Added.
        * manual-tests/webgl/Earth.html: Added.
        * manual-tests/webgl/ManyPlanetsDeep.html: Added.
        * manual-tests/webgl/SpinningBox.html: Added.
        * manual-tests/webgl/TeapotPerPixel.html: Added.
        * manual-tests/webgl/TeapotPerVertex.html: Added.
        * manual-tests/webgl/resources: Added.
        * manual-tests/webgl/resources/CanvasMatrix.js: Added.
        * manual-tests/webgl/resources/earthmap1k.jpg: Added.
        * manual-tests/webgl/resources/mars500x250.png: Added.
        * manual-tests/webgl/resources/teapot.obj: Added.
        * manual-tests/webgl/resources/utils3d.js: Added.
 
2009-09-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        aria definition role spelled wrong "defintion"
        https://bugs.webkit.org/show_bug.cgi?id=28840

        Test: accessibility/aria-slider-value-change.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::RoleEntry::):

2009-09-11  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Eric Seidel.

        Fixes an assert in Node::isFocusable which was causing crashes in certain cases.
        https://bugs.webkit.org/show_bug.cgi?id=29210

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

2009-09-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Added variants to uniform* and vertexAttrib* calls which take sequence<> in place of CanvasArray
        https://bugs.webkit.org/show_bug.cgi?id=29139
        
        I also added a data() call to each of the CanvasArray subclasses to give back a types pointer
        to the baseAddress().

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSCanvasRenderingContext3DCustom.cpp:
        (WebCore::toArray):
        (WebCore::):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        (WebCore::JSCanvasRenderingContext3D::uniform1fv):
        (WebCore::JSCanvasRenderingContext3D::uniform1iv):
        (WebCore::JSCanvasRenderingContext3D::uniform2fv):
        (WebCore::JSCanvasRenderingContext3D::uniform2iv):
        (WebCore::JSCanvasRenderingContext3D::uniform3fv):
        (WebCore::JSCanvasRenderingContext3D::uniform3iv):
        (WebCore::JSCanvasRenderingContext3D::uniform4fv):
        (WebCore::JSCanvasRenderingContext3D::uniform4iv):
        (WebCore::JSCanvasRenderingContext3D::uniformMatrix2fv):
        (WebCore::JSCanvasRenderingContext3D::uniformMatrix3fv):
        (WebCore::JSCanvasRenderingContext3D::uniformMatrix4fv):
        (WebCore::JSCanvasRenderingContext3D::vertexAttrib1fv):
        (WebCore::JSCanvasRenderingContext3D::vertexAttrib2fv):
        (WebCore::JSCanvasRenderingContext3D::vertexAttrib3fv):
        (WebCore::JSCanvasRenderingContext3D::vertexAttrib4fv):
        * html/canvas/CanvasByteArray.h:
        (WebCore::CanvasByteArray::data):
        * html/canvas/CanvasFloatArray.h:
        (WebCore::CanvasFloatArray::data):
        * html/canvas/CanvasIntArray.h:
        (WebCore::CanvasIntArray::data):
        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::uniform1fv):
        (WebCore::CanvasRenderingContext3D::uniform1iv):
        (WebCore::CanvasRenderingContext3D::uniform2fv):
        (WebCore::CanvasRenderingContext3D::uniform2iv):
        (WebCore::CanvasRenderingContext3D::uniform3fv):
        (WebCore::CanvasRenderingContext3D::uniform3iv):
        (WebCore::CanvasRenderingContext3D::uniform4fv):
        (WebCore::CanvasRenderingContext3D::uniform4iv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix2fv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix3fv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix4fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib1fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib2fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib3fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib4fv):
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasRenderingContext3D.idl:
        * html/canvas/CanvasShortArray.h:
        (WebCore::CanvasShortArray::data):
        * html/canvas/CanvasUnsignedByteArray.h:
        (WebCore::CanvasUnsignedByteArray::data):
        * html/canvas/CanvasUnsignedIntArray.h:
        (WebCore::CanvasUnsignedIntArray::data):
        * html/canvas/CanvasUnsignedShortArray.h:
        (WebCore::CanvasUnsignedShortArray::data):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):

2009-09-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Add ENABLE(WEB_SOCKETS) guards.
        https://bugs.webkit.org/show_bug.cgi?id=29174

        * bindings/v8/custom/V8WebSocketCustom.cpp:

2009-09-11  Eric Seidel  <eric@webkit.org>

        No review, rolling out r48229.
        http://trac.webkit.org/changeset/48229

        * WebCore.base.exp:
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        (WebCore::Clipboard::sourceOperation):
        * page/DragController.cpp:
        (WebCore::DragController::DragController):
        (WebCore::DragController::dragExited):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDHTMLDrag):
        (WebCore::DragController::startDrag):
        * page/DragController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::dragSourceMovedTo):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:

2009-09-11  Michelangelo De Simone  <micdesim@gmail.com>

        Fix the build.

        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):

2009-09-11  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=27456
        Added support for static validation of url in
        ValidityState, for url state inputs.
        From HTML5 specs:
        http://www.whatwg.org/specs/web-apps/current-work/#url-state

        Test: fast/forms/ValidityState-typeMismatch-url.html

        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):

2009-09-11  Evan Stade  <estade@chromium.org>

        Reviewed by Darin Adler.

        Revert r47992: Expose functions to change the focus ring color for
        Linux Chromium.

        As Darin Fisher has pointed out, there is a better way to do this.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::RenderThemeChromiumLinux):
        * rendering/RenderThemeChromiumLinux.h:

2009-09-11  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=29207
        Add checks for using WebCore JS context on secondary threads

        * bindings/js/JSDOMWindowBase.cpp: (WebCore::JSDOMWindowBase::commonJSGlobalData):
        Set the new debug-only mainThreadOnly flag.

2009-09-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        The inspector should have scope bars.
        https://bugs.webkit.org/show_bug.cgi?id=14353
        
        Add scope bars to the console, so the user can choose which category
        of messages they want to see (All, Errors, Warnings, Logs), and they
        can choose from one or more of {Errors, Warnings, Logs}.

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.createFilterElement):
        (WebInspector.ConsoleView):
        (WebInspector.ConsoleView.prototype._updateFilter):
        (WebInspector.ConsoleView.prototype.filter):
        (WebInspector.ConsoleView.prototype.attach):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-09-11  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Complex text doesn't show up with text stroking
        https://bugs.webkit.org/show_bug.cgi?id=28707

        Added extra NULL checks for HDC. This is the second fix for issue 28707,
        and the fix is similar to http://trac.webkit.org/changeset/45482.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/UniscribeHelper.cpp:
        (WebCore::UniscribeHelper::draw):

2009-09-11  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Make ElementTimeControl methods return void and not throw.
        https://bugs.webkit.org/show_bug.cgi?id=28831

        SVG 1.1 erratum:
        http://www.w3.org/2003/01/REC-SVG11-20030114-errata#elementtimecontrol-interface

        Test: svg/dom/smil-methods.svg

        * svg/ElementTimeControl.h: Change return type from bool to void and remove exception argument.
        * svg/ElementTimeControl.idl: Change return type from bool to void and remove raises claus.
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::beginElement): Change return type from bool to void and remove exception argument.
        (WebCore::SVGAnimationElement::beginElementAt): Ditto.
        (WebCore::SVGAnimationElement::endElement): Ditto.
        (WebCore::SVGAnimationElement::endElementAt): Ditto.
        * svg/SVGAnimationElement.h: Ditto.

2009-09-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Added support for texImage2D which takes CanvasArray
        https://bugs.webkit.org/show_bug.cgi?id=29191

        * bindings/js/JSCanvasRenderingContext3DCustom.cpp:
        (WebCore::JSCanvasRenderingContext3D::texImage2D):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::texImage2D):

2009-09-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Allow WebKit clients to opt out of high resolution timers on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=29192

        * page/Settings.cpp:
        (WebCore::Settings::setShouldUseHighResolutionTimers): Added.
        * page/Settings.h: Added getter/setter for shouldUseHighResolutionTimers.
        (WebCore::Settings::shouldUseHighResolutionTimers): Added.
        * platform/win/SharedTimerWin.cpp:
        (WebCore::setSharedTimerFireTime): Don't run high resolution timer code if it is disabled.

2009-09-11  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by Adam Barth.

        [v8] Share persistent context handles between events        
        Change events to use a single ref-counted shared persistent handle
        to the context in which to run, rather than create a new
        persistent handle for each new event which puts pressure on the
        gc.
        
        https://bugs.webkit.org/show_bug.cgi?id=29077

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/v8/SharedPersistent.h: Added.
        (WebCore::SharedPersistent::set):
        (WebCore::SharedPersistent::get):
        (WebCore::SharedPersistent::disposeHandle):
        (WebCore::SharedPersistent::create):
        (WebCore::SharedPersistent::SharedPersistent):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        (WebCore::V8IsolatedWorld::~V8IsolatedWorld):
        * bindings/v8/V8IsolatedWorld.h:
        (WebCore::V8IsolatedWorld::context):
        (WebCore::V8IsolatedWorld::shared_context):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::createWrapperFromCacheSlowCase):
        (WebCore::V8Proxy::isContextInitialized):
        (WebCore::V8Proxy::updateDocumentWrapperCache):
        (WebCore::V8Proxy::clearDocumentWrapperCache):
        (WebCore::V8Proxy::disposeContextHandles):
        (WebCore::V8Proxy::clearForClose):
        (WebCore::V8Proxy::clearForNavigation):
        (WebCore::V8Proxy::setSecurityToken):
        (WebCore::V8Proxy::updateDocument):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::shared_context):
        (WebCore::V8Proxy::mainWorldContext):
        (WebCore::V8Proxy::setContextDebugId):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::context):
        (WebCore::V8Proxy::shared_context):

2009-09-11  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        Create a real handle (one which would save an object from GC).
        https://bugs.webkit.org/show_bug.cgi?id=29150

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8ExternalString):

2009-09-11  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        Inline WebCore::v8String as it only invokes WebCore::v8ExternalString.
        https://bugs.webkit.org/show_bug.cgi?id=29152

        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8Binding.h:
        (WebCore::v8String):

2009-09-11  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        Changed URLs from qtsoftware.com to qt.nokia.com, as part of a general
        renaming.

        * ChangeLog-2009-06-16:

2009-09-11  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Use LIBS_PRIVATE on Qt/Mac.

        On the Mac, it means "-framework ApplicationServices -framework Carbon
        -framework AppKit" are no longer part of the default LIBS in Qt
        applications. This required a lot of fixes where we used Mac-specific
        code in Qt.

        * WebCore.pro:

2009-09-11  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Remove duplicated WK_{u,l}cfirst subs from CodeGeneratorV8.pm
        https://bugs.webkit.org/show_bug.cgi?id=29165

        * bindings/scripts/CodeGeneratorV8.pm: Remove WK_ucfirst and
        WK_lcfirst, and call the ones in CodeGenerator.pm instead.

2009-09-11  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=29132
        Symbian winscw compiler fails compiling WebCore/text/RegularExpression.cpp.

        Add RegularExpression class qualifier before Private.

        * platform/text/RegularExpression.cpp:

2009-09-11  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=29131
        Use a different variadic macro format for Symbian compiler.
        
        Use arg... instead of ellipsis in variadic macro.        

        * platform/StaticConstructors.h:

2009-09-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

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

        [Qt] Make the WebInspector available as a QWidget.

        * WebCore.pro:

2009-09-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed fix for the Web Inspector with the Qt build.

        Re-generate the Qt resource file by running
        WebKitTools/Scripts/generate-qt-inspector-resource

        * inspector/front-end/WebKit.qrc:

2009-09-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build, remove stray semicolon from function definition.

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

2009-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Detect mixed content
        https://bugs.webkit.org/show_bug.cgi?id=29003

        Detect some basic kinds of mixed content (HTTP content loaded into an
        HTTPS context).  This new detection logic isn't perfect, but it's a
        place to start.

        Tests: http/tests/security/mixedContent/about-blank-iframe-in-main-frame.html
               http/tests/security/mixedContent/data-url-iframe-in-main-frame.html
               http/tests/security/mixedContent/data-url-script-in-iframe.html
               http/tests/security/mixedContent/insecure-css-in-iframe.html
               http/tests/security/mixedContent/insecure-css-in-main-frame.html
               http/tests/security/mixedContent/insecure-iframe-in-iframe.html
               http/tests/security/mixedContent/insecure-iframe-in-main-frame.html
               http/tests/security/mixedContent/insecure-image-in-iframe.html
               http/tests/security/mixedContent/insecure-image-in-main-frame.html
               http/tests/security/mixedContent/insecure-script-in-iframe.html
               http/tests/security/mixedContent/redirect-http-to-https-iframe-in-main-frame.html
               http/tests/security/mixedContent/redirect-http-to-https-script-in-iframe.html
               http/tests/security/mixedContent/redirect-https-to-http-iframe-in-main-frame.html
               http/tests/security/mixedContent/redirect-https-to-http-script-in-iframe.html

        * loader/DocLoader.cpp:
        (WebCore::DocLoader::canRequest):
        (WebCore::DocLoader::requestResource):
        (WebCore::DocLoader::checkCacheObjectStatus):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isMixedContent):
        (WebCore::FrameLoader::checkIfDisplayInsecureContent):
        (WebCore::FrameLoader::checkIfRunInsecureContent):
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest):

2009-09-10  Mark Rowe  <mrowe@apple.com>

        Fix the Windows build.

        Restore platform/mock to the header search path after it was removed in r48270.

        * WebCore.vcproj/WebCoreCommon.vsprops:

2009-09-08  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Move the option to create a new style rule under the Styles' gear menu.

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

        Reviewed by Sam Weinig.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane): Add "New Style Rule" option to the gear menu.
        (WebInspector.StylesSidebarPane.prototype._update): Check instanceof BlankStylePropertiesSection instead.
        (WebInspector.StylesSidebarPane.prototype._changeSetting): Added. Keeps the color format setting selected
        while calling the correct action.
        (WebInspector.StylesSidebarPane.prototype._createNewRule): Creates a new section and edits the selector.
        (WebInspector.StylesSidebarPane.prototype.addBlankSection): Insert the section in a cleaner way.
        (WebInspector.StylesSidebarPane.prototype.removeSection): Added. Removes the passed in section.
        (WebInspector.StylesSidebarPane.prototype.appropriateSelectorForNode): Return an empty string if there is no node.
        (WebInspector.StylePropertiesSection.prototype.expand): Removed the check for _blank.
        (WebInspector.StylePropertiesSection.prototype.startEditingSelector): No need for the context, the original selector
        is remembered by the editing code.
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCancelled): Do nothing. The original text is already
        restored by the editing code.
        (WebInspector.BlankStylePropertiesSection): Call the StylePropertiesSection constructor with appropriate data.
        Remove event listener code.
        (WebInspector.BlankStylePropertiesSection.prototype.expand): Added. Does nothing to prevent expanding.
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted.callback): Correctly construct the
        WebInspector.CSSStyleDeclaration. Call editingSelectorCancelled instead of editingCancelled.
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted): Renamed from editingCommitted to
        override the base class.
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCancelled): Remove the section.
        (WebInspector.BlankStylePropertiesSection.prototype.makeNormal): Removed event listener code. Removed the delete lines
        since they were doing nothing (deleting nonexistent properties that exist only on the prototype.) Change prototypes at
        the end to correctly swtich to a real StylePropertiesSection.
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.editingCancelled): Ceck for null/undefined callbacks.
        (WebInspector.startEditing.editingCommitted): Ditto.

2009-09-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Fix comparison between signed and unsigned integer warnings
        https://bugs.webkit.org/show_bug.cgi?id=29162

        No functional change.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::findMethodIndex):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::duration):
        (WebCore::ImageDecoderQt::imageAtIndex):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):

2009-09-10  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha.

        Build fix for GTKafter r48267.

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

2009-09-08  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Dimitri Glazkov.

        Remove unneeded define for ActiveX.
        https://bugs.webkit.org/show_bug.cgi?id=29054

        * rendering/RenderPartObject.cpp:
        (WebCore::createClassIdToTypeMap):
        (WebCore::serviceTypeForClassId):
        (WebCore::RenderPartObject::updateWidget):

2009-09-10  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Don't copy IDL files in to the built framework.

        * WebCore.xcodeproj/project.pbxproj:

2009-09-10  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Eric Seidel.

        Implment Range.expand().
        https://bugs.webkit.org/show_bug.cgi?id=27632

        Test: fast/dom/Range/range-expand.html

        * dom/Range.cpp:
        (WebCore::Range::expand):
        * dom/Range.h:
        * dom/Range.idl:

2009-09-10  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket API implementation.
        https://bugs.webkit.org/show_bug.cgi?id=28038
        
        Add build systems for GNUmakefile.am, WebCore.xcodeproj and
        WebCore.vcproj.
        Add websockets directory and WebSocket.idl in qt build system.
        Tests will be landed once the code is completed and functional.

        * DerivedSources.cpp:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webSocket):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toWebSocket):
        * dom/EventTarget.h:
        * page/DOMWindow.idl:
        * websockets/WebSocket.cpp:
        (WebCore::ProcessWebSocketEventTask::create):
        (WebCore::ProcessWebSocketEventTask::performTask):
        (WebCore::ProcessWebSocketEventTask::ProcessWebSocketEventTask):
        (WebCore::isValidProtocolString):
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::addEventListener):
        (WebCore::WebSocket::removeEventListener):
        (WebCore::WebSocket::dispatchEvent):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):
        (WebCore::WebSocket::dispatchOpenEvent):
        (WebCore::WebSocket::dispatchMessageEvent):
        (WebCore::WebSocket::dispatchCloseEvent):
        * websockets/WebSocket.h:
        (WebCore::WebSocket::create):
        (WebCore::WebSocket::):
        (WebCore::WebSocket::setOnopen):
        (WebCore::WebSocket::onopen):
        (WebCore::WebSocket::setOnmessage):
        (WebCore::WebSocket::onmessage):
        (WebCore::WebSocket::setOnclose):
        (WebCore::WebSocket::onclose):
        (WebCore::WebSocket::toWebSocket):
        (WebCore::WebSocket::eventListeners):
        (WebCore::WebSocket::refEventTarget):
        (WebCore::WebSocket::derefEventTarget):
        * websockets/WebSocketChannel.cpp: Added.
        * websockets/WebSocketChannel.h: Added.
        * websockets/WebSocketChannelClient.h: Added.
        * websockets/WebSocketHandshake.cpp: Added.
        * websockets/WebSocketHandshake.h: Added.

2009-09-10  Albert J. Wong  <ajwong@chromium.org>

        No review, windows build fix only.
        
        Spurious semicolon causing parse error in chromium build on windows.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::buffered):

2009-09-10  Albert J. Wong  <ajwong@chromium.org>

        No review, build fix only.

        Adding in a missed include from the last patch that is breaking the
        chromium build.

        * rendering/RenderThemeChromiumMac.mm: include TimeRanges.h

2009-09-10  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Carlson.

        HTMLMediaElement buffered attribute should report a list of time ranges
        https://bugs.webkit.org/show_bug.cgi?id=29041

        Changed MediaPlayerPrivateInterface and MediaPlayer's definition to
        report a list of buffered time ranges as WebCore::TimeRanges. This
        change also got rid of the maxTimeBuffered() method.

        No new tests since this is a API change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::percentLoaded):
        Use MediaPlaier::buffered() instead of maxTimeBuffered().
        (WebCore::HTMLMediaElement::buffered):
        ditto.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::buffered):
        Use MediaPlayerPrivateInterface::buffered() instead of maxTimeBuffered().
        (WebCore::MediaPlayer::buffered):
        ditto.
        * platform/graphics/MediaPlayer.h:
        Removed maxTimeBuffered() and defines PassRefPtr<TimeRanges> buffered().
        * platform/graphics/MediaPlayerPrivate.h:
        ditto.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        Implements PassRefPtr<TimeRanges> buffered();
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        Removed maxTimeBuffered() and defines PassRefPtr<TimeRanges> buffered().
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        Removed maxTimeBuffered() and defines PassRefPtr<TimeRanges> buffered().
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::buffered):
        Implementation of buffered().
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        Implements PassRefPtr<TimeRanegs> buffered().
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:
        Removed maxTimeBuffered() and defines PassRefPtr<TimeRanges> buffered().
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        Implements PassRefPtr<TimeRanges> buffered().
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        Removed maxTimeBuffered() and defines PassRefPtr<TimeRanges> buffered().
        * platform/graphics/wince/MediaPlayerPrivateWince.h:
        ditto.
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        Use buffered() instead of maxTimeBuffered().
        * rendering/RenderThemeChromiumSkia.cpp:
        ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        ditto.

2009-09-10  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Make bindings generators more aware of IDL dependencies
        https://bugs.webkit.org/show_bug.cgi?id=29114

        Make the JS and ObjC bindings generators able to output dependency
        rules for DerivedSources.make to consume.  These rules make a given
        generated binding class file header, JSWhatever.h, depend on Whatever's
        ancestor interfaces.

        * DerivedSources.make: Pass --write-dependencies to generate-bindings.pl
        when generating JS and ObjC bindings.  Include dependency fies that are
        generated due to that.
        * bindings/scripts/CodeGenerator.pm: Make
        AddMethodsConstantsAndAttributesFromParentClasses accumulate a list of
        the ancestor interfaces that were visited.
        * bindings/scripts/CodeGeneratorJS.pm: Optionally write out a dependency
        file.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/generate-bindings.pl: Add a --write-dependencies
        option.

2009-09-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez and Dan Winship.

        Give all requests to libsoup, to let it queue, and schedule them
        itself, instead of throttling the number of requests in WebCore.

        * platform/network/ResourceRequestBase.cpp:
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):

2009-09-10  Jian Li  <jianli@chromium.org>

        Reviewed by Eric Seidel.

        [V8] Make XMLHttpRequest.send handle File object.
        https://bugs.webkit.org/show_bug.cgi?id=28924

        Test: http/tests/local/send-dragged-file.html

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-09-10  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Darin Adler.

        Use fastNew and fastDelete instead of operator new and delete for CSSSelector class. 
        https://bugs.webkit.org/show_bug.cgi?id=25930

        Change using of operator new to fastNew and operator delete to
        fastDeleteSkippingDestructor for CSSSelector class to avoid mismatched function call.

        This change fixes valgrind's 'mismatched free' notification.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::createFloatingSelector):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::adoptSelectorVector):

2009-09-10  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Geolocation does not correctly handle reentrant calls from callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=29040

        Tests: fast/dom/Geolocation/reentrant-error.html
               fast/dom/Geolocation/reentrant-success.html

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::handleError): Modified. Call sendError directly, clearing notifier lists before making callback.
        (WebCore::Geolocation::makeSuccessCallbacks): Modified. Call sendPosition directly, clearing notifier lists before making callback.
        * page/Geolocation.h: Modified. Deleted sendErrorToXX and sendPositionToXXX methods.

2009-09-10  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Eric Seidel.

        Fixes issue where focused elements did not get blur and focus events when the window was blurred and focused.
        https://bugs.webkit.org/show_bug.cgi?id=27105

        Test: fast/events/blur-focus-window-should-blur-focus-element.html

        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedNode):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActive):

2009-09-10  Adam Roben  <aroben@apple.com>

        Make the play/pause button in <video> controls indicate the button's
        action, not the movie state

        This matches the Mac behavior, iTunes, and many other media players.

        No test possible.

        Fixes <http://webkit.org/b/29126> Play/pause button in <video>
        controls shows the wrong image

        Reviewed by Eric Carlson.

        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart): Reversed when
        we show the play vs. pause artwork, so that the button reflects what
        will happen when you click it, rather than the current state of the
        movie.

2009-09-09  Steve Block  <steveblock@google.com>

        Reviewed by Maciej Stachowiak.

        Geolocation Coordinates::toString() prints bogus values for unspecified properties.
        https://bugs.webkit.org/show_bug.cgi?id=29080

        Test: fast/dom/Geolocation/position-string.html

        * GNUmakefile.am: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * WebCore.gypi: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * WebCore.pro: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * WebCore.vcproj/WebCore.vcproj: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * WebCore.xcodeproj/project.pbxproj: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * WebCoreSources.bkl: Modified. Removes Geoposition.cpp and Coordinates.cpp.
        * page/Coordinates.cpp: Removed.
        * page/Coordinates.h: Modified. Removes toString method.
        * page/Coordinates.idl: Modified. Removes toString method.
        * page/Geoposition.cpp: Removed.
        * page/Geoposition.h: Modified. Removes toString method.
        * page/Geoposition.idl: Modified. Removes toString method.

2009-09-09  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Correctly applies the Geolocation timeout property.
        https://bugs.webkit.org/show_bug.cgi?id=27256

        If a timeout is specified, the timer is started as soon as the location acquistion process starts.
        If a position fix is not obtained within the timeout interval, the position request is cancelled
        and the error callback (if specified) is invoked. If a position fix is obtained within the timeout
        interval, the timer is stopped. Permissions are then requested from the user if required. See
        http://www.w3.org/TR/geolocation-API/#position-options.

        Note that this logic means that the time required to obtain permissions from the user is not
        included in the timeout interval.

        Tests: fast/dom/Geolocation/timeout.html
               fast/dom/Geolocation/timeout-zero.html

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::GeoNotifier::GeoNotifier): Modified. Takes Geolocation object as parameter.
        (WebCore::Geolocation::GeoNotifier::hasZeroTimeout): Added. Determines whether this request has a zero timeout.
        (WebCore::Geolocation::GeoNotifier::startTimerIfNeeded): Renamed from startTimer. Starts the timer if a timeout was specified.
        (WebCore::Geolocation::GeoNotifier::timerFired): Modified. Calls the error callback if specified, and reports the timeout to the Geolocation object.
        (WebCore::Geolocation::getCurrentPosition): Modified. Calls maybeStartTimer when starting the location acquisition process.
        (WebCore::Geolocation::watchPosition): Modified. Calls maybeStartTimer when starting the location acquisition process.
        (WebCore::Geolocation::requestTimedOut): Added. Cancels a request when it times out.
        (WebCore::Geolocation::setIsAllowed): Modified. No longer starts timers.
        (WebCore::Geolocation::sendPosition): Modified. No longer stops timers.
        (WebCore::Geolocation::stopTimer): Added. Stops the timers for a vector of notifiers.
        (WebCore::Geolocation::stopTimersForOneShots): Added. Stops the timers for all one-shots.
        (WebCore::Geolocation::stopTimersForWatchers): Added. Stops the timers for all watchers.
        (WebCore::Geolocation::stopTimers): Added. Stops the timers for all requests.
        (WebCore::Geolocation::geolocationServicePositionChanged): Modfified. Stops the timers for all requests.
        * page/Geolocation.h: Modified.
        (WebCore::Geolocation::GeoNotifier::create): Modified. Takes Geolocation object as parameter.

2009-09-09  Chris Fleizach  <cfleizach@apple.com>

        AX notifications should be an ENUM type instead of strings
        https://bugs.webkit.org/show_bug.cgi?id=28963

        Build fix for Qt.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postPlatformNotification):

2009-09-08  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX notifications should be an ENUM type instead of strings
        https://bugs.webkit.org/show_bug.cgi?id=28963

        Moves AX notifications over to an ENUM type instead of
        using the actual string values that are used on OS X.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::selectedChildrenChanged):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedContents):
        * editing/mac/SelectionControllerMac.mm:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setInnerTextValue):

2009-09-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Missing checkout for getSVGDocument()
        https://bugs.webkit.org/show_bug.cgi?id=29064

        The V8 code generator didn't understand SVGCheckSecurityDocument.

        Tests: http/tests/security/xss-DENIED-getSVGDocument-iframe.html
               http/tests/security/xss-DENIED-getSVGDocument-object.html

        * bindings/scripts/CodeGeneratorV8.pm:

2009-09-09  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Make SVGStyleElement inherit from SVGLangSpace
        https://bugs.webkit.org/show_bug.cgi?id=29058

        Required by SVG 1.1 Second Edition:
        http://dev.w3.org/SVG/profiles/1.1F2/publish/styling.html#InterfaceSVGStyleElement

        Test: svg/dom/SVGStyleElement/style-langspace.html

        * svg/SVGStyleElement.cpp: Drop methods xmlspace and setXmlspace.
        (WebCore::SVGStyleElement::SVGStyleElement): Add SVGLangSpace()
        initializer.
        (WebCore::SVGStyleElement::parseMappedAttribute): Call
        parseMappedAttribute on SVGLangSpace.
        * svg/SVGStyleElement.h: Drop xmlspace and setXmlspace declarations.
        * svg/SVGStyleElement.idl: Drop xmlspace attribute and add SVGLangSpace
        as a superinterface.

2009-09-09  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Remove unnecessary includes and forward declarations in V8Proxy.h

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

        * bindings/v8/V8Proxy.h:

2009-07-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add more position constructors
        positionBeforeNode, positionAfterNode
        firstPositionInNode, lastPositionInNode
        https://bugs.webkit.org/show_bug.cgi?id=25494

        I also added a lastOffsetInNode and deployed it to a couple places.

        There are no callers to these new constructors yet, but those
        will be coming in future patches.

        * dom/Position.cpp:
        (WebCore::Position::computeOffsetInContainerNode):
        * dom/Position.h:
        (WebCore::positionBeforeNode):
        (WebCore::positionAfterNode):
        (WebCore::lastOffsetInNode):
        (WebCore::firstPositionInNode):
        (WebCore::lastPositionInNode):
        * editing/ApplyStyleCommand.cpp:
        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        * editing/htmlediting.cpp:
        (WebCore::lastOffsetForEditing):

2009-04-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename positionBeforeNode to positionInParentBeforeNode
        and positionAfterNode to positionInParentAfterNode
        in preparation for adding a positionBeforeNode
        which returns a neighbor-anchored position.
        https://bugs.webkit.org/show_bug.cgi?id=25494

        No functional changes, thus no tests.

        * dom/PositionConstructors.h:
        (WebCore::positionInParentBeforeNode):
        (WebCore::positionInParentAfterNode):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::operator Position):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionOutsideTabSpan):
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph):
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):
        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::deleteTarget):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::initializeStartEnd):
        (WebCore::updatePositionForNodeRemoval):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::positionAtStartOfInsertedContent):
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/htmlediting.cpp:
        (WebCore::firstEditablePositionAfterPositionInRoot):
        (WebCore::lastEditablePositionBeforePositionInRoot):
        (WebCore::rangeCompliantEquivalent):
        (WebCore::positionBeforeContainingSpecialElement):
        (WebCore::positionAfterContainingSpecialElement):
        (WebCore::positionBeforeTabSpan):

2009-04-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Re-organize position creation functions in preparation for adding more
        https://bugs.webkit.org/show_bug.cgi?id=25494

        Make position functions inline to avoid ref-churn.
        Remove startPosition/endPosition as they were only used in one place.

        No functional changes, thus no tests.

        * dom/Position.cpp:
        * dom/Position.h:
        (WebCore::positionBeforeNode):
        (WebCore::positionAfterNode):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::moveTo):
        * editing/TypingCommand.cpp:
        * editing/htmlediting.cpp:
        * editing/htmlediting.h:
        (WebCore::firstDeepEditingPositionForNode):
        (WebCore::lastDeepEditingPositionForNode):
        * rendering/RenderObject.cpp:

2009-09-09  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.
        
        [wx] Add wxSize conversions for IntSize.
        https://bugs.webkit.org/show_bug.cgi?id=29104

        * platform/graphics/IntSize.h:
        * platform/graphics/wx/IntSizeWx.cpp: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator wxSize):

2009-09-09  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by David Levin.
        
        Chromium uses its own config.h file that was forked from webkit's config.h.
        By merging in Chromium's defines, Chromium would again be able to use webkit's
        config.h.

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

        * config.h: Added chromium-specific defines. 

2009-09-09  Jens Alfke  <snej@chromium.org>

        Reviewed by Eric Seidel.

        Initialize DataTransfer's effectAllowed and dropEffect properties correctly
        according to HTML5 spec (sec. 7.9.2-7.9.3).
        https://bugs.webkit.org/show_bug.cgi?id=26700
        - At the start of a drag operation, the value of effectAllowed should be
          the string "uninitialized".
        - At end of dragstart handler, if effectAllowed hasn't been set yet, it
          should be set to "copy".
        - on dragenter and dragover event, dropEffect should be initialized to a
          default value based on the value of effectAllowed.
        - at end of dragenter and dragover the dropEffect should be set to "none"
          if the value set by the handler doesn't match the effectAllowed.
        - on dragleave event, dropEffect should be "none".
        - on drop event, dropEffect should be the previously negotiated value.

        Test: fast/events/drag-dropeffect.html

        * WebCore.base.exp:
            Added a parameter to EventHandler::dragSourceMovedTo.
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
            Initialize m_effectAllowed to "uninitialized".
        (WebCore::Clipboard::sourceOperation):
            Treat "uninitialized" as meaning no value has been set.
        * page/DragController.cpp:
        (WebCore::DragController::DragController):
            Initialize new member m_destinationDragOperation.
        (WebCore::DragController::dragExited):
            Set m_destinationDragOperation to none on dragExit.
        (WebCore::DragController::performDrag):
            Set m_destinationDragOperation to current dropEffect.
        (WebCore::DragController::dragEnteredOrUpdated):
            Make sure to clear the operation if drag source doesn't allow it.
        (WebCore::DragController::tryDHTMLDrag):
            Set a default value for the dst drag op before sending dragEnter/Over.
        (WebCore::DragController::startDrag):
            Clear m_destinationDragOperation at start of drag.
        * page/DragController.h:
        (WebCore::DragController::destinationDragOperation):
            Added new member m_destinationDragOperation, and its public getter.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragAndDrop):
            dropEffect should be 'none' during dropleave handler, per spec.
        (WebCore::EventHandler::dragSourceMovedTo):
            Added DragOperation parameter, so the handler sees the current dropEffect.
        (WebCore::EventHandler::handleDrag):
            Assume DragOperationEvery for non-DHTML drags.
        * page/EventHandler.h:
            Added DragOperation parameter to dragSourceMovedTo().

2009-09-09  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        1. Adding support/bindings for read-only transactions.
        2. Disallowing the SQLITE_*_VIEW and REINDEX operations in the
        private browsing mode.
        3. Adding an authorizer test.

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

        Test: storage/test-authorizer.html

        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::createTransaction): Parses all arguments and executes a
        transaction.
        (WebCore::JSDatabase::transaction): Refactored to use
        createTransaction().
        (WebCore::JSDatabase::readTransaction): Added to execute read-only
        transactions using createTransaction().
        * bindings/v8/custom/V8CustomBinding.h: Added the binding for
        Database::readTransaction().
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::createTransaction): Parses all arguments and executes a
        transaction.
        (WebCore::transaction): Refactored to use createTransaction().
        (WebCore::readTransaction): Added to execute read-only
        transactions using createTransaction().
        * storage/Database.cpp:
        (WebCore::Database::transaction): Added support for read-only
        transactions.
        * storage/Database.h: Added support for read-only transactions.
        * storage/Database.idl: Added support for read-only transactions.
        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::createTempTable): Make it obvious
        that the statement will be denied in private browsing mode and
        read-only transactions.
        (WebCore::DatabaseAuthorizer::dropTempTable): Same.
        (WebCore::DatabaseAuthorizer::createTempIndex): Same.
        (WebCore::DatabaseAuthorizer::dropTempIndex): Same.
        (WebCore::DatabaseAuthorizer::createTempTrigger): Same.
        (WebCore::DatabaseAuthorizer::dropTempTrigger): Same.
        (WebCore::DatabaseAuthorizer::createView): Deny in private
        browsing mode and read-only transactions.
        (WebCore::DatabaseAuthorizer::createTempView): Same.
        (WebCore::DatabaseAuthorizer::dropView): Same.
        (WebCore::DatabaseAuthorizer::dropTempView): Same.
        (WebCore::DatabaseAuthorizer::allowReindex): Same.
        * storage/DatabaseAuthorizer.h:
        * storage/SQLTransaction.cpp: Added support for read-only
        transactions.
        (WebCore::SQLTransaction::create):
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::executeSQL):
        (WebCore::SQLTransaction::acquireLock):
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::acquireLock): Added a new
        parameter in preparation for a change that will allow multiple
        read-only transactions on the same DB to run concurrently.
        * storage/SQLTransactionCoordinator.h:

2009-09-09  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=29102, add support for user stylesheet injection.  This is similar
        to user script injection but allows for user stylesheets to be added.  The stylesheets are applied immediately
        to all Frames in the PageGroup.

        Added userscripts/simple-stylesheet.html test case.

        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        * css/CSSStyleSelector.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::attach):
        (WebCore::Document::pageGroupUserSheets):
        (WebCore::Document::clearPageGroupUserSheets):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::attach):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheet):
        (WebCore::PageGroup::removeUserContentForWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/PageGroup.h:
        (WebCore::PageGroup::userStyleSheets):
        * page/UserStyleSheet.h: Added.
        (WebCore::UserStyleSheet::UserStyleSheet):
        (WebCore::UserStyleSheet::source):
        (WebCore::UserStyleSheet::url):
        (WebCore::UserStyleSheet::patterns):
        (WebCore::UserStyleSheet::worldID):
        * page/UserStyleSheetTypes.h: Added.

2009-09-09  Carol Szabo  <carol.szabo@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] CSS Style -webkit-box-shadow is not rendered correctly on
        Qt platform
        https://bugs.webkit.org/show_bug.cgi?id=23291

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
         Added the ability to draw shadows for all these curves.

2009-09-09  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Add the qwebgraphicsitem.cpp to the build system.

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

        * WebCore.pro:

2009-09-09  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx port] Move functions in TemporaryLinkStubs.cpp out to files where
        they belong.

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

        * editing/wx/EditorWx.cpp:
        (WebCore::Editor::showColorPanel):
        (WebCore::Editor::showFontPanel):
        (WebCore::Editor::showStylesPanel):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        * platform/graphics/wx/IconWx.cpp: Added.
        (WebCore::Icon::~Icon):
        (WebCore::Icon::createIconForFile):
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):
        * platform/graphics/wx/ImageWx.cpp:
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::drawPattern):
        * platform/wx/CursorWx.cpp:
        (WebCore::moveCursor):
        * platform/wx/FileChooserWx.cpp: Added.
        (WebCore::FileChooser::basenameForWidth):
        * platform/wx/KURLWx.cpp: Added.
        (WebCore::KURL::fileSystemPath):
        * platform/wx/SSLKeyGeneratorWx.cpp: Added.
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/wx/SearchPopupMenuWx.cpp: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/wx/SharedBufferWx.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/wx/SystemTimeWx.cpp: Added.
        (WebCore::userIdleTime):
        * platform/wx/TemporaryLinkStubs.cpp: Removed.
        * platform/wx/TextBreakIteratorInternalICUWx.cpp: Added.
        (WebCore::currentSearchLocaleID):
        (WebCore::currentTextBreakLocaleID):
        * platform/wx/WidgetWx.cpp:
        (WebCore::Widget::setIsSelected):

2009-09-09  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Geolocation incorrectly calls error callback in case of exception in success callback.
        https://bugs.webkit.org/show_bug.cgi?id=27255

        Test: fast/dom/Geolocation/callback-exception.html

        * bindings/js/JSCustomPositionCallback.cpp: Modified.
        (WebCore::JSCustomPositionCallback::handleEvent): Modified. Removed raisedException out param.
        * bindings/js/JSCustomPositionCallback.h: Modified. Removed raisedException out param from handleEvent method and made handleEvent private.
        * bindings/js/JSCustomPositionErrorCallback.h: Modified. Made handleEvent private.
        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::sendPosition): Modified. No longer call error callback in case of exception in success callback.
        * page/PositionCallback.h: Modified. Removed raisedException out param from handleEvent method.

2009-09-09  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        When Geolocation permission is denied, stops watches as well as one-shots.
        https://bugs.webkit.org/show_bug.cgi?id=28305.

        Tests: fast/dom/Geolocation/watch.html
               fast/dom/Geolocation/permission-denied-stops-watches.html

        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::setIsAllowed): Modified. Marks the permission error as fatal.
        (WebCore::Geolocation::handleError): Modified. If the error is fatal, stops watchers as well as one-shots.
        * page/PositionError.h: Modified.
        (WebCore::PositionError::setIsFatal): Added. Marks an error as fatal.
        (WebCore::PositionError::isFatal): Added. Determines whether an error is fatal.

2009-09-09  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Bug 28964 -  [Chromium] ChromiumDataObject should have getter/setter interface

        Added getter/setter methods and trivial inline implementations for each.
        (Note that they are not yet actually used.)
        Once the Chromium code is changed to use them instead of directly accessing the
        member variables, the member variables should be made private and cleaned up.

        No new tests (no functional behavior changed).

        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::mainURL):
        (WebCore::ChromiumDataObject::setMainURL):
        (WebCore::ChromiumDataObject::mainURLTitle):
        (WebCore::ChromiumDataObject::setMainURLTitle):
        (WebCore::ChromiumDataObject::textPlain):
        (WebCore::ChromiumDataObject::setTextPlain):
        (WebCore::ChromiumDataObject::textHTML):
        (WebCore::ChromiumDataObject::setTextHTML):
        (WebCore::ChromiumDataObject::htmlBaseURL):
        (WebCore::ChromiumDataObject::setHTMLBaseURL):
        (WebCore::ChromiumDataObject::content):
        (WebCore::ChromiumDataObject::releaseContent):
        (WebCore::ChromiumDataObject::setContent):
        (WebCore::ChromiumDataObject::contentFileExtension):
        (WebCore::ChromiumDataObject::setContentFileExtension):
        (WebCore::ChromiumDataObject::contentFileName):
        (WebCore::ChromiumDataObject::setContentFileName):
        (WebCore::ChromiumDataObject::fileNames):
        (WebCore::ChromiumDataObject::setFileNames):
        (WebCore::ChromiumDataObject::takeFileNames):

2009-09-08  Pat Bradley  <vincent.bradley@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] locale date displays incorrect date format in symbian.
        https://bugs.webkit.org/show_bug.cgi?id=29032

        strftime() in Symbian does not support #
        Layout tests cannot be run on Symbian yet, so they are not updated.

        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):

2009-09-09  Rohini Ananth <rohini.ananth@nokia.com>

        Reviewed by Simon Hausmann.

        NPAPI Plugin NPP_AsFile not working on Qt Webkit
        https://bugs.webkit.org/show_bug.cgi?id=29068

        * platform/qt/FileSystemQt.cpp:
        (WebCore::openTemporaryFile)
        Autoremove property of QTemporaryFile has been set to false. Hence closeFile() just closes and does not delete the file.
        This solves the deletion of created temp file in PluginStream::destroyStream() before passing to plugin in NPP_AsFile.

2009-09-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by NOBODY (Build fix).

        Remove a few incorrect changes I left in.

        * bindings/scripts/CodeGeneratorJS.pm:

2009-09-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Support numeric index getters in bindings
        https://bugs.webkit.org/show_bug.cgi?id=29067

        Add HasNumericIndexGetter to indicate a non-custom getter that
        returns a number.  The numeric index getter also uses PropertySlot's
        setValue rather than setCustomIndex to avoid an additional indirect
        call.

        * bindings/js/JSCanvasByteArrayCustom.cpp:
        * bindings/js/JSCanvasFloatArrayCustom.cpp:
        * bindings/js/JSCanvasIntArrayCustom.cpp:
        * bindings/js/JSCanvasShortArrayCustom.cpp:
        * bindings/js/JSCanvasUnsignedByteArrayCustom.cpp:
        * bindings/js/JSCanvasUnsignedIntArrayCustom.cpp:
        * bindings/js/JSCanvasUnsignedShortArrayCustom.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/canvas/CanvasByteArray.h:
        (WebCore::CanvasByteArray::item):
        * html/canvas/CanvasByteArray.idl:
        * html/canvas/CanvasFloatArray.h:
        (WebCore::CanvasFloatArray::get):
        (WebCore::CanvasFloatArray::item):
        * html/canvas/CanvasFloatArray.idl:
        * html/canvas/CanvasIntArray.h:
        (WebCore::CanvasIntArray::get):
        (WebCore::CanvasIntArray::item):
        * html/canvas/CanvasIntArray.idl:
        * html/canvas/CanvasPixelArray.idl:
        * html/canvas/CanvasShortArray.h:
        (WebCore::CanvasShortArray::get):
        (WebCore::CanvasShortArray::item):
        * html/canvas/CanvasShortArray.idl:
        * html/canvas/CanvasUnsignedByteArray.h:
        (WebCore::CanvasUnsignedByteArray::get):
        (WebCore::CanvasUnsignedByteArray::item):
        * html/canvas/CanvasUnsignedByteArray.idl:
        * html/canvas/CanvasUnsignedIntArray.h:
        (WebCore::CanvasUnsignedIntArray::get):
        (WebCore::CanvasUnsignedIntArray::item):
        * html/canvas/CanvasUnsignedIntArray.idl:
        * html/canvas/CanvasUnsignedShortArray.h:
        (WebCore::CanvasUnsignedShortArray::item):
        * html/canvas/CanvasUnsignedShortArray.idl:

2009-09-08  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for 2.8.

        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp:
        (wxRenderer_DrawScrollbar):

2009-09-08  Jens Alfke  <snej@chromium.org>

        Reviewed by Eric Seidel.

        In Mac Chromium, clicking below the last line of an editable area (textarea or
        contenteditable) should put the caret at the end of the last line, as in Mac Safari.

        Tests: LayoutTests/editing/selection/click-in-margins-inside-editable-div.html
               LayoutTests/editing/selection/click-in-padding-with-multiple-line-boxes.html

        * page/Settings.cpp:
        (WebCore::Settings::Settings): Change #if PLATFORM_MAC to be Mac-Chrome-inclusive.

2009-09-08  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Mark Rowe.

        Make sure not to do an early return when a data URL stylesheet successfully loads.  We need to still
        clear the old cached sheet out of all existing Frames.  Fixes the data URL stylesheet layout test failure.

        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):

2009-09-08  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * dom/Document.idl:

2009-09-08  Kevin Ollivier  <kevino@theolliviers.com>

        More robust wx build fix for 2.9.

        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp:
        (wxRenderer_DrawScrollbar):

2009-09-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Timothy Hatcher.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27046
        Implement CSSOM DocumentView.caretRangeFromPoint

        Tests: fast/dom/Document/CaretRangeFromPoint/basic.html
               fast/dom/Document/CaretRangeFromPoint/replace-element.html

        * dom/Document.cpp:
        (WebCore::Document::caretRangeFromPoint):
        * dom/Document.h:
        * dom/Document.idl:

2009-09-08  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix, generate derived sources earlier in order to make sure
        they're found by the build system when generating the list of sources to build.

        * wscript:

2009-09-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        <iterator> include in V8Proxy.h is spurious and causing ObjC compile issues for Chromium.

        Test: Chromium mac canary build is fixed.

        * bindings/v8/V8Proxy.h: Remove <iterator> include.

2009-09-08  Xan Lopez  <xlopez@igalia.com>

        Unreviewed attempt to fix the GTKbuild.

        * GNUmakefile.am:

2009-09-04  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28987, make the Document cache the page's user stylesheet in
        parsed form.  Allows the sheet to survive across destruction/re-creation of the CSSStyleSelector.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        * css/CSSStyleSelector.h:
        * dom/Document.cpp:
        (WebCore::Document::attach):
        (WebCore::Document::pageUserSheet):
        (WebCore::Document::clearPageUserSheet):
        (WebCore::Document::recalcStyleSelector):
        * dom/Document.h:
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::attach):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        * page/Settings.cpp:
        (WebCore::Settings::setUserStyleSheetLocation):

2009-09-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed buildfix.

        Fix Qt build after 48167, by adding the new cpp/h files
        added to WebCore.gypi to WebCore.pro as well.

        * WebCore.pro:

2009-09-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        should not pass URI fragments to libsoup
        https://bugs.webkit.org/show_bug.cgi?id=28687

        Strip the fragment from the URI before passing it to soup, since
        it forwards it to servers in some cases (like when using a proxy)
        which confuses them and makes them return 403/404.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):
        (WebCore::):

2009-09-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Add QGraphicsScene events support to the Qt platform events.

        * platform/PlatformMouseEvent.h:
        * platform/PlatformWheelEvent.h:
        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/WheelEventQt.cpp:
        (WebCore::PlatformWheelEvent::applyDelta):
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-09-08  Michael Nordman  <michaeln@google.com>

        Reviewed by Eric Seidel.

        [Chromium] Cleanup: remove a few deprecated methods.
        https://bugs.webkit.org/show_bug.cgi?id=28960

        No new tests, just syntactic sugar.

        * platform/network/chromium/ResourceRequest.h:
        * platform/network/chromium/ResourceResponse.h:

2009-09-08  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Ariya Hidayat.

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

        [Qt] make npapi.h compile in winscw compiler.

        Add XP_SYMBIAN macro to identify Symbian OS; this macro should be used for Symbian
        specific changes in npapi.h.
        Undefine XP_WIN when building for Symbian to avoid including Windows specific code.

        * bridge/npapi.h:

2009-09-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        Web Inspector assertion failure related to marking
        https://bugs.webkit.org/show_bug.cgi?id=28997

        When wrapping the callback the JSInspectorCallbackWrapper creator was using
        inheritorID for the prototype structure which is unsafe for anything other
        than a pure JS object.  Instead we now create a new structure, which while
        inefficient is not problematic as this code is not hit frequently.

        * bindings/js/JSInspectorCallbackWrapper.cpp:
        (WebCore::JSInspectorCallbackWrapper::wrap):

2009-09-08  Kelly Norton  <knorton@google.com>

        Reviewed by Dimitri Glazkov.

        Add missing extension to the file entry in WebCore.vcproj.

        * WebCore.vcproj/WebCore.vcproj: Added "cpp".

2009-09-08  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        dataTransfer.types() should not return Files if file list is empty in the clipboard.
        https://bugs.webkit.org/show_bug.cgi?id=28891

        We change the behavior to handle the empty file list in order to match the spec.

        Tested by clipboard-file-access.html.

        * platform/mac/ClipboardMac.mm:
        (WebCore::addHTMLClipboardTypesForCocoaType):
        (WebCore::ClipboardMac::types):

2009-09-08  Steve VanDeBogart  <vandebo@chromium.org>

        Reviewed by Eric Seidel.

        Handle middle click in Chromium like QT
        https://bugs.webkit.org/show_bug.cgi?id=28696

        Tested by middle-click-onpaste.html.

        * platform/Pasteboard.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::getData):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::isSelectionMode):
        (WebCore::Pasteboard::setSelectionMode):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/PasteboardPrivate.h:
        (WebCore::PasteboardPrivate::):

2009-09-08  Kelly Norton  <knorton@google.com>

        Reviewed by Eric Seidel.

        WebInspector: Adds a timeline agent to InspectorController that collects
        high-level timing data about event dispatch, layout, painting and HTML
        parsing and makes it available to Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=25503

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Document.h:
        (WebCore::Document::inspectorTimelineAgent):
        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::write):
        * inspector/DOMDispatchTimelineItem.cpp: Added.
        (WebCore::DOMDispatchTimelineItem::DOMDispatchTimelineItem):
        (WebCore::DOMDispatchTimelineItem::convertToScriptObject):
        * inspector/DOMDispatchTimelineItem.h: Added.
        (WebCore::DOMDispatchTimelineItem::~DOMDispatchTimelineItem):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::enableTimeline):
        (WebCore::InspectorBackend::disableTimeline):
        (WebCore::InspectorBackend::timelineEnabled):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::resetScriptObjects):
        (WebCore::InspectorController::enableTimeline):
        (WebCore::InspectorController::disableTimeline):
        (WebCore::InspectorController::timelineEnabled):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::timelineAgent):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::timelineWasEnabled):
        (WebCore::InspectorFrontend::timelineWasDisabled):
        (WebCore::InspectorFrontend::addItemToTimeline):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorTimelineAgent.cpp: Added.
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::willDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::didDispatchDOMEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::reset):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::currentTimeInMilliseconds):
        (WebCore::InspectorTimelineAgent::sessionTimeInMilliseconds):
        * inspector/InspectorTimelineAgent.h: Added.
        * inspector/TimelineItem.cpp: Added.
        (WebCore::TimelineItem::TimelineItem):
        (WebCore::TimelineItem::addToTimeline):
        (WebCore::TimelineItem::convertToScriptObject):
        (WebCore::TimelineItem::convertChildrenToScriptArray):
        (WebCore::TimelineItem::addChildItem):
        * inspector/TimelineItem.h: Added.
        (WebCore::):
        (WebCore::TimelineItem::~TimelineItem):
        (WebCore::TimelineItem::previous):
        (WebCore::TimelineItem::releasePrevious):
        (WebCore::TimelineItem::setEndTime):
        (WebCore::TimelineItem::type):
        * inspector/front-end/TimelineAgent.js: Added.
        (WebInspector.TimelineAgent):
        (WebInspector.addItemToTimeline):
        (WebInspector.timelineWasEnabled):
        (WebInspector.timelineWasDisabled):
        * inspector/front-end/inspector.html:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        (WebCore::FrameView::inspectorTimelineAgent):
        * page/Page.cpp:
        (WebCore::Page::inspectorTimelineAgent):
        * page/Page.h:

2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix unused variable warnings
        https://bugs.webkit.org/show_bug.cgi?id=29018

        No functional change, no tests.

        * history/qt/HistoryItemQt.cpp:
        (WebCore::HistoryItem::restoreState):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::putImageData):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMenuList):

2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Use the declaration order in initializer lists
        https://bugs.webkit.org/show_bug.cgi?id=29017

        No functional change, no new tests.

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):

2009-09-08  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Implement ValidityState::typeMismatch() for <input type=number>.
        https://bugs.webkit.org/show_bug.cgi?id=28934

        Test: fast/forms/ValidityState-typeMismatch-number.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::formStringToDouble):
        * html/HTMLInputElement.h:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):
        * html/ValidityState.h:

2009-09-08  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Gustavo Noronha.

        [Gtk] Another attempt of a buildfix.

        * GNUmakefile.am: Modified. Remove some extra IDL files added in r48153.

2009-09-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Make cursor set cleaner in QtWebKit Api: eliminate SetCursorEvent hack.
        https://bugs.webkit.org/show_bug.cgi?id=28865

        Save the QCursor as a property in WidgetQt::setCursor
        and actually change the cursor in QWebView::event() by making use
        of the QEvent::DynamicPropertyChange event type.
        When unsetCursor() is called on the QWidget we can fallback to
        the cursor set by WebCore.

        Patch by Kenneth Rohde Christiansen <kenneth@webkit.org> and
                 Antonio Gomes <antonio.gomes@openbossa.org> on 2009-09-07

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):

2009-09-08  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Gustavo Noronha.

        [Gtk] Buildfix for build error introduced in r48150.

        * GNUmakefile.am: Modified. Added missing IDL files.

2009-09-08  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Buildfix. Build error caused by r48150.

        * WebCore.pro: missing IDL files added

2009-09-07  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Update Canvas 3D implementation to match spec
        https://bugs.webkit.org/show_bug.cgi?id=29010

        This adds several new CanvasXXXArray classes each of which has a custom constructor
        and custom getters and setters. Also changed CanvasRenderingContext3D and GraphicsContext3D
        to match the new and changed API.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasArrayBufferConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasArrayBufferConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasByteArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasByteArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasByteArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasFloatArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasFloatArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasFloatArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasIntArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasIntArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasIntArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasRenderingContext3DCustom.cpp:
        (WebCore::JSCanvasRenderingContext3D::bufferData):
        (WebCore::JSCanvasRenderingContext3D::bufferSubData):
        (WebCore::JSCanvasRenderingContext3D::texImage2D):
        (WebCore::JSCanvasRenderingContext3D::texSubImage2D):
        * bindings/js/JSCanvasShortArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasShortArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasShortArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedByteArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedByteArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedByteArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedIntArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedIntArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedIntArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedShortArrayConstructor.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedShortArrayConstructor.h: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSCanvasUnsignedShortArrayCustom.cpp: Added with properties svn:eol-style and svn:mime-type.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::canvasArrayBuffer):
        (WebCore::JSDOMWindow::canvasByteArray):
        (WebCore::JSDOMWindow::canvasUnsignedByteArray):
        (WebCore::JSDOMWindow::canvasIntArray):
        (WebCore::JSDOMWindow::canvasUnsignedIntArray):
        (WebCore::JSDOMWindow::canvasShortArray):
        (WebCore::JSDOMWindow::canvasUnsignedShortArray):
        (WebCore::JSDOMWindow::canvasFloatArray):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::paint):
        * html/canvas/CanvasArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasArray.idl: Added.
        * html/canvas/CanvasArrayBuffer.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasArrayBuffer.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasArrayBuffer.idl: Added.
        * html/canvas/CanvasByteArray.cpp:
        * html/canvas/CanvasByteArray.h:
        * html/canvas/CanvasByteArray.idl:
        * html/canvas/CanvasFloatArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasFloatArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasFloatArray.idl: Added.
        * html/canvas/CanvasIntArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasIntArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasIntArray.idl: Added.
        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::CanvasRenderingContext3D):
        (WebCore::CanvasRenderingContext3D::markContextChanged):
        (WebCore::CanvasRenderingContext3D::beginPaint):
        (WebCore::CanvasRenderingContext3D::endPaint):
        (WebCore::CanvasRenderingContext3D::reshape):
        (WebCore::CanvasRenderingContext3D::sizeInBytes):
        (WebCore::CanvasRenderingContext3D::bindTexture):
        (WebCore::CanvasRenderingContext3D::bufferData):
        (WebCore::CanvasRenderingContext3D::bufferSubData):
        (WebCore::CanvasRenderingContext3D::checkFramebufferStatus):
        (WebCore::CanvasRenderingContext3D::clear):
        (WebCore::CanvasRenderingContext3D::createBuffer):
        (WebCore::CanvasRenderingContext3D::createFramebuffer):
        (WebCore::CanvasRenderingContext3D::createTexture):
        (WebCore::CanvasRenderingContext3D::createProgram):
        (WebCore::CanvasRenderingContext3D::createRenderbuffer):
        (WebCore::CanvasRenderingContext3D::createShader):
        (WebCore::CanvasRenderingContext3D::deleteBuffer):
        (WebCore::CanvasRenderingContext3D::deleteFramebuffer):
        (WebCore::CanvasRenderingContext3D::deleteProgram):
        (WebCore::CanvasRenderingContext3D::deleteRenderbuffer):
        (WebCore::CanvasRenderingContext3D::deleteShader):
        (WebCore::CanvasRenderingContext3D::deleteTexture):
        (WebCore::CanvasRenderingContext3D::drawArrays):
        (WebCore::CanvasRenderingContext3D::drawElements):
        (WebCore::CanvasRenderingContext3D::getBoolean):
        (WebCore::CanvasRenderingContext3D::getBooleanv):
        (WebCore::CanvasRenderingContext3D::getBufferParameteri):
        (WebCore::CanvasRenderingContext3D::getBufferParameteriv):
        (WebCore::CanvasRenderingContext3D::getFloat):
        (WebCore::CanvasRenderingContext3D::getFloatv):
        (WebCore::CanvasRenderingContext3D::getFramebufferAttachmentParameteri):
        (WebCore::CanvasRenderingContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::CanvasRenderingContext3D::getInteger):
        (WebCore::CanvasRenderingContext3D::getIntegerv):
        (WebCore::CanvasRenderingContext3D::getProgrami):
        (WebCore::CanvasRenderingContext3D::getProgramiv):
        (WebCore::CanvasRenderingContext3D::getProgramInfoLog):
        (WebCore::CanvasRenderingContext3D::getRenderbufferParameteri):
        (WebCore::CanvasRenderingContext3D::getRenderbufferParameteriv):
        (WebCore::CanvasRenderingContext3D::getShaderi):
        (WebCore::CanvasRenderingContext3D::getShaderiv):
        (WebCore::CanvasRenderingContext3D::getShaderInfoLog):
        (WebCore::CanvasRenderingContext3D::getShaderSource):
        (WebCore::CanvasRenderingContext3D::getTexParameterf):
        (WebCore::CanvasRenderingContext3D::getTexParameterfv):
        (WebCore::CanvasRenderingContext3D::getTexParameteri):
        (WebCore::CanvasRenderingContext3D::getTexParameteriv):
        (WebCore::CanvasRenderingContext3D::getUniformf):
        (WebCore::CanvasRenderingContext3D::getUniformfv):
        (WebCore::CanvasRenderingContext3D::getUniformi):
        (WebCore::CanvasRenderingContext3D::getUniformiv):
        (WebCore::CanvasRenderingContext3D::getUniformLocation):
        (WebCore::CanvasRenderingContext3D::getVertexAttribf):
        (WebCore::CanvasRenderingContext3D::getVertexAttribfv):
        (WebCore::CanvasRenderingContext3D::getVertexAttribi):
        (WebCore::CanvasRenderingContext3D::getVertexAttribiv):
        (WebCore::CanvasRenderingContext3D::getVertexAttribOffset):
        (WebCore::CanvasRenderingContext3D::texImage2D):
        (WebCore::CanvasRenderingContext3D::texParameterf):
        (WebCore::CanvasRenderingContext3D::texParameteri):
        (WebCore::CanvasRenderingContext3D::texSubImage2D):
        (WebCore::CanvasRenderingContext3D::uniform1f):
        (WebCore::CanvasRenderingContext3D::uniform1fv):
        (WebCore::CanvasRenderingContext3D::uniform1i):
        (WebCore::CanvasRenderingContext3D::uniform1iv):
        (WebCore::CanvasRenderingContext3D::uniform2f):
        (WebCore::CanvasRenderingContext3D::uniform2fv):
        (WebCore::CanvasRenderingContext3D::uniform2i):
        (WebCore::CanvasRenderingContext3D::uniform2iv):
        (WebCore::CanvasRenderingContext3D::uniform3f):
        (WebCore::CanvasRenderingContext3D::uniform3fv):
        (WebCore::CanvasRenderingContext3D::uniform3i):
        (WebCore::CanvasRenderingContext3D::uniform3iv):
        (WebCore::CanvasRenderingContext3D::uniform4f):
        (WebCore::CanvasRenderingContext3D::uniform4fv):
        (WebCore::CanvasRenderingContext3D::uniform4i):
        (WebCore::CanvasRenderingContext3D::uniform4iv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix2fv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix3fv):
        (WebCore::CanvasRenderingContext3D::uniformMatrix4fv):
        (WebCore::CanvasRenderingContext3D::useProgram):
        (WebCore::CanvasRenderingContext3D::validateProgram):
        (WebCore::CanvasRenderingContext3D::vertexAttrib1f):
        (WebCore::CanvasRenderingContext3D::vertexAttrib1fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib2f):
        (WebCore::CanvasRenderingContext3D::vertexAttrib2fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib3f):
        (WebCore::CanvasRenderingContext3D::vertexAttrib3fv):
        (WebCore::CanvasRenderingContext3D::vertexAttrib4f):
        (WebCore::CanvasRenderingContext3D::vertexAttrib4fv):
        (WebCore::CanvasRenderingContext3D::vertexAttribPointer):
        (WebCore::CanvasRenderingContext3D::viewport):
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasRenderingContext3D.idl:
        * html/canvas/CanvasShortArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasShortArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasShortArray.idl: Added.
        * html/canvas/CanvasTexture.cpp:
        (WebCore::CanvasTexture::CanvasTexture):
        * html/canvas/CanvasTexture.h:
        (WebCore::CanvasTexture::isCubeMapRWrapModeInitialized):
        (WebCore::CanvasTexture::setCubeMapRWrapModeInitialized):
        * html/canvas/CanvasUnsignedByteArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasUnsignedByteArray.h: Added with properties svn:eol-style and svn:mime-type.
         * html/canvas/CanvasUnsignedByteArray.idl: Added.
        * html/canvas/CanvasUnsignedIntArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasUnsignedIntArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasUnsignedIntArray.idl: Added.
        * html/canvas/CanvasUnsignedShortArray.cpp: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasUnsignedShortArray.h: Added with properties svn:eol-style and svn:mime-type.
        * html/canvas/CanvasUnsignedShortArray.idl: Added.
        * page/DOMWindow.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::beginPaint):
        (WebCore::GraphicsContext3D::endPaint):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::getBoolean):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getFloat):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getInteger):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getBufferParameteri):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteri):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getProgrami):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getRenderbufferParameteri):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderi):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getTexParameterf):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteri):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformf):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformi):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getVertexAttribf):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribi):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::sizeInBytes):

2009-09-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Timothy Hatcher.

        Make m_windowVisible more consistent with the actual visibility of the inspector.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):

2009-09-07  Adam Barth  <abarth@webkit.org>

        Unreviewed speculative build fix for Snow Leopard.

        * platform/GeolocationService.cpp:
        (WebCore::createGeolocationServiceNull):

2009-09-07  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Adds a mock Geolocation service. This will be used to provide predictable behavior of the
        Geolocation API for use in LayoutTests. Later changes will integrate the the mock
        Geolocation service with DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=28264

        The mock Geolocation service returns a fixed position or error. This position or error can be
        set through static methods on the GeolocationService class. The position or error is shared
        between all instances of the mock Geolocation service.

        Implementation details.
        The GeolocationService object maintains a pointer to a factory function which it uses to create
        Geolocation service instances. Each platform implementing Geolocation sets this pointer
        to the factory function for their platform's implementation. When the mock Geolocation service
        is activated, the factory function pointer is reset to the factory function for the mock service.

        Test: fast/dom/Geolocation/error.html

        * WebCore.base.exp: Modified. Exports GeolocationServiceMock methods.
        * GNUMakefile.am: Modified. Added GeolocationServiceMock files.
        * WebCore.gypi: Modified. Added GeolocationServiceMock files.
        * WebCore.pro: Modified. Added GeolocationServiceMock files.
        * WebCore.vcproj/WebCore.vcproj: Modified. Added GeolocationServiceMock files.
        * WebCore.vcproj/WebCoreCommon.vsprops: Modified. Added mock directory to includes.
        * WebCore.xcodeproj/project.pbxproj: Modified. Added GeolocationServiceMock files and exports some headers.
        * WebCoreSources.bkl: Modified. Added GeolocationServiceMock files.
        * page/ChromeClient.h: Modified. Fixed comment.
        * page/Geolocation.cpp: Modified.
        (WebCore::Geolocation::setIsAllowed): Modified. Fixed error string.
        * platform/GeolocationService.cpp: Modified.
        (WebCore::createGeolocationServiceNull): Added. Returns null in place of a Geolocation service. Used to avoid link errors on platforms where Geolocation is not implemented.
        (WebCore::GeolocationService::create): Added. Uses the factory function pointer to create a Geolocation service implementation.
        (WebCore::GeolocationService::useMock): Added. Configures the GeolocationServie to use the mock implementation.
        * platform/GeolocationService.h: Modified.
        * platform/mock: Added.
        * platform/mock/GeolocationServiceMock.cpp: Added.
        (WebCore::GeolocationServiceMock::create): Added. Creates a GeolocationServiceMock object.
        (WebCore::GeolocationServiceMock::GeolocationServiceMock): Added. Constructor.
        (WebCore::GeolocationServiceMock::~GeolocationServiceMock): Added. Destructor.
        (WebCore::GeolocationServiceMock::setPosition): Added. Sets the position that will be returned by the object.
        (WebCore::GeolocationServiceMock::setError): Added. Sets the error that will be returned by the object.
        (WebCore::GeolocationServiceMock::startUpdating): Added. GeolocationService implementation. Starts the service.
        (WebCore::GeolocationServiceMock::stopUpdating): Added. GeolocationService implementation. Stops the service.
        (WebCore::GeolocationServiceMock::timerFired): Added. Used to provide an asynchronous callback when the service is started.
        (WebCore::GeolocationServiceMock::makeGeolocationCallbackFromAllInstances): Added. Used to call back when the position or error is updated.
        (WebCore::GeolocationServiceMock::makeGeolocationCallback): Added. Used to call back when the service starts.
        (WebCore::GeolocationServiceMock::initStatics): Added. Initializes statics members with constructors.
        (WebCore::GeolocationServiceMock::cleanUpStatics): Added. Cleans up static members with constructors.
        * platform/mock/GeolocationServiceMock.h: Added.
        (WebCore::GeolocationServiceMock::lastPosition): Added. Returns the fixed position.
        (WebCore::GeolocationServiceMock::lastError): Added. Returns the fixed error.
        * platform/gtk/GeolocationServiceGtk.cpp: Modified.
        (WebCore::GeolocationServiceGtk::create): Added. Creates an instance of GeolocationServiceGtk.
        * platform/gtk/GeolocationServiceGtk.h: Modified.
        * platform/mac/GeolocationServiceMac.h: Modified.
        * platform/mac/GeolocationServiceMac.mm: Modified.
        (WebCore::GeolocationServiceMac::create): Added. Creates an instance of GeolocationServiceMac.

2009-09-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

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

        We need to be slightly more careful about how we pick up a script
        execution context.  In particular, we were getting the wrong document
        for frames that had been navigated somewhere else.

        In the long term, we should think about a better algorithm for
        computing the script context.

        Fixes LayoutTests/http/tests/xmlhttprequest/detaching-frame-2.html

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieveFrame):

2009-09-07  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix for 2.8 compilation.

        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp:
        (wxRenderer_DrawScrollbar):

2009-09-07  Drew Wilson  <atwilson@google.com>

        Unreviewed build fix.

        Reverting r48121 to fix Windows build errors.

        * DerivedSources.cpp:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * page/DOMWindow.idl:
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::addEventListener):
        (WebCore::WebSocket::removeEventListener):
        (WebCore::WebSocket::dispatchEvent):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):
        (WebCore::WebSocket::dispatchOpenEvent):
        (WebCore::WebSocket::dispatchMessageEvent):
        (WebCore::WebSocket::dispatchCloseEvent):
        * websockets/WebSocket.h:
        (WebCore::WebSocket::create):
        (WebCore::WebSocket::):
        (WebCore::WebSocket::setOnopen):
        (WebCore::WebSocket::onopen):
        (WebCore::WebSocket::setOnmessage):
        (WebCore::WebSocket::onmessage):
        (WebCore::WebSocket::setOnclose):
        (WebCore::WebSocket::onclose):
        (WebCore::WebSocket::toWebSocket):
        (WebCore::WebSocket::refEventTarget):
        (WebCore::WebSocket::derefEventTarget):
        * websockets/WebSocketChannel.cpp: Removed.
        * websockets/WebSocketChannel.h: Removed.
        * websockets/WebSocketChannelClient.h: Removed.
        * websockets/WebSocketHandshake.cpp: Removed.
        * websockets/WebSocketHandshake.h: Removed.

2009-09-07  Drew Wilson  <atwilson@google.com>

        Unreviewed speculative build fix.

        Reverted previous build fix as it didn't fix the problem.

        * bindings/js/JSEventTarget.cpp:
        (WebCore::toEventTarget):

2009-09-07  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, build fix.

        [Qt] Fix build after SHARED_WORKERS are enabled by default (r48131)

        * WebCore.pro:

2009-09-07  Drew Wilson  <atwilson@google.com>

        Unreviewed build fix.

        Temporarily removed depenency between JSEventTarget.cpp and WebSocket.h in an attempt to fix a windows build break.

        * bindings/js/JSEventTarget.cpp:
        (WebCore::toEventTarget):

2009-09-07  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Enable SHARED_WORKERS by default.
        https://bugs.webkit.org/show_bug.cgi?id=28959

        Tests (enabled in a separate patch):
               fast/workers/shared-worker-constructor.html
               fast/workers/shared-worker-context-gc.html
               fast/workers/shared-worker-event-listener.html
               fast/workers/shared-worker-exception.html
               fast/workers/shared-worker-frame-lifecycle.html
               fast/workers/shared-worker-gc.html
               fast/workers/shared-worker-lifecycle.html
               fast/workers/shared-worker-load-error.html
               fast/workers/shared-worker-location.html
               fast/workers/shared-worker-navigator.html
               fast/workers/shared-worker-replace-global-constructor.html
               fast/workers/shared-worker-replace-self.html
               fast/workers/shared-worker-shared.html
               fast/workers/shared-worker-simple.html
               http/tests/workers/shared-worker-importScripts.html
               http/tests/workers/shared-worker-redirect.html
               http/tests/xmlhttprequest/workers/shared-worker-close.html
               http/tests/xmlhttprequest/workers/shared-worker-methods-async.html
               http/tests/xmlhttprequest/workers/shared-worker-methods.html
               http/tests/xmlhttprequest/workers/shared-worker-xhr-file-not-found.html

        * config.h: Removed some whitespace/touched the file to force a full rebuild on the build-bots.
        * Configurations/FeatureDefines.xcconfig:
        * WebCore.pro:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:
        * dom/DOMWindow.idl: Removed unnecessary whitespace to force a rebuild on the build-bots to pickup the flag change.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::load):
        Clean up bitrot in SharedWorker code - DenyCrossOriginRedirect is now DenyCrossOriginRequests.
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::dispatchConnect):
        Clean up bitrot - updated SharedWorker code to reflect new MessageEvent API.

2009-09-07  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        Add new file to sources list.

        * GNUmakefile.am:

2009-09-07  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fixes for wx SVN trunk. 

        * config.h:
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::paintButton):
        * platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):
        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp:
        (wxRenderer_DrawScrollbar):

2009-09-07  Chris Hills <chaz@chaz6.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Use direct includes for Phonon, not the pretty ones

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:

2009-09-07  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket API implementation.
        https://bugs.webkit.org/show_bug.cgi?id=28038
        
        Add build systems only for GNUmakefile.am and WebCore.xcodeproj now.
        Other build systems will be updated once the code is functional.
        Tests will be landed once the code is completed and functional.

        * DerivedSources.cpp:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webSocket):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toWebSocket):
        * dom/EventTarget.h:
        * page/DOMWindow.idl:
        * websockets/WebSocket.cpp:
        (WebCore::ProcessWebSocketEventTask::create):
        (WebCore::ProcessWebSocketEventTask::performTask):
        (WebCore::ProcessWebSocketEventTask::ProcessWebSocketEventTask):
        (WebCore::isValidProtocolString):
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::bufferedAmount):
        (WebCore::WebSocket::addEventListener):
        (WebCore::WebSocket::removeEventListener):
        (WebCore::WebSocket::dispatchEvent):
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::didReceiveMessage):
        (WebCore::WebSocket::didClose):
        (WebCore::WebSocket::dispatchOpenEvent):
        (WebCore::WebSocket::dispatchMessageEvent):
        (WebCore::WebSocket::dispatchCloseEvent):
        * websockets/WebSocket.h:
        (WebCore::WebSocket::create):
        (WebCore::WebSocket::):
        (WebCore::WebSocket::setOnopen):
        (WebCore::WebSocket::onopen):
        (WebCore::WebSocket::setOnmessage):
        (WebCore::WebSocket::onmessage):
        (WebCore::WebSocket::setOnclose):
        (WebCore::WebSocket::onclose):
        (WebCore::WebSocket::toWebSocket):
        (WebCore::WebSocket::eventListeners):
        (WebCore::WebSocket::refEventTarget):
        (WebCore::WebSocket::derefEventTarget):
        * websockets/WebSocketChannel.cpp: Added.
        * websockets/WebSocketChannel.h: Added.
        * websockets/WebSocketChannelClient.h: Added.
        * websockets/WebSocketHandshake.cpp: Added.
        * websockets/WebSocketHandshake.h: Added.

2009-09-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=26854
        [GTK] Needs API to allow more control over outgoing requests

        Add infrastructure required to provide the new
        WebKitNetworkResponse object in our API.

        * GNUmakefile.am: Add new files to the build.
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage):
        * platform/network/soup/ResourceResponse.h:
        * platform/network/soup/ResourceResponseSoup.cpp: Added.
        (WebCore::ResourceResponse::toSoupMessage):

2009-09-07  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        [V8] Cleanup document/frame null-checking in V8DOMWindowCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=29009

        Be consistent in document and frame null checks.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::V8Custom::ClearTimeoutImpl):

2009-09-07  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [Soup] Limit the number of connections
        https://bugs.webkit.org/show_bug.cgi?id=18431

        Increase the maximum number of per host and total connections to
        similar values than those used by the other modern browsers. Seems
        to significantly improve page loading time in many cases.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ensureSessionIsInitialized):

2009-09-07  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Fisher.

        Various minor chromium appcache modifications.
        https://bugs.webkit.org/show_bug.cgi?id=28960

        No new tests.

        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp:
          Fix a null pointer exception.
        (WebCore::ACCESSOR_GETTER):
        * platform/network/chromium/ResourceRequest.h:
          Switch from appCache 'context' to 'host' terminology.
          Note: leaving the old deprecated accessors in place until the matching
          change in chrome is landed to use the new accessors.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::appCacheHostID):
        (WebCore::ResourceRequest::setAppCacheHostID):
        (WebCore::ResourceRequest::appCacheContextID):
        (WebCore::ResourceRequest::setAppCacheContextID):
        * platform/network/chromium/ResourceResponse.h:
          Add an appCacheManifestURL getter/setter.
          Drop the 'get' prefix from the appCacheID getter.
          Note: leaving the old deprecated 'get' prefixed accessor in place until the matching
          change in chrome is landed to use the new accessor.
        (WebCore::ResourceResponse::appCacheID):
        (WebCore::ResourceResponse::appCacheManifestURL):
        (WebCore::ResourceResponse::setAppCacheManifestURL):
        (WebCore::ResourceResponse::getAppCacheID):

2009-09-07  Michael Nordman  <michaeln@google.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=28359
        Cleanup: Undo some accidental changes around DOMApplicationCache.
        - Restore support for constructing a DOMApplicationCache object with a null frame ptr.
        - Return a non-null object for window.applicationCache when the feature is disabled.
        - Simplify the swapCache method.

        Test: http/tests/appcache/disabled.html

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::DOMApplicationCache):
        (WebCore::DOMApplicationCache::swapCache):
        (WebCore::DOMApplicationCache::scriptExecutionContext):
        * loader/appcache/DOMApplicationCache.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::applicationCache):

2009-09-06  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        hostname and host are mixed up when manipulating anchor elements.
        https://bugs.webkit.org/show_bug.cgi?id=28954

        handle the case of port 0.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::host):

2009-09-06  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Eric Seidel.

        Make hidden elements not focusable.

        Clean up supportsFocus and isFocusable.
        supportsFocus now strictly means that the node can be focused by default.
        This is true for links, form controls and content editable elements for example.
        isFocusable means that the user can actually focus it.
        All (2) calls to supportsFocus have been updated to take this into account.
        
        Make a elements without href work correctly as well.

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

        Tests: fast/events/click-focus-anchor.html
               fast/events/tab-focus-anchor.html
               fast/events/tab-focus-hidden.html

        * dom/Element.cpp:
        (WebCore::Element::focus):
        * dom/Node.cpp:
        (WebCore::Node::supportsFocus):
        (WebCore::Node::isFocusable):
        * dom/Node.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::supportsFocus):
        (WebCore::HTMLAnchorElement::isMouseFocusable):
        (WebCore::HTMLAnchorElement::isKeyboardFocusable):
        * html/HTMLAnchorElement.h:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::supportsFocus):
        * html/HTMLAreaElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::supportsFocus):
        * html/HTMLElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::supportsFocus):
        * html/HTMLFieldSetElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::supportsFocus):
        (WebCore::HTMLFormControlElement::isFocusable):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::supportsFocus):
        * html/HTMLFrameElementBase.h:
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::supportsFocus):
        * html/HTMLLegendElement.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::supportsFocus):
        (WebCore::HTMLOptGroupElement::isFocusable):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::supportsFocus):
        (WebCore::HTMLOptionElement::isFocusable):
        * html/HTMLOptionElement.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocus):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::supportsFocus):
        (WebCore::SVGAElement::isFocusable):
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::supportsFocus):
        * wml/WMLAElement.h:
        * wml/WMLFormControlElement.cpp:
        (WebCore::WMLFormControlElement::supportsFocus):
        (WebCore::WMLFormControlElement::isFocusable):
        * wml/WMLFormControlElement.h:

2009-09-06  Joel Stanley  <joel@jms.id.au>

        Reviewed by Dimitri Glazkov.

        Expose functions to set the caret blink interval for Linux Chromium.
        Default value is set to that of RenderTheme::caretBlankInterval().
        Uses caretBlinkIntervalInternal to avoid overriding
        RenderThemeChromiumSkia::caretBlankInterval to preserve the disabling
        of blinking caret required for layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=28931

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::setCaretBlinkInterval):
        (WebCore::RenderThemeChromiumLinux::caretBlinkIntervalInternal):
        * rendering/RenderThemeChromiumLinux.h:

2009-09-06  Ada Chan  <adachan@apple.com>

        Remove an extra </File> in WebCore.vcproj.

        * WebCore.vcproj/WebCore.vcproj:

2009-09-06  Timothy Hatcher  <timothy@apple.com>

        Adds a persistent setting for color format in the Web Inspector.

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

        Reviewed by Dan Bernstein.

        * English.lproj/localizedStrings.js: New strings.
        * inspector/front-end/Color.js: Minor style fixes.
        (WebInspector.Color.prototype.toString): Added. Replaces the individual
        "toFoo" functions. Takes a optional arguments for the color format to return.
        * inspector/front-end/Images/paneSettingsButtons.png: Added.
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._changeColorFormat): Update the sections to show
        the new color format.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor.changeColorDisplay):
        Use the new toString function on Color.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor): Use the persistent setting
        to format colors by default. Add a tooltip for the color swatch.
        * inspector/front-end/inspector.css: New styles for the settings menu.
        * inspector/front-end/inspector.js:
        (WebInspector.loaded): Initilize the colorFormat preference.

2009-09-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Remove Qt v4.6 check from the prefetchDNS implementation
        https://bugs.webkit.org/show_bug.cgi?id=28993

        * platform/network/qt/DnsPrefetchHelper.cpp:
        * platform/network/qt/DnsPrefetchHelper.h:

2009-09-06  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Drop <definition-src> support
        https://bugs.webkit.org/show_bug.cgi?id=28991

        http://dev.w3.org/SVG/profiles/1.1F2/publish/changes.html#FontsChapter

        * DerivedSources.cpp: Remove references to definition-src.
        * DerivedSources.make: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap): Ditto.
        * bindings/objc/DOMSVG.h: Ditto.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Ditto.
        * bindings/v8/V8DOMWrapper.cpp: Ditto.
        * bindings/v8/V8Index.cpp: Ditto.
        * bindings/v8/V8Index.h: Ditto.
        * svg/SVGAllInOne.cpp: Ditto.
        * svg/SVGDefinitionSrcElement.cpp: Removed.
        * svg/SVGDefinitionSrcElement.h: Removed.
        * svg/SVGDefinitionSrcElement.idl: Removed.
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace): Don't search for
        definition-src child.
        * svg/svgtags.in: Remove definition-src.

2009-09-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Roll out http://trac.webkit.org/changeset/48094, because the
        logic of retrieving default caret blink interval was incorrect (non-existent)
        and caused layout test flakiness.

        * rendering/RenderThemeChromiumLinux.cpp:
        * rendering/RenderThemeChromiumLinux.h:

2009-09-05  Jian Li  <jianli@chromium.org>

        Reviewed by NOBODY (Chromium reliability build break).

        Back up partial change in r48072 in order to fix chromium reliability build break.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):

2009-09-05  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=28975
        Fix file upload on chrome/mac. Images that have "Hide Extension" set,
        such as screenshots by default, can now be uploaded to sites such as
        imgur.com.

        * platform/FileSystem.h:
        Add pathGetDisplayFileName().
        * platform/chromium/FileChooserChromium.cpp:
        (WebCore::FileChooser::basenameForWidth):
        Call pathGetDisplayFileName() instead of pathGetFileName().
        * platform/chromium/FileSystemChromiumLinux.cpp:
        (WebCore::pathGetDisplayFileName):
        Implement pathGetDisplayFileName() by delegating to pathGetFileName().
        * platform/chromium/FileSystemChromiumMac.mm:
        (WebCore::pathGetFileName):
        Now returns a real filename instead of a presentational one, which
        fixes the problem addressed by this change.
        (WebCore::pathGetDisplayFileName):
        New function that returns a presentational filename; does what
        pathGetDisplayFileName() did prior to this patch.
        * platform/chromium/FileSystemChromiumWin.cpp:
        (WebCore::pathGetDisplayFileName):
        Implement pathGetDisplayFileName() by delegating to pathGetFileName().

2009-09-05  Joel Stanley  <joel@jms.id.au>

        Reviewed by David Levin.

        Expose functions to set the caret blink interval for Linux Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=28931

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::setCaretBlinkInterval):
        (WebCore::RenderThemeChromiumLinux::caretBlinkInterval):
        * rendering/RenderThemeChromiumLinux.h:

2009-09-04  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Prevent UI freeze in case when too many timers are in the timer queue.
        https://bugs.webkit.org/show_bug.cgi?id=23865

        The fix measures the elapsed time while executing timers. If we have too many
        timers and it takes significant time to fire, quit the loop and reschedule.
        This lets the run loop process user input (close the window for example).

        * platform/ThreadTimers.h:
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::sharedTimerFiredInternal):
        (WebCore::ThreadTimers::fireTimersInNestedEventLoop):
        Removed functions and members used before to grab a list of all expired timers.
        Now we fetch one by one, measuring time and quitting the loop if it takes too long.
        * platform/Timer.cpp:
        (WebCore::TimerBase::isActive):
        (WebCore::TimerBase::setNextFireTime):
        Since timers are now fired one by one, there is no need to keep track of updated timers.
        * manual-tests/input-starved-by-timers.html: Manual test that attempts to freeze browser by
        creating of enough timers. It then keeps UI frozen and after 10 seconds starts to drain the timers
        so the browser un-freezes. This is instead of a regular layout test because we don't have a way
        to inject an input events via regular run loop in DRT - instead they are directly dispatched by
        eventSender, which does not reproduce the UI freeze that happens with real input.

2009-09-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/7201063>
        
        Detach any custom scrollbars before detaching the document.
        
        * page/Frame.cpp:
        (WebCore::Frame::setView):

2009-09-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

                Unreviewed, build fix.

                Remove remaining references to UserStyleSheetLoader after r48075.

                * WebCore.gypi:
                * WebCore.xcodeproj/project.pbxproj:
                * page/qt/FrameQt.cpp:
                * page/wince/FrameWince.cpp:

2009-09-04  Michelangelo De Simone  <micdesim@gmail.com>

                Reviewed by David Levin.

                https://bugs.webkit.org/show_bug.cgi?id=28988
                Minor fix: "novalidate" attribute renamed in "noValidate", according to
                HTML5 specs:
                http://www.whatwg.org/specs/web-apps/current-work/#dom-fs-novalidate

                * html/HTMLFormElement.cpp:
                (WebCore::HTMLFormElement::noValidate):
                (WebCore::HTMLFormElement::setNoValidate):
                * html/HTMLFormElement.h:
                * html/HTMLFormElement.idl:

2009-09-04  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Remove unused line of code from WorkerContext
        https://bugs.webkit.org/show_bug.cgi?id=28990

        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):

2009-09-04  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Fix assertion seen when running buildbot.

        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::createStructure): Create the structure without
        the HasDefaultMark bit since this has a custom mark function.

2009-09-04  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=28984, remove the remote stylesheet loader on Mac/Qt.
        Make sure the other code path (now used by everybody) can handle data URLs.

        As per the post on webkit-dev, the ability to work remotely isn't working properly anyway (it doesn't
        hold up the pending sheet count, so you'd just FOUC on every Web page), and it's extremely unlikely
        that anybody is relying on this support.
        
        Tor Arne agreed it was ok to disable (he enabled it on the Qt side), and only Mac/Qt were using this
        code.

        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::userStyleSheet):
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        * loader/UserStyleSheetLoader.cpp: Removed.
        * loader/UserStyleSheetLoader.h: Removed.
        * page/Frame.cpp:
        (WebCore::Frame::reapplyStyles):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        (WebCore::Page::userStyleSheet):
        * page/mac/FrameMac.mm:
        * page/qt/FrameQt.cpp:

2009-09-04  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Add "sampling profiler" preference, simplify data display when it's set.

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

        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.get data.formatMilliseconds):
        (WebInspector.ProfileDataGridNode.prototype.get data):
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView):
        * inspector/front-end/inspector.js:

2009-09-04  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        [V8] Run-time exception in onmessage handler is not forwarded to the worker object.
        https://bugs.webkit.org/show_bug.cgi?id=28980

        Tested by worker-close.html.

        * bindings/v8/ScriptFunctionCall.cpp:
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::getScriptExecutionContext):
        (WebCore::reportException):
        * bindings/v8/V8Utilities.h:
        (WebCore::getScriptExecutionContext):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SharedWorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-09-04  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        Remove unused m_sheet variable and setCSSStyleSheet methods.

        * dom/Document.cpp:
        * dom/Document.h:

2009-09-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt and Adele Peterson.

        (Based on a patch from Adele).
        
        Fix <rdar://problem/7185875>.
        
        * page/Frame.cpp:
        (WebCore::Frame::setView):
        Detach any custom scroll bars from the old view.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::detachCustomScrollbars):
        Simplify the check (and make it work when body is null) by just checking that the scroll bar owner is
        not a RenderPart object.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        ASSERT that frame() is not null here and also add a null check so that release builds won't crash.

2009-09-04  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Make m_userStyleSheetLoader in Frame an OwnPtr.

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        (WebCore::Frame::setUserStyleSheetLocation):
        (WebCore::Frame::setUserStyleSheet):

2009-09-04  Timothy Hatcher  <timothy@apple.com>

        Show color swatches in the Web Inspector before the color text so clicking them will not
        shift the swatch. Also makes multiple swatches in the single property toggle the color format.

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

        Reviewed by Darin Adler.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle): Some refactoring to consolidate
        the processing we do on the property value. This eliminated the old nickname code, since the new
        WebInspector.Color class handles this. We could also simplify the color regex since more
        is handled by the Color class. Also no longer uses innerHTML for the linkify code.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processValue): Helper function to
        process a value given a regex and processor functions. 
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.linkifyURL): Make an anchor for the
        URL with "url()" syntax surrounding it.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor): Makes a color, if
        there was an exception just return a text node.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor.changeColorDisplay.changeTo):
        Moved from later in the file.
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor.changeColorDisplay): Ditto.
        * inspector/front-end/inspector.css:

2009-09-04  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dave Hyatt.

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

        Account for scrollbar state changes that occur during layout.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

        Perform a layout prior to checking whether the scrollbar modes are
        off, on, or automatic.  The modes may change during layout.

        * WebCore.base.exp:
        * WebCore.order:
        * page/Frame.cpp:
        (WebCore::Frame::createView):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::resetScrollbars):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        * platform/ScrollView.h:

        Eliminate duplicated (and incorrect) scrollbar mode tracking between
        FrameView and ScrollView.

2009-09-04  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        hostname and host are mixed up when manipulating anchor elements.
        https://bugs.webkit.org/show_bug.cgi?id=28954

        Swapped the implementation of host and hostname, and made sure not to return
        the port number if it is default for the given protocol. 
        FireFox also avoids returning the protocol number if it is default.

        Test: fast/dom/Element/hostname-host.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::host):
        (WebCore::HTMLAnchorElement::hostname):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::isDefaultPortForProtocol):
        * page/SecurityOrigin.h:

2009-09-04  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Steve Falkenburg.

        Fix <rdar://problem/7192902>.

        Add the necessary plumbing for having QTMovieWin use WebCore timers.
        
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::TaskTimer::initialize):
        Create the timer and call QTMovieWin::setTaskTimerFuncs.
        
        (WebCore::TaskTimer::setTaskTimerDelay):
        Start the timer.
        
        (WebCore::TaskTimer::stopTaskTimer):
        Stop the timer.
        
        (WebCore::TaskTimer::fired):
        Call QTMovieWin::taskTimerFired().
        
        (WebCore::MediaPlayerPrivate::load):
        Initialize the Task timer.
        
        * platform/graphics/win/QTMovieWin.cpp:
        (updateTaskTimer):
        Call the global stopTaskTimer function and setTaskTimerDelay.
        
        (QTMovieWin::taskTimerFired):
        Make this a member function.
        
        (QTMovieWin::setTaskTimerFuncs):
        Set the global function pointers.
        
        (QTMovieWin::initializeQuickTime):
        (DllMain):
        No need to use the QT shared timer.
        * platform/graphics/win/QTMovieWin.h:

2009-09-04  Tony Chang  <tony@chromium.org>

        Reviewed by David Levin.

        Fix Chromium Win compile.  Missing return statement in
        WebCore::RenderThemeChromiumSkia::paintSliderThumb.
        https://bugs.webkit.org/show_bug.cgi?id=28974

        No new tests, build fix.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintSliderThumb):

2009-09-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Rolling out http://trac.webkit.org/changeset/48035, because it broke
        the build.
        https://bugs.webkit.org/show_bug.cgi?id=28696

2009-09-04  Anders Carlsson  <andersca@apple.com>

        Fix vcproj file.

        * WebCore.vcproj/WebCore.vcproj:

2009-09-03  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=28890, make simple user script injection work.
        
        This patch adds new API for adding and removing user scripts from page groups.  User scripts
        are bundled together in isolated worlds (you can have multiple scripts together in the same
        world).

        Added userscripts/ directory for holding new tests (along with a simple test of script injection).

        * WebCore.base.exp:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        * bindings/js/ScriptController.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        * bindings/v8/ScriptController.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::dispatchDocumentElementAvailable):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        (WebCore::Frame::injectUserScriptsForWorld):
        * page/Frame.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::~PageGroup):
        (WebCore::PageGroup::addUserScript):
        (WebCore::PageGroup::removeUserContentForWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/PageGroup.h:
        (WebCore::PageGroup::userScripts):
        * page/UserScript.h: Added.
        (WebCore::UserScript::UserScript):
        (WebCore::UserScript::source):
        (WebCore::UserScript::url):
        (WebCore::UserScript::patterns):
        (WebCore::UserScript::worldID):
        (WebCore::UserScript::injectionTime):
        * page/UserScriptTypes.h: Added.
        (WebCore::):

2009-09-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26402
        Crashes when using a detached DocumentType node

        Test: fast/dom/DOMImplementation/detached-doctype.html

        DocumentType nodes are the only one that can have null document(), and they can never have
        children, so they are a degenerate case for NodeLists.

        * dom/Node.cpp:
        (WebCore::Node::childNodes): Don't try register node list with document if there's no
        document. Since there are no changes possible for a DocumentType's node list, this is not
        necessary.
        (WebCore::Node::registerDynamicNodeList): Ditto.
        (WebCore::Node::unregisterDynamicNodeList): Ditto. I couldn't find a scenario where this
        was invoked for a DocumentType node, but I also couldn't prove that it can't be (the
        de-registration code path that I saw taken was via Node destructor, and that already has
        a null check for document).

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener): Bail out if there is no document (just as we already do
        if there is no window).
        (WebCore::JSNode::removeEventListener): Ditto.

2009-09-04  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] loadFinished never emitted
        https://bugs.webkit.org/show_bug.cgi?id=28935

        Do not report errors right away from
        ResourceHandle::start. Instead return true and schedule an error
        to be reported in the handle later. Otherwise WebCore gets
        confused and thinks the resource never finished loading, making it
        not emit the finished status.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):
        (WebCore::):

2009-09-04  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.

        [V8] DOM Storage bindings: Event Handler should create StorageEvents
        https://bugs.webkit.org/show_bug.cgi?id=28942
        
        Tests:
        Causes the following tests that were failing with V8 to pass:
        * storage/domstorage/localstorage/onstorage-attribute-setwindow.html
        * storage/domstorage/localstorage/complex-keys.html
        * storage/domstorage/localstorage/onstorage-attribute-markup.html
        * storage/domstorage/localstorage/simple-events.html
        * storage/domstorage/localstorage/onstorage-attribute-set-attribute.html
        * storage/domstorage/localstorage/index-get-and-set.html
        * storage/domstorage/sessionstorage/onstorage-attribute-setwindow.html
        * storage/domstorage/sessionstorage/onstorage-attribute-markup.html
        * storage/domstorage/sessionstorage/simple-events.html
        * storage/domstorage/sessionstorage/onstorage-attribute-set-attribute.html
        * storage/domstorage/sessionstorage/index-get-and-set.html

        Code changes:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventToV8Object):  Create StorageEvents.
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::storageGetter): Check if we are retrieving the length property and return the number of items in the object rather than a property named length when invoking the getItem() member of local/sessionStorage.

2009-09-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleView.prototype._formatarray):
        (WebInspector.ConsoleView.prototype._formatnode):
        * inspector/front-end/DOMAgent.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.dispatch):
        * inspector/front-end/InjectedScriptAccess.js: Added.
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.editingCommitted):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.html:

2009-09-04  Tony Chang  <tony@chromium.org>

        Reviewed by Eric Seidel.

        Implement <input type="range"> for Chromium Linux by painting
        the slider and the thumb using skia.
        https://bugs.webkit.org/show_bug.cgi?id=28928

        Covered by existing tests (we're currently hitting an assert for them).

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::adjustSliderThumbSize):
        * rendering/RenderThemeChromiumLinux.h:
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::drawVertLine):
        (WebCore::drawHorizLine):
        (WebCore::drawBox):
        (WebCore::RenderThemeChromiumSkia::paintSliderTrack):
        (WebCore::RenderThemeChromiumSkia::paintSliderThumb):
        * rendering/RenderThemeChromiumSkia.h:

2009-09-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        - Implement <input type=color> as a text field.
        - ValidityState::typeMismatch supports for type=color.
        https://bugs.webkit.org/show_bug.cgi?id=28966

        Tests: fast/forms/ValidityState-patternMismatch-unsupported.html
               fast/forms/ValidityState-typeMismatch-color.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueMissing):
        (WebCore::HTMLInputElement::patternMismatch):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::formControlType):
        (WebCore::HTMLInputElement::saveFormControlState):
        (WebCore::HTMLInputElement::restoreFormControlState):
        (WebCore::HTMLInputElement::accessKeyAction):
        (WebCore::HTMLInputElement::rendererIsNeeded):
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::appendFormData):
        (WebCore::HTMLInputElement::valueWithDefault):
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute):
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::isRequiredFormControl):
        (WebCore::HTMLInputElement::dataList):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::):
        (WebCore::HTMLInputElement::isTextField):
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):
        (WebCore::ValidityState::isValidColorString):
        * html/ValidityState.h:

2009-09-04  Mads Ager  <ager@chromium.org>

        Reviewed by David Levin.

        [V8] Crash when updating document cache
        https://bugs.webkit.org/show_bug.cgi?id=28965

        Initialization of a V8 JavaScript context can fail.  When that
        happens, do not attempt to update the document wrapper cache.

        This code path is exercised by http/tests/security/javascriptURL/javascriptURL-in-new-iframe.html.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::updateDocument):

2009-09-04  Yaar Schnitman  <yaar@chromium.org>

        Reviewed by Eric Seidel.

        Two bugs:

        https://bugs.webkit.org/show_bug.cgi?id=25489
        CSS property background-position is now serialized in shorthand string as
        background-position-x background-position-y, as the specification requires
        (See http://www.w3.org/TR/2008/WD-css3-background-20080910/#the-background-position).
        

        https://bugs.webkit.org/show_bug.cgi?id=26541
        CSS background-color is now be serialized before other background properties, 
        as CSS specification requires (See http://dev.w3.org/csswg/cssom/#css-value).  

        An existing layout test that accepted wrong order and skipped position test 
        had to be modified.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):

2009-09-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by David Levin.

        Add support for HTMLTextAreaElement.textLength
        https://bugs.webkit.org/show_bug.cgi?id=28929

        Test: fast/forms/textarea-textlength.html

        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::textLength):
        * html/HTMLTextAreaElement.idl:

2009-09-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7180197>, https://bugs.webkit.org/show_bug.cgi?id=28822
        REGRESSION(r31231): Creating document with current document's DOCTYPE causes crashes

        Test: fast/dom/DOMImplementation/createDocument-with-used-doctype.html

        * dom/DOMImplementation.cpp: (WebCore::DOMImplementation::createDocument): Even though we
        cannot raise an exception immediately out of fear of breaking Acid3, we shouldn't use a
        DocumentType node in two documents.

2009-09-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Page Cache should support pages with Frames.
        https://bugs.webkit.org/show_bug.cgi?id=13631

        Tests: fast/events/pageshow-pagehide-on-back-cached-with-frames.html
               fast/loader/frames-with-unload-handlers-in-page-cache.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):

2009-09-03  Steve VanDeBogart  <vandebo@chromium.org>

        Reviewed by Eric Seidel.

        Handle middle click in Chromium like QT
        https://bugs.webkit.org/show_bug.cgi?id=28696

        Tested by middle-click-onpaste.html.

        * platform/Pasteboard.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::getData):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::isSelectionMode):
        (WebCore::Pasteboard::setSelectionMode):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        * platform/chromium/PasteboardPrivate.h:
        (WebCore::PasteboardPrivate::):

2009-09-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        More partial work towards "Page Cache should support pages with Frames"
        https://bugs.webkit.org/show_bug.cgi?id=13631

        Fix a bug where subframes weren't asked if they were cacheable.

        No new tests, especially since page caching for frames isn't turned on yet.
        A layout test will come in my next patch, which enables frames in the page cache.

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

2009-09-03  Adam Barth  <abarth@webkit.org>

        Reviewed by eric@webkit.org.

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

        Added mixed content methods to FrameLoaderClient.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didDisplayInsecureContent):
        (WebCore::EmptyFrameLoaderClient::didRunInsecureContent):
        * loader/FrameLoaderClient.h:

2009-09-03  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        [wx] Frames support
        https://bugs.webkit.org/show_bug.cgi?id=19041

        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::nativeWindowForRenderObject):
        (WebCore::RenderThemeWx::paintButton):
        (WebCore::RenderThemeWx::paintTextField):
        (WebCore::RenderThemeWx::paintMenuList):
        (WebCore::RenderThemeWx::paintMenuListButton):
        * platform/wx/ScrollbarThemeWx.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeWx::~ScrollbarThemeWx):
        (WebCore::ScrollbarThemeWx::scrollbarThickness):
        (WebCore::ScrollbarThemeWx::hasThumb):
        (WebCore::ScrollbarThemeWx::buttonSize):
        (WebCore::ScrollbarThemeWx::backButtonRect):
        (WebCore::ScrollbarThemeWx::forwardButtonRect):
        (WebCore::ScrollbarThemeWx::trackRect):
        (WebCore::ScrollbarThemeWx::paintScrollCorner):
        (WebCore::ScrollbarThemeWx::paint):
        * platform/wx/ScrollbarThemeWx.h: Added.
        (WebCore::ScrollbarThemeWx::hasButtons):
        * platform/wx/TemporaryLinkStubs.cpp:
        * platform/wx/wxcode/gtk/scrollbar_render.cpp: Added.
        (wxStyleForPart):
        (GetButtonWidget):
        (wxGetGdkWindowForDC):
        (wxRenderer_DrawScrollbar):
        * platform/wx/wxcode/mac/carbon/scrollbar_render.cpp: Added.
        (wxScrollbarPartToHIPressedState):
        (wxRenderer_DrawScrollbar):
        * platform/wx/wxcode/scrollbar_render.h: Added.
        (calcThumbStartAndLength):
        * platform/wx/wxcode/win/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):
        * platform/wx/wxcode/win/scrollbar_render.cpp: Added.
        (GraphicsHDC::GraphicsHDC):
        (GraphicsHDC::~GraphicsHDC):
        (GraphicsHDC::operator HDC):
        (getTSStateForPart):
        (wxRenderer_DrawScrollbar):
        * webcore-wx.bkl:

2009-09-03  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Page content is not displayed in case of HTTP status error
        https://bugs.webkit.org/show_bug.cgi?id=28949

        If the server sent content, show it to the user instead of an error,
        even if the HTTP status code is not success.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::resetState):
        * platform/network/qt/QNetworkReplyHandler.h:

2009-09-03  Drew Wilson  <atwilson@google.com>

        Reviewed by Dimitri Glazkov.

        Need to update v8 bindings to support passing multiple ports to postMessage()
        https://bugs.webkit.org/show_bug.cgi?id=28839

        Added support for passing MessagePortArray to v8 bindings.

        New tests that now pass with V8:
               fast/events/message-port-multi.html
               fast/workers/worker-context-multi-port.html
               fast/workers/worker-multi-port.html

        * WebCore.gypi:
        Added V8MessageEventCustom.cpp and V8MessagePortCustom.h
        * bindings/v8/custom/V8CustomBinding.h:
        Added custom postMessage() handlers for various classes.
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::DOMWindowPostMessage):
        Added custom handler that supports MessagePortArray.
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp:
        (WebCore::DedicatedWorkerContextPostMessage):
        Added custom handler that supports MessagePortArray.
        * bindings/v8/custom/V8MessageEventCustom.cpp: Added.
        (WebCore::MessageEventPorts):
        Added getter for ports attribute.
        (WebCore::MessageEventInitMessageEvent):
        Added custom handler that supports MessagePortArray.
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::MessagePortPostMessage):
        Added custom handler that supports MessagePortArray.
        (WebCore::getMessagePortArray):
        Added helper function that supports converting from a sequence-like object to a MessagePortArray.
        * bindings/v8/custom/V8MessagePortCustom.h: Added.
        Added declaration for getMessagePortArray().
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::WorkerPostMessage):
        Added custom handler that supports MessagePortArray.

2009-09-03  Drew Wilson  <atwilson@google.com>

        Reviewed by Sam Weinig.

        Need to update JS bindings and IDL files to support multiple message ports in postMessage()
        https://bugs.webkit.org/show_bug.cgi?id=28460

        Added new toJSSequence() API which validates that a JSValue meets the WebIDL criteria for a sequence.

        Tests: fast/events/message-port-multi.html
               fast/workers/worker-context-multi-port.html
               fast/workers/worker-multi-port.html

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Added JSMessagePortCustom.h and JSMessageEventCustom.cpp.
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::toJSSequence):
        Added toJSSequence() API to do validation on sequence-like objects per WebIDL.
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::postMessage):
        Added custom handler for postMessage() that handles being passed MessagePortArrays.
        * bindings/js/JSDedicatedWorkerContextCustom.cpp:
        (WebCore::JSDedicatedWorkerContext::postMessage):
        Added custom handler for postMessage() that handles being passed MessagePortArrays.
        * bindings/js/JSMessageEventCustom.cpp: Added.
        (WebCore::JSMessageEvent::ports):
        Added custom ports() getter that converts from MessagePortArray to JSArray.
        (WebCore::JSMessageEvent::initMessageEvent):
        Added support for passing a MessagePortArray.
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::postMessage):
        Added custom handler for postMessage() that handles being passed MessagePortArray.
        (WebCore::fillMessagePortArray):
        New helper routine that validates/converts from a JS sequence o a WebCore::MessagePortArray.
        * bindings/js/JSMessagePortCustom.h: Added.
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::postMessage):
        Added custom handler for postMessage() that handles being passed MessagePortArray.
        * dom/MessageEvent.cpp:
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::ports):
        Changed ports() to return a MessagePortArray* since this value can be null.
        * dom/MessageEvent.idl:
        Updated IDL to match HTML5 spec (now accepts MessagePortArrays instead of a solitary MessagePort).
        * dom/MessagePort.cpp:
        * dom/MessagePort.h:
        * dom/MessagePort.idl:
        Updated IDL to match HTML5 spec (postMessage() now accepts MessagePortArrays instead of a solitary MessagePort).
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        Updated IDL to match HTML5 spec (postMessage() now accepts MessagePortArrays instead of a solitary MessagePort).
        * workers/DedicatedWorkerContext.cpp:
        * workers/DedicatedWorkerContext.h:
        * workers/DedicatedWorkerContext.idl:
        Updated IDL to match HTML5 spec (postMessage() now accepts MessagePortArrays instead of a solitary MessagePort).
        * workers/Worker.cpp:
        * workers/Worker.h:
        * workers/Worker.idl:
        Updated IDL to match HTML5 spec (postMessage() now accepts MessagePortArrays instead of a solitary MessagePort).

2009-09-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Do not query non-function call frames for function name.

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

        * inspector/front-end/InjectedScript.js:
        (InjectedScript.CallFrameProxy):
        (InjectedScript.CallFrameProxy.prototype._wrapScopeChain):

2009-09-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Crash after typing "clear" and pressing return in inspector console.

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

        * inspector/front-end/InjectedScript.js:
        (InjectedScript._clearConsoleMessages):
        (InjectedScript._inspectObject):
        (InjectedScript._ensureCommandLineAPIInstalled):

2009-09-03  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Squeezed out some performance from string conversion.
        https://bugs.webkit.org/show_bug.cgi?id=28945

        * bindings/v8/V8Binding.cpp:
        (WebCore::WebCoreStringResource::WebCoreStringResource):
        (WebCore::WebCoreStringResource::~WebCoreStringResource):
        (WebCore::WebCoreStringResource::data):
        (WebCore::WebCoreStringResource::length):
        (WebCore::WebCoreStringResource::atomicString):
        (WebCore::WebCoreStringResource::string):
        Avoid calling virtual length method. Be more explicit with
        external memory computation. Avoid function calls in data and
        length.
        (WebCore::):
        (WebCore::v8StringToWebCoreString):
        (WebCore::v8StringToAtomicWebCoreString):
        (WebCore::v8NonStringValueToWebCoreString):
        (WebCore::v8NonStringValueToAtomicWebCoreString):
        Avoid extra calls of WebCoreStringResource::toString. When
        AtomicString is computed pass it immediately when constructing
        WebCoreStringResource. Use inline buffer for small strings.
        * bindings/v8/V8Binding.h:
        (WebCore::v8ValueToWebCoreString):
        (WebCore::v8ValueToAtomicWebCoreString):
        (WebCore::toString):
        Inline dispatch of string vs. non-string values.

2009-09-03  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        [V8] Inlined common case of V8IsolatedWorld::getEntered to speed
        up V8Proxy lookup.
        https://bugs.webkit.org/show_bug.cgi?id=28946

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::getEnteredImpl):
        * bindings/v8/V8IsolatedWorld.h:
        (WebCore::V8IsolatedWorld::getEntered):

2009-09-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Fix a regression bug that maxLength doesn't work for IME input.
        https://bugs.webkit.org/show_bug.cgi?id=25253

        Tests: fast/forms/input-maxlength-ime-completed.html
               fast/forms/input-maxlength-ime-preedit.html

        * dom/InputElement.cpp:
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
        * dom/InputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):

2009-09-03  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        Make SVGStyleElement title/media/type setters do something
        https://bugs.webkit.org/show_bug.cgi?id=28828

        Test: svg/dom/style-reflect.html

        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::setXmlspace): Actually change the attribute.
        (WebCore::SVGStyleElement::setType): Ditto.
        (WebCore::SVGStyleElement::setMedia): Ditto.
        (WebCore::SVGStyleElement::setTitle): Ditto.

2009-09-03  Ben Murdoch  <benm@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=28872
        
        Fixes a bug where handleEvent() in the V8 Custom SQL Statement Error binding would not return the correct result to WebCore after invoking the callback.

        Test: storage/statement-error-callback.html

        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent): Return true from handleEvent() if the callback raised an exception or the callback itself returned true.

2009-09-03  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding three font-specific files to WebCore:
        FontCustomPlatformData.cpp, FontCustomPlatformData.h,
        and FontPlatformData.h
        https://bugs.webkit.org/show_bug.cgi?id=28131

        * platform/graphics/haiku/FontCustomPlatformData.cpp: Added.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.h: Added.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        * platform/graphics/haiku/FontPlatformData.h: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::bold):
        (WebCore::FontPlatformData::oblique):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):

2009-09-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        More partial work towards "Page Cache should support pages with Frames"
        https://bugs.webkit.org/show_bug.cgi?id=13631

        No new tests. (No change in behavior, current tests pass).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading): Adopt the new enum form for FrameLoader::stopLoading().

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Take an enum to decide whether to dispatch no unload events,
          only unload, or unload and pagehide.
        (WebCore::FrameLoader::closeURL):
        (WebCore::FrameLoader::scheduleRedirection):
        (WebCore::FrameLoader::cachePageForHistoryItem): Call pageHidden().
        (WebCore::FrameLoader::pageHidden): Add to dispatch the pagehide event to all frames in the case
          where a page is added to the PageCache.
        * loader/FrameLoader.h:

        * loader/FrameLoaderTypes.h: Add an UnloadEventPolicy enum.

2009-09-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        More partial work towards "Page Cache should support pages with Frames"
        https://bugs.webkit.org/show_bug.cgi?id=13631

        - More CachedFrame destruction work.
        - Including related Frame and FrameLoader changes and cleanup.

        No new tests. (No change in behavior, current tests pass).

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Rebuild up the whole FrameTree when restoring.
        (WebCore::CachedFrame::CachedFrame): Tear down the entire FrameTree when caching.
        (WebCore::CachedFrame::destroy): For child frames that are being destroyed while in
          the PageCache, do lightweight cleanup to:
          A - Prevent referring to a stale Page object.
          B - Prevent World Leaks of WebKit objects.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopAllLoaders): stopAllLoaders() should never be called on Frames that are
          in the PageCache. ASSERT that fact.
        (WebCore::FrameLoader::open): Remove a bogus release-build workaround, as the comment right above it
          explains it is not effective, and it'd be better to see the crash locally instead of downstream.
        (WebCore::FrameLoader::closeAndRemoveChild): Make sure the owner element has a page pointer before
          referencing it.
        (WebCore::FrameLoader::detachFromParent): Use the new detachViewsAndDocumentLoader() call
        (WebCore::FrameLoader::detachViewsAndDocumentLoader): Does lightweight cleanup of client (WebKit) objects.
        * loader/FrameLoader.h:

        * page/Frame.cpp:
        (WebCore::Frame::detachFromPage): Simply clear the Page pointer without doing any other work.
        (WebCore::Frame::pageDestroyed): Use the new detachFromPage().
        * page/Frame.h:

2009-09-02  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Dimitri Glazkov

        [Chromium] Add 'icu::' qualifier in preparation for ICU upgrade to 4.2
        in Chromium. This is to fix a new file added in r28742 since the
        last patch for this issue.

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

        No change in the test result.

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

2009-09-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Correct a typo to fix bustage, caused by r47991.
        https://bugs.webkit.org/show_bug.cgi?id=27933

        * platform/graphics/skia/ImageBufferSkia.cpp: Changed "Unpremultipled" to "Unmultiplied".

2009-09-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Add a missing include to fix bustage, caused by r47991.
        https://bugs.webkit.org/show_bug.cgi?id=27933

        * platform/graphics/skia/ImageBufferSkia.cpp: Added SkColorPriv include.

2009-09-02  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Implement file support for DragData.
        https://bugs.webkit.org/show_bug.cgi?id=28896

        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::containsCompatibleContent):

2009-09-02  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Protect libcurl shared data with Mutex objects via curl_set_share_opt.
        https://bugs.webkit.org/show_bug.cgi?id=28920

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::sharedResourceMutex):
        (WebCore::curl_lock_callback):
        (WebCore::curl_unlock_callback):
        (WebCore::ResourceHandleManager::ResourceHandleManager):

2009-09-02  Evan Stade  <estade@chromium.org>

        Reviewed by Eric Seidel.

        Expose functions to change the focus ring color for Linux Chromium

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

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::setFocusRingColor):
        (WebCore::RenderThemeChromiumLinux::platformFocusRingColor):
        * rendering/RenderThemeChromiumLinux.h:

2009-09-02  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        SVG Filter premultiplied color support for getImageDate/putImageData
        [https://bugs.webkit.org/show_bug.cgi?id=27933]

        Patch to get premultiplied color support for Skia on getImageDate/putImageData.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):

2009-09-02  Brady Eidson  <beidson@apple.com>

        Forget to rename openInFrameloader() to open(), which was requested in Darin's review of my last patch.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::open):
        * history/CachedFrame.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):

2009-09-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        In http://trac.webkit.org/changeset/47943 I added new header dependencies to FrameLoader.h.
        Removing them is a little trouble, but worth it going forward.
        The pattern of creating a "CachedFrameBase" as the interface CachedFrame provides to FrameLoader
        was suggested by Darin Adler.

        No new tests. (No change in behavior)

        Make CachedFrame inherit privately from CachedFrameBase, which becomes the interface FrameLoader uses:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::CachedFrameBase):
        (WebCore::CachedFrameBase::~CachedFrameBase):
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::openInFrameLoader):
        * history/CachedFrame.h:
        (WebCore::CachedFrameBase::document):
        (WebCore::CachedFrameBase::view):
        (WebCore::CachedFrameBase::domWindow):
        (WebCore::CachedFrame::create):
        (WebCore::CachedFrame::documentLoader):
        (WebCore::CachedFrame::mousePressNode):

        Call the new ::openInFrameLoader() method on the CachedFrame, as CachedFrameBase is now the only
        thing capable of interacting with FrameLoader::open(CachedFrameBase):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * history/CachedPage.h:
        (WebCore::CachedPage::documentLoader):

        Make ::open(CachedFrame) public, and change it to ::open(CachedFrameBase):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open):
        * loader/FrameLoader.h:

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

        Reviewed by Eric Seidel.

        Cannot pres Enter to escape from bulleted list when <ul> is a child of <li>.
        https://bugs.webkit.org/show_bug.cgi?id=24866

        This patch modifies breakOutOfEmptyListItem to break out of a properly nested list
        (a list to break out of is inside another list item).

        When the empty list item appears at the end of another list item, WebKit breaks out of
        the outer list item, and adds new item below the outer list item.
        Otherwise, WebKit breaks out of the the inner list item and inserts new paragraph.

        Test: editing/execCommand/break-out-of-empty-list-item.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):

2009-09-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        More partial work towards "Page Cache should support pages with Frames"
        https://bugs.webkit.org/show_bug.cgi?id=13631

        This patch is primarily about the "CachedFrame tree" and making slightly different decisions
        based on whether a CachedFrame is the main frame or a subframe.

        - Store whether a CachedFrame represents the main frame or a subframe.
        - "Chop off the frame tree" for the main frame when creating its CachedFrame, as main frames 
          are reused and need to start new page loads with an empty frame tree.
        - Reattach the frame tree to the main frame when restoring it.
        - open() the cached subframes in their respective loaders when restoring.
        - Properly clear() and destroy() cached subframes.
        - When committing to a new page load, and after caching the previous page, only clear the
          FrameView for the main frame.

        Note that all of above will eventually be necessary as I continue to land this work in pieces,
        but doesn't actually change any behavior right now because we still refuse to even *try* to
        cache pages with frames.

        No new tests. No change in behavior, and current tests continue to pass.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::restore):
        (WebCore::CachedFrame::clear):
        (WebCore::CachedFrame::destroy):
        * history/CachedFrame.h:
        (WebCore::CachedFrame::isMainFrame):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::open):
        * loader/FrameLoader.h:

2009-09-02  Brady Eidson  <beidson@apple.com>

        No review, build fix.

        http://trac.webkit.org/changeset/47976 broke the build.  
        Let's try compiling before we land things, shall we?

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData): Order the initialization list correctly.

2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>

        waf build fixes for Windows/MSVC.

        * wscript:

2009-09-02  Ben Murdoch  <benm@google.com>

        Unreviewed build fix for Chromium.

        Missed #including V8Proxy.h in WebCore/bindings/v8/V8Binding.cpp.

        * bindings/v8/V8Binding.cpp: add V8Proxy.h as an include

2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>

        waf build fix, don't define symbols we now grab from other sources.

        * platform/wx/TemporaryLinkStubs.cpp:

2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>

        Build fixes for PluginViewNone.cpp and a wx build fix for PluginView.cpp.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop):
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::platformDestroy):

2009-09-02  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by Eric Seidel.

        Fix the build failure of WebKit for Linux/Qt when WML is enabled

        No test cases needed since this just fixes the build problem.

        * wml/WMLElement.cpp:
        (WebCore::WMLElement::create):
        * wml/WMLTableElement.cpp:
        (WebCore::WMLTableElement::joinSuperflousColumns):
        (WebCore::WMLTableElement::padWithEmptyColumns):

2009-09-02 Yong Li <yong.li@torchmobile.com>

        Reviewed by Adam Barth.

        WINCE PORT: use shared buffer for custom font data
        https://bugs.webkit.org/show_bug.cgi?id=27734

        Refactored by Joe Mason <joe.mason@torchmobile.com>

        * loader/CachedFont.cpp:
        add WINCE to platforms using cached custom data
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameFont): implement for WinCE
        * platform/graphics/opentype/OpenTypeUtilities.h:
        build fixes
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::setCustomFontCache): add accessor
        (WebCore::createFontCustomPlatformData): change param to SharedBuffer
        * platform/graphics/wince/FontCustomPlatformData.h:
        update function signatures 
 
2009-09-02 Yong Li <yong.li@torchmobile.com>

        Reviewed by Adam Barth.

        WINCE PORT: font-related build fixes and minor bugfixes
        https://bugs.webkit.org/show_bug.cgi?id=27734

        * platform/graphics/FontCache.h: declare functions added in https://bugs.webkit.org/show_bug.cgi?id=27509
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage): fix ambiguous overload error in min/max on Windows
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData): initialize member vars
        * platform/graphics/SimpleFontData.h: disable unused members on Wince to save space 

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

        Reviewed by Adam Barth.

        Another pass at releasing the storage mutex.
        https://bugs.webkit.org/show_bug.cgi?id=28904

        Another pass at releasing the storage mutex (when applicable) when we finish
        executing JavaScript.  http://dev.w3.org/html5/spec/Overview.html#storage-mutex
        describes the required behavior.

        As it turns out, https://bugs.webkit.org/show_bug.cgi?id=28789 didn't solve
        the problem correctly.  First of all, I missed that events and timeouts go
        through a different call path.  Second of all, I didn't consider recursion
        correctly.  Third of all, my check to see if LocalStorage is alive actually
        instantiates it if it isn't yet.  Fourth, I forgot DOM_STORAGE guards around
        it.  So I'm reverting that change completely and doing it more cleanly.
        Unfortunately, the solution isn't as portable (and thus I've left out the JSC
        implementation for now).

        NOTE: This change now tracks recursion on function callbacks in V8.  I ran this
        by Mads Ager and Mike Belshe and they seemed to think adding the checks were
        fine.  Most callbacks are asynchronous and thus wouldn't be nested.  The few
        scenareos where you can have nested callbacks probably should have always been
        protected by a recursion guard.

        Unfortunately, this can't be tested without a hook added to the layout test
        controllers since the lock is (by design) not supposed to be observable by
        JavaScript.  https://bugs.webkit.org/show_bug.cgi?id=28906

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): revert
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): revert
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::runScript):
            Add releaseStorageMutex call.  A small amount of clean up.
        (WebCore::V8Proxy::callFunction):
            Add releaseStorageMutex call.  A small amount of clean up.
        (WebCore::V8Proxy::releaseStorageMutex):
            Check to see if localStorage has been instantiated.  If so, tell it to
            unlock all storage areas.
        * bindings/v8/V8Proxy.h:
        * page/PageGroup.h:
        (WebCore::PageGroup::hasLocalStorage):  Make hasLocalStorage public.

2009-09-02  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Barth.

        WINCE PORT: Implement ImageBuffer for WINCE
        Implement Image interface with a light class BufferedImage
        for rendering ImageBuffer
        https://bugs.webkit.org/show_bug.cgi?id=28167

        * platform/graphics/wince/ImageBufferData.h: Added.
        * platform/graphics/wince/ImageBufferWince.cpp: Added.

2009-08-31  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Seidel.

        Join the various PluginView destructors into one shared implementation

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

        The Qt port used to delete the platform plugin widget as the last step.
        Now this is done before cleaning up the script objects and unloading the
        plugin package, similar to how the Win port does it.

        * plugins/PluginView.cpp:
        * plugins/PluginViewNone.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

2009-08-31  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Seidel.

        Share PluginView::init() between ports

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

        The port-spesific bits are moved to platformStart(), which now returns
        a bool based on the success of the platformStart.

        m_hasPendingGeometryChange is now initialized in the initializer list
        instead of in PluginViewQt's init()

        PluginViewMac (currently used only by the Qt port) used to manually call
        stop() in the case where an unsupported drawing or event model was detected.
        This was wrong, as the m_status and m_isStarted fields should be used to
        guard against doing operations on a plugin in this intermediate state.

        * plugins/PluginView.cpp:
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

2009-09-02  Ben Murdoch  <benm@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=28737
        
        Update JavaScript bindings in JSC and V8 for SQLTransaction to throw exceptions in the right places.

        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql): Throw an exception if no parameters are passed to executeSql().
        * bindings/v8/V8Binding.cpp:
        (WebCore::v8ValueToWebCoreString): Catch an exception if thrown from toString().
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Allow "arrayish objects" to be passed to executeSql.

2009-09-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Migrate Databases tab to InjectedScript /
        serialized interaction.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleEvent):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.isDB):
        (WebInspector.Database.prototype.runWithTableNames.sortingCallback):
        (WebInspector.Database.prototype.runWithTableNames):
        (WebInspector.Database.prototype.executeSql):
        (WebInspector.Database.prototype.executeSql.errorCallback):
        (WebInspector.Database.prototype.executeSql.queryTransaction):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._enterKeyPressed):
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.selectDatabase):
        (WebInspector.StoragePanel.prototype.updateDatabaseTables.withTableNames):
        (WebInspector.StoragePanel.prototype.updateDatabaseTables):
        (WebInspector.DatabaseSidebarTreeElement.prototype.onpopulate.withTableNames):
        (WebInspector.DatabaseSidebarTreeElement.prototype.onpopulate):

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

        Not reviewed (trivial followup fix). 
        
        Web Inspector: Trivial follow up fix to r47944.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::nodeForId):

2009-09-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Fixed a bug in handling of isReadOnly, where textareas were casted to HTMLInputElements.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):

2009-09-01  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=28047
        add utility method to enable logging messages for inspector development

        manual test case added (see below)

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleMessage.prototype.toString):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.log):
        * manual-tests/inspector/webinspector-log.html: Added.
        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix):
        * page/Console.h:
        (WebCore::):

2009-09-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=21990
        When a rare EUC-JP character is present, explicitly (and correctly) labelled EUC-JP document
        is mistreated as Shift_JIS

        <rdar://problem/5828506> Safari should not try auto-detecting if charset information exists

        WebKit used to unconditionally auto-detect document encoding if it was one of Japanese ones.
        This didn't really match any browser, and did cause problems on some sites.

        Our detector is very quick to label an EUC-JP page as Shift_JIS if it notices a byte that
        cannot be part of EUC-JP source. However, such bytes do appear in Web pages sometimes,
        especially in comments. Also, some valid EUC-JP sequences are not known to it.

        Some pages that are fixed by this change:

        <rdar://problem/5934750> Encoding in incorrect at http://cocodeparis.blog45.fc2.com/. This
        page has incorrect encoding in title, so no browser displays it 100% fine. We now match
        Firefox and IE.

        <rdar://problem/6007713> The web page http://www.sf.us.emb-japan.go.jp/top.htm is garbled
        in Safari. There is a stray byte in comments that was makes charset detector think it can't
        be EUC-JP.

        <rdar://problem/6965711> A Japanese web page www.nippontv.studiolegend.tv is garbled in
        Safari. Many comments on this page are encoded as Shift_JIS - IE magically displays that
        fine in View Source mode (it doesn't seem to have an ability to switch between EUC-JP and
        Shift_JIS in normal HTML view though).

        Test: fast/encoding/japanese-encoding-mix.html

        * loader/TextResourceDecoder.cpp: (WebCore::TextResourceDecoder::decode): Only invoke auto-
        detection if there is no solid charset information yet.

2009-09-01  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] FileList cannot be accessed via index in Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=28883

        Tested by clipboard-file-access.html.

        * WebCore.gypi:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8FileListCustom.cpp: Added.

2009-08-31  Jon Honeycutt  <jhoneycutt@apple.com>

        Remove the workaround added in r47316.

        Reviewed by Sam Weinig.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):

        * accessibility/AXObjectCache.h:
        Remove the Document argument to the AXObjectCache constructor and the
        m_document member variable, and replace the no-parameter
        handleFocusedUIElementChanged() with the two-parameter GTK function.
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):

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

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (fallbackObject):
        Don't pass a null Document when constructing the AXObjectCache.

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):

        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        Get the document from the RenderObject; m_document was removed.

        * dom/Document.cpp:
        (WebCore::Document::axObjectCache):
        Don't pass the Document when constructing the AXObjectCache.
        (WebCore::Document::setFocusedNode):
        Pass the old and new focused RenderObjects when calling
        handleFocusedUIElementChanged().

2009-09-01  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Check that InspectorDOMAgent and InspectorFrontend are not null
        before accessing them in InspectorBackend. They may be null if
        InspectorController is closed before an asynchronous operation is
        started.

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

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getCookies):
        (WebCore::InspectorBackend::getChildNodes):
        (WebCore::InspectorBackend::setAttribute):
        (WebCore::InspectorBackend::removeAttribute):
        (WebCore::InspectorBackend::setTextNodeValue):
        (WebCore::InspectorBackend::highlight):
        (WebCore::InspectorBackend::nodeForId):
        (WebCore::InspectorBackend::pushNodePathToFrontend):
        (WebCore::InspectorBackend::addNodesToSearchResult):
        (WebCore::InspectorBackend::selectDatabase):
        (WebCore::InspectorBackend::selectDOMStorage):
        (WebCore::InspectorBackend::inspectorDOMAgent):
        (WebCore::InspectorBackend::inspectorFrontend):
        * inspector/InspectorBackend.h:

2009-09-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Page Cache should support pages with frames
        https://bugs.webkit.org/show_bug.cgi?id=13631

        Things learned in the full task that this patch addresses:
        - The notions of clearing a CachedFrame and destroying a CachedFrame were two concepts that 
          needed to be managed separately.
        - Once we start restoring pages with multiple CachedFrames, we'll have to be calling
          FrameLoader::open(CachedFrame&) multiple times with different CachedFrames, and this process
          will be guided by the CachedFrames themselves.

        No new tests. (No change in behavior, current layout tests pass)
        
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::~CachedFrame):
        (WebCore::CachedFrame::clear): Only clear pointers out.
        (WebCore::CachedFrame::destroy): Perform the destructive cleanup work here - Things that shouldn't
          occur simply by navigating back to a page with a CachedFrame.
        * history/CachedFrame.h:

        * history/CachedPage.cpp:
        (WebCore::CachedPage::~CachedPage):
        (WebCore::CachedPage::restore): Call clear() after restoring.
        (WebCore::CachedPage::clear):
        (WebCore::CachedPage::destroy):
        * history/CachedPage.h:

        * history/PageCache.cpp:
        (WebCore::PageCache::releaseAutoreleasedPagesNow): destroy() CachedPages that are being pruned,
          instead of clearing them.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad): Let the CachedPage clear() itself after restoring.
        (WebCore::FrameLoader::open): Don't ::open() the CachedFrame, as the CachedPage does that now.
        * loader/FrameLoader.h:  Add the friending so CachedPage and CachedFrame can better guide the process.
          Even though CachedFrame::restore() isn't used for now, it will be soon.

2009-09-01  Andrei Popescu  <andreip@google.com>

        Reviewed by David Levin.

        Add a "lowMemoryNotification" method to the V8 ScriptController class.
        This is needed in order to allow the host application (Android Web browser in this case)
        to call the v8::V8::LowMemoryNotification() method added to V8 in
        http://code.google.com/p/v8/source/detail?spec=svn2777&r=2725
        
        https://bugs.webkit.org/show_bug.cgi?id=28776


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

2009-09-01  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        V8 Bindings for WebSocket API.
        https://bugs.webkit.org/show_bug.cgi?id=28844

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8WebSocketCustom.cpp: Added.

2009-09-01  Peter Kasting  <pkasting@google.com>

        Unreviewed (build fix).

        Missed a "." -> "->" conversion.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::ReadContext):

2009-09-01  Peter Kasting  <pkasting@google.com>

        Unreviewed (build fix).

        Try to fix Qt build, take 2.  The Qt code had what looks like a
        broken virtual function override.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::ReadContext):
        (WebCore::ImageDecoderQt::setData):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-09-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Uninitialized variable in XSSAuditor
        https://bugs.webkit.org/show_bug.cgi?id=28874

        One ought to initialize variables before use even when it doesn't
        matter.  No behavior change.

        * page/XSSAuditor.h:
        (WebCore::XSSAuditor::CachingURLCanonicalizer::CachingURLCanonicalizer):

2009-09-01  Peter Kasting  <pkasting@google.com>

        Unreviewed (build fix).

        Try to fix Qt build.

        * platform/graphics/ImageSource.cpp:

2009-08-28  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=27965
        Eliminate most of ImageSourceQt.cpp in favor of ImageSource.cpp.

        * WebCore.pro:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        (WebCore::ImageSource::frameIsCompleteAtIndex):

2009-09-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Make InjectedScript self-contained (move necessary
        methods from utilities.js into InjectedScript).

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.generateStylesheet):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._ensureCommandLineAPIInstalled.inspectObject):
        (InjectedScript._ensureCommandLineAPIInstalled):
        (InjectedScript.pushNodeToFrontend):
        (InjectedScript.createProxyObject):
        (Object.type):
        (Object.hasProperties):
        (Object.className):
        (String.prototype.escapeCharacters):
        * inspector/front-end/utilities.js:

2009-09-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: console log message repeat count double.

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

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

2009-09-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Mark Rowe.

        [Gtk] Fix DATALIST build
        https://bugs.webkit.org/show_bug.cgi?id=28826

        Add ENABLE_DATALIST to FEATURE_DEFINES.

        * GNUmakefile.am:

2009-09-01  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        SVGSVGElement suspend methods argument/return types incorrect
        https://bugs.webkit.org/show_bug.cgi?id=28860

        Also fix the style of the argument names.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::suspendRedraw):
        (WebCore::SVGSVGElement::unsuspendRedraw):
        * svg/SVGSVGElement.h:

2009-09-01  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Fix bug 28808:  [Skia] Fix flaky layout test svg/dynamic-updates/SVGClipPathElement-dom-clipPathUnits-attr.html [DEBUG]
        (https://bugs.webkit.org/show_bug.cgi?id=28808)

        The bug fix adds an explicit check for the validity of the path when it is 
        transformed into local coordinates. 
        This was the most suitable place I could find that didn't cause an inordinate 
        amount of refactoring. Also, it seems pertinent and may also catch other cases 
        that are not limited to clipping paths.

        TEST: existing svg/dynamic-updates/SVGClipPathElement-dom-clipPathUnits-attr.html

        * platform/graphics/skia/GraphicsContextSkia.cpp: make isPathSkiaSafe accessible
        (WebCore::):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::currentPathInLocalCoordinates): check Skia safety of path

2009-09-01  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Combining Diacritical Marks (U+0300..) are not handled correctly.
        https://bugs.webkit.org/show_bug.cgi?id=28742 

        Normalize (NFC) a TextRun when the run contains combining diacritical marks
        so that Skia can pick a correct glyph without relying on GSUB table in a font.
        This change is for Chromium Linux.

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

        This function is called when the run contains U+0300..U+036F and converts characters in
        the run to the combined form (NFC) using ICU.

2009-09-01  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Inlined fast paths of V8DOMWrapper::convertNodeToV8Object and
        V8Proxy::createWrapperFromCache.
        https://bugs.webkit.org/show_bug.cgi?id=28848

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertDocumentToV8Object): Special
        function for document wrapping.
        (WebCore::V8DOMWrapper::convertNewNodeToV8Object): Slow case of
        wrapping a new node.
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertNodeToV8Object): Extracted fast
        path from V8DOMWrapper.cpp.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createWrapperFromCacheSlowCase):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::createWrapperFromCache): Extracted fast path
        from V8Proxy.cpp.

2009-09-01  Eric Seidel  <eric@webkit.org>

        No review, windows build fix only.  Clearly I should have read the patch closer. :(

        Allow excluding certain plugins from loading
        https://bugs.webkit.org/show_bug.cgi?id=28677

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::refresh):

2009-09-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Timothy Hatcher.

        Implement conditional breakpoints in the Web Inspector backend
        and add frontend JavaScript stubs.
        https://bugs.webkit.org/show_bug.cgi?id=28846

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::profiles):
        (WebCore::InspectorBackend::addBreakpoint):
        (WebCore::InspectorBackend::updateBreakpoint):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::BreakpointInfo::condition):
        (WebCore::JavaScriptDebugServer::BreakpointInfo::setCondition):
        (WebCore::JavaScriptDebugServer::addBreakpoint):
        (WebCore::JavaScriptDebugServer::breakpointInfo):
        (WebCore::JavaScriptDebugServer::updateBreakpoint):
        (WebCore::JavaScriptDebugServer::updateBreakpointInfo):
        (WebCore::JavaScriptDebugServer::removeBreakpoint):
        (WebCore::JavaScriptDebugServer::hasBreakpoint):
        (WebCore::JavaScriptDebugServer::clearBreakpoints):
        * inspector/JavaScriptDebugServer.h:
        (WebCore::JavaScriptDebugServer::BreakpointInfo::BreakpointInfo):
        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.get id):
        (WebInspector.Breakpoint.prototype.get condition):
        (WebInspector.Breakpoint.prototype.set condition):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.addScript):

2009-09-01  Marius Renn  <damarvy@gmail.com>

        Reviewed by Eric Seidel.

        Added delegate to PluginDatabase to disable loading certain plugins.
        This is useful when you want to load from the standard plugin
        directory, but want to exclude certain plugins. Plugins may be
        excluded early on by name, so that no plugin code is executed (which
        may have caused a crash).

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::PluginDatabase):
        (WebCore::PluginDatabase::refresh):
        * plugins/PluginDatabase.h:
        (WebCore::PluginDatabase::setClient):
        * plugins/PluginDatabaseClient.h: Added.
        (WebCore::PluginDatabaseClient::~PluginDatabaseClient):

2009-08-31  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig

        * WebCore.base.exp: Removed an unneeded symbol export.

2009-08-31  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=28466
        When downloading a file, two GET requests are sent to the HTTP server

        Can't think of a way to test this.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources): only nullify the
        handle's client when it is the ResourceLoader, to support the case
        in which a download API uses a different client

2009-08-31  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        Text Fields and Text Areas are reported as read-only by inspect32.exe.
        https://bugs.webkit.org/show_bug.cgi?id=28854

        Added another case in AcccessibiltyRenderObject::isReadOnly to test if text fields
        and texts areas are read-only.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isReadOnly):
        (WebCore::AccessibilityRenderObject::canSetValueAttribute):

2009-08-31  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

        fast/workers/worker-lifecycle.html crashes intermittently on snowleopard
        https://bugs.webkit.org/show_bug.cgi?id=28795

        Changed WorkerContext::close() to no longer stop the worker thread.
        It is now the parent's responsibility to shut down the worker thread when it is notified that the context is closed.

        * workers/AbstractWorker.cpp:
        Updated dispatchScriptErrorEvent to pass-through the "handled" value from dispatchEvent(), to allow event handlers added with addEventListener() to mark events as handled.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::workerContextClosed):
        Now shuts down the worker thread when notified that the context is closed.
        (WebCore::SharedWorkerProxy::close):
        Now handles being invoked when the context is already in the process of shutting down.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::close):
        No longer calls WorkerThread::stop() to avoid race conditions with shutting down the thread while the parent is still interacting with it.
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::isClosing):
        isClosing() is now public so WorkerRunLoop can call it to determine whether to process tasks.
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::performTask):
        Error events should still be delivered even if the worker thread is closing.
        Also fixed problem where error events were not dispatched if error handlers were added via addEventListener().
        (WebCore::WorkerTerminateTask::create):
        New task that invokes terminateWorkerContext() on the parent thread when the context is closed.
        (WebCore::WorkerTerminateTask::WorkerTerminateTask):
        (WebCore::WorkerTerminateTask::performTask):
        (WebCore::WorkerMessagingProxy::workerContextClosed):
        Now fires off a WorkerTerminateTask to shut down the thread when the context is closed.
        * workers/WorkerMessagingProxy.h:
        WorkerMessagingProxy now overrides workerContextClosed().
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::runInMode):
        Now drops tasks on the floor if the WorkerContext is closing.

2009-08-31  Ojan Vafai  <ojan@chromium.org>

        Not reviewed (build fix)

        Build fix for Chromium to match r49707.

        * bindings/v8/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::KURL):
        (WebCore::blankURL):

2009-08-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28858
        Element.baseURI parses xml:base attribute incorrectly

        Test: fast/dom/base-attribute-parsing.xhtml

        * dom/Element.cpp: (WebCore::Element::baseURI): Avoid assertion failure (no change in
        release mode).

2009-08-31  Dimitri Glazkov  <dglazkov@chromium.org>

        Reverting http://trac.webkit.org/changeset/47904, because it caused
        layout test failure.

        Test: fast/dom/Window/new-window-opener.html

2009-08-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28852
        Rename KURL single argument constructor to avoid confusion

        * platform/KURL.h: The constructor that used to be single argument should now be invoked
        as KURL(ParsedURLString, myString).

        * WebCore.base.exp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        * bindings/js/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        * bindings/v8/NPV8Object.cpp:
        (_NPN_EvaluateHelper):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::createWindow):
        * css/CSSCursorImageValue.cpp:
        (WebCore::isSVGCursorIdentifier):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/StyleBase.cpp:
        (WebCore::StyleBase::baseURL):
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        * dom/Element.cpp:
        (WebCore::Element::baseURI):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::url):
        (WebCore::HistoryItem::originalURL):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::createCached):
        * loader/Cache.cpp:
        (WebCore::Cache::revalidateResource):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestResource):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::getSubresources):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::iconURL):
        (WebCore::FrameLoader::scheduleLocationChange):
        (WebCore::FrameLoader::redirectionTimerFired):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::startRedirectionTimer):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::resourceForURL):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::ApplicationCacheGroup::addEntry):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::loadCache):
        (WebCore::ApplicationCacheStorage::manifestURLs):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createResource):
        (WebCore::LegacyWebArchive::create):
        * loader/loader.cpp:
        (WebCore::Loader::load):
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createHTMLNotification):
        * platform/KURL.cpp:
        (WebCore::KURL::KURL):
        (WebCore::blankURL):
        * platform/KURLHash.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::setData):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie):
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::operator CFErrorRef):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/chromium/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::handleLocalReceiveResponse):
        (WebCore::headerCallback):
        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::operator NSError*):
        * platform/network/mac/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/qt/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/win/ClipboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle):
        (WebCore::ClipboardWin::setData):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLTProcessor.cpp:
        (WebCore::docLoaderFunc):
        Adapt to the change everywhere the single argument constructor was used. I did a very
        cursory check of whether these locations were using this constructor properly, and didn't
        notice any obvious mistakes. The new explicit name will hopefully suggest checking this
        better when refactoring any such code.

2009-08-31  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=28635 [CSS3 
        Backgrounds and Borders] Add support for 2-keyword values for 
        background-repeat

        This patch allows background-repeat to take two values by making 
        background-repeat just like background-position internally. There 
        is a little extra legwork for background-repeat because the spec 
        indicates that its computed value should be equivalent to how it 
        was specified. I keep track of the specified thing by setting the 
        implicit flag whenever background-repeat is defined with only one 
        value (since internally, we now store this as 2 values.)
        
        Here we can't access the implicit flag, so for backwards-
        compatibility's sake, we always return one value when that makes 
        sense.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fillRepeatToCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

        Here we check for the implicit flag and return one value when it is 
        set.
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue):
        (WebCore::CSSMutableStyleDeclaration::cssText):

        Add support for CSSPropertyBackgroundRepeatX and 
        CSSPropertyBackgroundRepeatY
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseFillRepeat):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSParser.h:

        Get rid of mappings to RepeatXFill and RepeatYFill since we don't 
        need those parts of the EFillRepeat enum anymore.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFillRepeat):

        Add CSSPropertyBackgroundRepeatX and CSSPropertyBackgroundRepeatY
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap):

        Add background-repeat-x and -y.
        * css/CSSPropertyNames.in:

        Break repeat into x and y.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapFillRepeatX):
        (WebCore::CSSStyleSelector::mapFillRepeatY):
        * css/CSSStyleSelector.h:

        There is no more RepeatXFill. Instead, look for 
        fillLayer->repeatX() == RepeatFill
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

        Break m_repeat into m_repeatX and m_repeatY
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::fillUnsetProperties):
        (WebCore::FillLayer::cullEmptyLayers):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::repeatX):
        (WebCore::FillLayer::repeatY):
        (WebCore::FillLayer::isRepeatXSet):
        (WebCore::FillLayer::isRepeatYSet):
        (WebCore::FillLayer::setRepeatX):
        (WebCore::FillLayer::setRepeatY):
        (WebCore::FillLayer::clearRepeatX):
        (WebCore::FillLayer::clearRepeatY):
        (WebCore::FillLayer::initialFillRepeatX):
        (WebCore::FillLayer::initialFillRepeatY):

        Again, break backgroundRepeat into backgroundRepeatX and 
        backgroundRepeatY
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::backgroundRepeatX):
        (WebCore::InheritedFlags::backgroundRepeatY):
        (WebCore::InheritedFlags::maskRepeatX):
        (WebCore::InheritedFlags::maskRepeatY):

        We don't need RepeatXFill or RepeatYFill. Now that we store two 
        values, they are represented by Repeat-NoRepeat and NoRepeat-
        Repeat, respectively.
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-08-31  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Compositing layer size needs to take into account software reflections on children.
        https://bugs.webkit.org/show_bug.cgi?id=28837
        
        When computing the bounds of a composited layer, take software-rendered
        reflections into account.

        Test: compositing/reflections/reflection-in-composited.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):

2009-08-31  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dave Hyatt.

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

        Perform a layout prior to checking whether the scrollbar modes are
        off, on, or automatic.  The modes may change during layout.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2009-08-31  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Inspector Request Headers Should Show Data Sent With Request
        https://bugs.webkit.org/show_bug.cgi?id=22920

        Manual test added - see below.

        * English.lproj/localizedStrings.js:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateRequest):
        (WebCore::InspectorResource::createScriptObject):
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/InspectorResource.h:
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._refreshURL):
        (WebInspector.ResourceView.prototype._refreshQueryString):
        (WebInspector.ResourceView.prototype._refreshFormData):
        (WebInspector.ResourceView.prototype._refreshRequestPayload):
        (WebInspector.ResourceView.prototype._refreshParms):
        (WebInspector.ResourceView.prototype._toggleURLdecoding):
        (WebInspector.ResourceView.prototype._getHeaderValue):
        (WebInspector.ResourceView.prototype._refreshRequestHeaders):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.addResource):
        (WebInspector.updateResource):
        * manual-tests/inspector/display-form-data.html: Added.

2009-08-31  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: pass call frames into the frontend as a part of
        pausedScript event.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didPause):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::pausedScript):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.debuggerPaused):
        * inspector/front-end/inspector.js:
        (WebInspector.pausedScript):

2009-08-31  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Un-blacklist Silverlight on Mac

        Does not seem to crash anymore, probably due to how we now handle
        drawing and event model handshake better.

        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted):

2009-08-31  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28827
        SVGSVGElement.unsuspendRedraw() shouldn't throw

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::unsuspendRedraw):
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl:

2009-08-31  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        - Change the reutrn type of HTMLInputElement::list so that it
          conforms to the standard.
        - Add HTMLInputElement::dataList()
        https://bugs.webkit.org/show_bug.cgi?id=28769


        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::list):
        (WebCore::HTMLInputElement::dataList):
        (WebCore::HTMLInputElement::selectedOption):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:

2009-08-31  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Remove ASSERT(frame) in ResourceHandle::start (ResourceHandleCurl.cpp)
        https://bugs.webkit.org/show_bug.cgi?id=28802

        Remove ASSERT because the frame could be null if the
        ResourceHandle is not associated with any frame, e.g. if we are
        downloading a file.
        If the frame is not null but the page is null this must be an
        attempted load from an onUnload handler, so let's just block it.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):

2009-08-31  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Build fix for platforms which don't enable DOM_STORAGE.
        https://bugs.webkit.org/show_bug.cgi?id=28834

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):

2009-08-29  Adele Peterson  <adele@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=28829
        Crash in AccessibilityRenderObject::activeDescendant when trying to set aria-activedescendant to something without a renderer

        Test: accessibility/aria-activedescendant-crash.html

        * accessibility/AccessibilityRenderObject.cpp: (WebCore::AccessibilityRenderObject::activeDescendant): Nil check.

2009-08-28  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Oliver Hunt.

        Gtk Build broken for OSX Quartz
        https://bugs.webkit.org/show_bug.cgi?id=28727

        Check for XP_UNIX instead of GTK or X11 to ease building of the Gtk
        port in Mac and Unix/Linux.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::getValue):
        (WebCore::PluginView::init):

2009-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix positioning error when a compositing, absolutely-positioned element has an ancestor with opacity.
        https://bugs.webkit.org/show_bug.cgi?id=28754
        
        For absolutely-positioned layers, convertToLayerCoords() jumps to the positioned
        ancestor, since the layer x and y are relative to that ancestor. However, this could
        skip over the ancestorLayer, thus giving the wrong result.
        
        Fix by duplicating the enclosingPositionedAncestor() logic in convertToLayerCoords(),
        and checking for ancestorLayer along the way. If found, compute offset of both to
        the enclosingPositionedAncestor() and subtract.
        
        This also fixes a positioning bug with abs. positioned elements in reflections,
        so there is a new reflection test with a pixel result.

        Tests: compositing/geometry/abs-position-inside-opacity.html
               fast/reflections/abs-position-in-reflection.html

        * rendering/RenderLayer.cpp:
        (WebCore::isPositionedContainer):
        (WebCore::RenderLayer::enclosingPositionedAncestor):
        (WebCore::RenderLayer::enclosingTransformedAncestor):
        (WebCore::RenderLayer::convertToLayerCoords):

2009-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe

        Wrap WebkitCSSTransformValues in the correct class of DOM wrapper.
        https://bugs.webkit.org/show_bug.cgi?id=27727

        When fetching the DOM wrapper for a WebkitCSSTransformValue (which is a kind of 
        CSSValueList), we need to ask the value list whether it's a WebkitCSSTransformValue,
        because there is not a unique enum value for WebkitCSSTransformValue.

        * bindings/objc/DOMCSS.mm:
        (kitClass):

2009-08-28  Peter Kasting  <pkasting@google.com>

        Reviewed by Jan Michael Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=28308
        Fix some warnings introduced by r47381.

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

2009-08-28  Ada Chan  <adachan@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=21442
        Make sure filesystemPathFromUrlOrTitle() returns a string with length
        <= MAX_PATH - 1.

        * platform/win/ClipboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle):

2009-08-28  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding Chromium's VFS for Linux and Mac.

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

        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        (WebCore::SQLiteFileSystem::deleteDatabaseFile):
        * platform/sql/chromium/SQLiteFileSystemChromiumLinux.cpp: Removed.
        * platform/sql/chromium/SQLiteFileSystemChromiumMac.cpp: Removed.
        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp: Added.
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:

2009-08-28  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Made bindings use Node::setOnEvent functions for Node descendants
        instead of Node::setAttributeEventListener.

        Node::setAttributeEventListener is an internal function and
        doesn't do the forwarding to DOM window that is required for some
        HTML elements.
        https://bugs.webkit.org/show_bug.cgi?id=28709

        Tests added in http://trac.webkit.org/changeset/47326 now pass with V8.

        * bindings/scripts/CodeGeneratorV8.pm:
        Now generates EventListener accessors for Node descendants instead
        of using custom callbacks.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getEventListener): Moved from V8NodeCustom.cpp.
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object): Fixed a bug in
        signature.
        * bindings/v8/V8Utilities.cpp:
        (WebCore::createHiddenDependency):
        (WebCore::removeHiddenDependency):
        Changed signature to accept Handle instead of Local.
        * bindings/v8/V8Utilities.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Removed custom callbacks for EventListener accessors.

2009-08-28  Ben Murdoch  <benm@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=28803
        
        Implements V8CustomVoidCallback reporting any exceptions that were thrown from the callback function.

        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallback): Checks if the callback raised an exception and reports it to WebCore if so.

2009-08-28  Peter Kasting  <pkasting@google.com>

        Not reviewed (build fix).

        * platform/graphics/qt/ImageDecoderQt.cpp: Accidentally added some spaces.
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        * platform/graphics/qt/ImageDecoderQt.h: Make constructor public so factory function can access it (this seemed better than making ImageDecoder a friend).

2009-08-28  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=27965
        Move ImageDecoder creation function to a factory function on
        ImageDecoder.  This is arguably where it makes the most sense anyway,
        and it will (soon) allow ImageSourceQt.cpp to have one less dedicated
        function.

        * platform/graphics/ImageSource.cpp:
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoder::create):
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::setData):
        * platform/image-decoders/ImageDecoder.cpp:
        * platform/image-decoders/ImageDecoder.h:

2009-08-28  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28785
        Combine duplicated code from ImageDecoder*.cpp into the main
        ImageDecoder.cpp.

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        * platform/image-decoders/haiku/ImageDecoderHaiku.cpp:
        * platform/image-decoders/wx/ImageDecoderWx.cpp:

2009-08-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25889
        [GTK] scrollbar policy for main frame is not implementable

        Override setScrollbarModes to correctly forward scrollbar modes
        policy changes to client code, via a new platform-specific method,
        scrollbarsPolicyDidChange.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::scrollbarsPolicyDidChange):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::createScrollbar):
        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setScrollbarModes):

2009-08-28  Cédric Luthi <cedric.luthi@gmail.com>

        Reviewed by Tor Arne Vestbø

        [Qt/Mac] Un-blacklist the QuickTime plugin

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

        Now that the drawing model is properly negotiated, there is no need the
        blacklist the QuickTime plugin anymore.

        This revealed a bug in PluginView::performRequest: it should not initiate a
        request if the plugin has been stopped, which is what happens when a plugin
        only supports the QuickDraw drawing model.

        * plugins/PluginView.cpp:
        * plugins/mac/PluginPackageMac.cpp:

2009-08-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Set DOM agent document to 0 in InspectorController::close to
        make DOM agent remove DOM listeners from the inspected document.

        Replace windowVisible checks with m_frontend checks to as inspector
        window lives in a different process in Chromium while frontend proxy
        is in the inspected page process.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::pruneResources):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::didOpenDatabase):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::addProfile):
        * inspector/InspectorController.h:

2009-08-28  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Remove dependency of SummaryBar on WebInspector.resourceCategories.

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

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.toolbarItemClass.get categories):
        * inspector/front-end/SummaryBar.js:
        (WebInspector.SummaryBar):
        (WebInspector.SummaryBar.prototype.update):

2009-08-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed (patching in l18n change that was missing due to
        the git binary diff format).

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

        * English.lproj/localizedStrings.js:

2009-08-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make XSSAuditor go fast
        https://bugs.webkit.org/show_bug.cgi?id=28667

        Make the XSSAuditor go faster by implementing two optimizations:

        1) We avoid canonicalizing scripts that are larger than the page's URL.
           This saves a bunch of time for large inline scripts.

        2) We memoize canonicalizing the page's URL because it's silly to
           canonicalize repeated for each inline event listener.

        These optimizations have a measurable affect on the intl1 page cycler.

        No behavior change.

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::MemoizingURLCanonicalizer::canonicalizeURL):
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::canSetBaseElementURL):
        (WebCore::XSSAuditor::decodeURL):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:

2009-08-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Removed ASSERT_NOT_REACHED, because indeed this ASSERT is reached in
        fast/canvas/change-context.html. And it's alright to reach it.

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Removed assertion.

2009-08-27  Jeremy Orlow  <jorlow@chromium.org>

        Not reviewed.  Build fix for http://trac.webkit.org/changeset/47840

        Peter's change forgot one m_decoder->

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::frameSizeAtIndex):

2009-08-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Add NULL-check, since the context ain't changeable no more, and
        thus getContext could return 0.

        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Added NULL-check.

2009-08-27  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Eric Seidel.

        dataTransfer.types() should include type "Files" when files are present in the clipboard.
        https://bugs.webkit.org/show_bug.cgi?id=28780

        Add dataTransfer type "Files" to the chromium port.  Add eseidel's
        patch for same for the mac port.

        * platform/chromium/ClipboardChromium.cpp:

2009-08-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Removed GL_ from all constants, and gl prefix from all calls
        https://bugs.webkit.org/show_bug.cgi?id=28773

        This was done for the external API in CanvasRenderingContext3D and
        the internal API in GraphicsContext3D.

        * html/canvas/CanvasRenderingContext3D.cpp:
        * html/canvas/CanvasRenderingContext3D.h:
        * bindings/js/JSCanvasRenderingContext3DCustom.cpp:
        * html/canvas/CanvasRenderingContext3D.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:

2009-08-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Qt and Gtk build fixes. Not reviewed.

        Add CanvasRenderingContext3D.idl to the build scripts.

        * GNUmakefile.am:
        * WebCore.pro:

2009-08-27  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Release the storage mutex whenever leaving JavaScript execution.
        https://bugs.webkit.org/show_bug.cgi?id=28789

        http://dev.w3.org/html5/spec/Overview.html#storage-mutex describes the
        required behavior.  After we leave JavaScript, we must be sure the storage
        mutex has been released.  At the end of evaluate(), if localStorage has been
        instantiated, tell it to release any locks that may be applicable.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):

2009-08-27  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=28753
        <rdar://problem/7173448> Excessive number of threads (and a crash)

        Coalesce DNS prefetch requests to reduce strain on CFHost. Currently, the algorithm is as follows:
        - when resolver is idle, the first few requests are sent immediately (they may or may not
        hit the wire);
        - if there are a few requests in flight already, coalesce all requests for one second;
        - to avoid pathological cases with lots of links to different sites on a page, only ask
        CFHost about a handful of names (dropping the rest).

        Coalescing reduces the number of requests dramatically, as prefetchDNS is called for each
        link, and these tend to have identical host name.

        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::DNSResolveQueue::DNSResolveQueue):
        (WebCore::DNSResolveQueue::shared):
        (WebCore::DNSResolveQueue::add):
        (WebCore::DNSResolveQueue::decrementRequestCount):
        (WebCore::DNSResolveQueue::fired):
        (WebCore::clientCallback):
        (WebCore::DNSResolveQueue::resolve):
        (WebCore::prefetchDNS):

2009-08-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Final patch for Canvas 3D support
        https://bugs.webkit.org/show_bug.cgi?id=28018

        This hooks everything up and provides a working implementation of
        Canvas 3D. I plumb the creation of the 3D canvas down to GraphicsLayer,
        passing the opaque context and texture pointers so a Canvas3DLayer can be
        created (more on that later). It also plumbs changes to the 3D canvas so
        that Canvas3DLayer can recomposite the results.
        
        A 3D Canvas element needs a RenderLayer and compositing layer to render.
        This is because it renders to an off-screen texture in the GPU and then
        hands it to a Canvas3DLayer, which is a subclass of CAOpenGLLayer, to
        render that texture as a 3D quad. This keeps everything in GPU memory to 
        maximize performance. When a CanvasRenderingContext3D is created it 
        forces a style recalc which creates the RenderLayer and compositing 
        layer if needed. 
        
        I repurposed an existing flag which was put in place for animation to accomplish 
        this. This flag is passed to setNeedsStyleRecalc(), and I renamed it from 
        AnimationStyleChange to SyntheticStyleChange. It essentially says that you need
        to do a complete style recalc, even though the style itself has not really
        changed.
        
        This patch also fixes a couple of bugs discovered when testing with 3d-canvas
        turned on. I also added a constructor DOMWindow.idl for CanvasRenderingContext3D.
        This is needed when making a JS wrapper for the object so the prototype 
        property can be set.

        Test: fast/canvas/change-context.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasRenderingContext3DCustom.cpp:
        (WebCore::JSCanvasRenderingContext3D::glDrawElements):
        * bindings/js/JSCanvasRenderingContextCustom.cpp:
        (WebCore::toJS):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * dom/Node.cpp:
        (WebCore::Node::setNeedsStyleRecalc):
        * dom/Node.h:
        (WebCore::):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::is3D):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasBuffer.cpp:
        (WebCore::CanvasBuffer::create):
        (WebCore::CanvasBuffer::CanvasBuffer):
        (WebCore::CanvasBuffer::_deleteObject):
        * html/canvas/CanvasBuffer.h:
        * html/canvas/CanvasFramebuffer.cpp:
        (WebCore::CanvasFramebuffer::create):
        (WebCore::CanvasFramebuffer::CanvasFramebuffer):
        (WebCore::CanvasFramebuffer::_deleteObject):
        * html/canvas/CanvasFramebuffer.h:
        * html/canvas/CanvasObject.cpp:
        (WebCore::CanvasObject::CanvasObject):
        (WebCore::CanvasObject::~CanvasObject):
        (WebCore::CanvasObject::deleteObject):
        * html/canvas/CanvasObject.h:
        (WebCore::CanvasObject::context):
        * html/canvas/CanvasProgram.cpp:
        (WebCore::CanvasProgram::create):
        (WebCore::CanvasProgram::CanvasProgram):
        (WebCore::CanvasProgram::_deleteObject):
        * html/canvas/CanvasProgram.h:
        * html/canvas/CanvasRenderbuffer.cpp:
        (WebCore::CanvasRenderbuffer::create):
        (WebCore::CanvasRenderbuffer::CanvasRenderbuffer):
        (WebCore::CanvasRenderbuffer::_deleteObject):
        * html/canvas/CanvasRenderbuffer.h:
        * html/canvas/CanvasRenderingContext3D.cpp:
        (WebCore::CanvasRenderingContext3D::createBuffer):
        (WebCore::CanvasRenderingContext3D::createFramebuffer):
        (WebCore::CanvasRenderingContext3D::createTexture):
        (WebCore::CanvasRenderingContext3D::createProgram):
        (WebCore::CanvasRenderingContext3D::createRenderbuffer):
        (WebCore::CanvasRenderingContext3D::createShader):
        * html/canvas/CanvasRenderingContext3D.h:
        (WebCore::CanvasRenderingContext3D::graphicsContext3D):
        * html/canvas/CanvasShader.cpp:
        (WebCore::CanvasShader::create):
        (WebCore::CanvasShader::CanvasShader):
        (WebCore::CanvasShader::_deleteObject):
        * html/canvas/CanvasShader.h:
        * html/canvas/CanvasTexture.cpp:
        (WebCore::CanvasTexture::create):
        (WebCore::CanvasTexture::CanvasTexture):
        (WebCore::CanvasTexture::_deleteObject):
        * html/canvas/CanvasTexture.h:
        * page/DOMWindow.idl:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::setNeedsStyleRecalc):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        (WebCore::AnimationControllerPrivate::pauseAnimationAtTime):
        (WebCore::AnimationControllerPrivate::pauseTransitionAtTime):
        (WebCore::AnimationController::cancelAnimations):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformTexture):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsToGraphicsContext3D):
        (WebCore::GraphicsLayer::setGraphicsContext3DNeedsDisplay):
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::reshape):
        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::commitLayerChanges):
        (WebCore::GraphicsLayerCA::updateContentsGraphicsContext3D):
        (WebCore::GraphicsLayerCA::setContentsToGraphicsContext3D):
        (WebCore::GraphicsLayerCA::setGraphicsContext3DNeedsDisplay):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::requiresLayer):
        * rendering/RenderHTMLCanvas.h:
        (WebCore::RenderHTMLCanvas::isCanvas):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::canUseDirectCompositing):
        (WebCore::RenderLayerBacking::rendererContentChanged):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isCanvas):

2009-08-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28751
        Clean up ImageDecoder*.cpp a bit.

        * platform/image-decoders/ImageDecoder.cpp: Put functions in the same
          order as in the header file.  Also, since there's already an anonymous
          namespace in this file, use it to enclose the local helper functions.
        (WebCore::):
        (WebCore::ImageDecoder::upperBoundScaledX):
        (WebCore::ImageDecoder::lowerBoundScaledX):
        (WebCore::ImageDecoder::scaledY):
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        (WebCore::RGBA32Buffer::width): Style fix.
        (WebCore::RGBA32Buffer::height): Style fix.
        * platform/image-decoders/haiku/ImageDecoderHaiku.cpp:
        (WebCore::RGBA32Buffer::copyBitmapData): Ensure m_size is set correctly.
        (WebCore::RGBA32Buffer::asNewNativeImage): Remove unneeded temp.
        (WebCore::RGBA32Buffer::operator=): Simplify.
        * platform/image-decoders/wx/ImageDecoderWx.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage): Try and collect spaced-out temps under loop comment to show they're all related.  Use size_t for iterating over elements of a Vector.
        (WebCore::RGBA32Buffer::width): Style fix.
        (WebCore::RGBA32Buffer::height): Style fix.

2009-08-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28751
        Clean up ImageSource.* in preparation for more fixes on bug 27965.

        * platform/graphics/ImageSource.cpp: Put functions in the same order as in header file.
        (WebCore::ImageSource::isSizeAvailable): Shorten.
        (WebCore::ImageSource::size): Shorten.
        (WebCore::ImageSource::frameSizeAtIndex): Shorten.
        (WebCore::ImageSource::repetitionCount): Shorten.
        (WebCore::ImageSource::frameIsCompleteAtIndex):
        * platform/graphics/ImageSource.h: Shorten #ifdef section a bit by sharing common typedefs.

2009-08-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28785
        Add ImageDecoder.cpp to various build files so platforms will be able to
        use it.  Move an ENABLE to not cover the whole file, in preparation for
        adding a bunch of code.  Simplify #ifdefs in ImageDecoder.h to be "Skia
        vs. everyone else", which also gives new platforms a reasonable default
        behavior.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCoreSources.bkl:
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):

2009-08-27  Antti Koivisto  <antti@apple.com>

        Reviewed by Dave Kilzer.
        
        https://bugs.webkit.org/show_bug.cgi?id=28784
        
        Add an exported method to flush pending repaints.

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::layoutIfNeededRecursive):
        (WebCore::FrameView::flushDeferredRepaints):
        * page/FrameView.h:

2009-08-27  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Eric Seidel.

        [V8] Expose files from the pasteboard in drop events.
        https://bugs.webkit.org/show_bug.cgi?id=28782

        Update chromium port to expose dataTransfer.files() as per
        HTML5 drag drop (Aug 2009 edition).

        * platform/chromium/ClipboardChromium.cpp:

2009-08-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Dmitry Glazkov.

        ScriptState now keeps explicit Handle of devtools front-end
        utility context instead of trying to retrieve it from inspected
        Frame.

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

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/ScriptScope.cpp:
        (WebCore::ScriptScope::ScriptScope):
        * bindings/v8/ScriptState.cpp:
        (WebCore::ScriptState::ScriptState):
        (WebCore::ScriptState::~ScriptState):
        (WebCore::scriptStateFromPage):
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptState::context):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::~ScriptValue):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::frontendScriptState):

2009-08-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Console won't close.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._updateModifiedNodes):
        * inspector/front-end/utilities.js:
        (Node.prototype.isAncestor):

2009-08-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix a typo in files() causing image drags to have junk file arrays.
        https://bugs.webkit.org/show_bug.cgi?id=28755

        Test: editing/pasteboard/files-during-page-drags.html

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::files):

2009-08-27  Jeremy Orlow  <jorlow@chromium.org>

        Not reviewed.  Build fix for Chromium.

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-08-27  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * DerivedSources.cpp: Added JSPageTransitionEvent.cpp to DerivedSources.cpp.

2009-08-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=28758
        <rdar://problem/6440869> Implement pageshow and pagehide events for b/f cache (28758)

        Tests: fast/events/pageshow-pagehide-on-back-cached.html
               fast/events/pageshow-pagehide-on-back-uncached.html
               fast/events/pageshow-pagehide.html

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::stopLoading): Dispatch pagehide event
        (this function is called both when a document goes away, and when it goes to b/f cache).

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents): Dispatch pagehide right before unload.
        (WebCore::DOMWindow::dispatchPageTransitionEvent): Do what it takes to add a new event handler
        that can be installed on Window object.
        (WebCore::DOMWindow::onpagehide): Ditto.
        (WebCore::DOMWindow::setOnpagehide): Ditto.
        (WebCore::DOMWindow::onpageshow): Ditto.
        (WebCore::DOMWindow::setOnpageshow): Ditto.

        * history/CachedFrame.cpp: (WebCore::CachedFrame::restore): Dispatch pageshow for a page
        that isn't being restored from cache.

        * dom/PageTransitionEvent.cpp: Added.
        (WebCore::PageTransitionEvent::PageTransitionEvent):
        (WebCore::PageTransitionEvent::~PageTransitionEvent):
        (WebCore::PageTransitionEvent::initPageTransitionEvent):
        * dom/PageTransitionEvent.h: Added.
        (WebCore::PageTransitionEvent::create):
        (WebCore::PageTransitionEvent::isPageTransitionEvent):
        (WebCore::PageTransitionEvent::persisted):
        * dom/PageTransitionEvent.idl: Added.
        Add event class implementation.

        * html/HTMLBodyElement.cpp: (WebCore::HTMLBodyElement::parseMappedAttribute): Support
        inline listener definition (note that adding listeners to document.body programmatically
        is not supported, matching Firefox).

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Dispatch pageshow event right before load event.
        (WebCore::Document::dispatchPageTransitionEvent): Do what it takes to add a new event for
        Docuemnt.
        (WebCore::Document::createEvent): Ditto.

        * dom/Document.h: Added dispatchPageTransitionEvent.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSEventCustom.cpp: (WebCore::toJS):
        * dom/Event.cpp: (WebCore::Event::isPageTransitionEvent):
        * dom/Event.h:
        * dom/EventNames.h:
        * html/HTMLAttributeNames.in:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        Do what it takes to add a new event type.

2009-08-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by NOBODY (build fix).

        Adding missing file from previous commit.

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

        * inspector/front-end/SummaryBar.js: Added.
        (WebInspector.SummaryBar):
        (WebInspector.SummaryBar.prototype.get calculator):
        (WebInspector.SummaryBar.prototype.set calculator):
        (WebInspector.SummaryBar.prototype.reset):
        (WebInspector.SummaryBar.prototype.update):
        (WebInspector.SummaryBar.prototype._drawSwatch.drawSwatchSquare):
        (WebInspector.SummaryBar.prototype._drawSwatch):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph.var):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph.drawPill):
        (WebInspector.SummaryBar.prototype._fadeOutRect):
        (WebInspector.SummaryBar.prototype._makeLegendElement):

2009-08-27  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Factor out Factor out summary bar from Resources panel.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._updateSummaryGraph):
        (WebInspector.ResourcesPanel.prototype._updateDividersLabelBarPosition):
        (WebInspector.ResourcesPanel.prototype._changeSortingFunction):
        * inspector/front-end/SummaryBar.js: Added.
        (WebInspector.SummaryBar):
        (WebInspector.SummaryBar.prototype.get calculator):
        (WebInspector.SummaryBar.prototype.set calculator):
        (WebInspector.SummaryBar.prototype.reset):
        (WebInspector.SummaryBar.prototype.update):
        (WebInspector.SummaryBar.prototype._drawSwatch.drawSwatchSquare):
        (WebInspector.SummaryBar.prototype._drawSwatch):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph.var):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph):
        (WebInspector.SummaryBar.prototype._drawSummaryGraph.drawPill):
        (WebInspector.SummaryBar.prototype._fadeOutRect):
        (WebInspector.SummaryBar.prototype._makeLegendElement):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-08-26  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Start adding heap profiler to Inspector (hidden behind a flag.)

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel.prototype.reset):
        (WebInspector.ProfilesPanel.prototype.addProfile):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        (WebInspector.ProfilesPanel.prototype._snapshotClicked):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js: added Preferences.heapProfilerPresent flag.

2009-08-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Metrics sidebar editing is broken.

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

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

2009-08-27  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

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

        Make KURLGoogle.cpp's decodeURLEscapeSequences decode %00 to match
        KURL.cpp.  This makes the XSSAuditor tests pass when using KURLGoogle.

        * platform/KURLGoogle.cpp:
        (WebCore::decodeURLEscapeSequences):

2009-08-27  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Build fix, missing functions after r47763.

        * platform/qt/Localizations.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):

2009-08-26  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Removing trailing whitespaces from all storage classes.

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

        * storage/ChangeVersionWrapper.cpp:
        * storage/Database.cpp:
        * storage/Database.h:
        * storage/DatabaseDetails.h:
        * storage/DatabaseThread.cpp:
        * storage/DatabaseTracker.cpp:
        * storage/DatabaseTracker.h:
        * storage/LocalStorageTask.cpp:
        * storage/LocalStorageTask.h:
        * storage/LocalStorageThread.cpp:
        * storage/LocalStorageThread.h:
        * storage/OriginQuotaManager.cpp:
        * storage/OriginUsageRecord.cpp:
        * storage/OriginUsageRecord.h:
        * storage/SQLError.h:
        * storage/SQLResultSetRowList.h:
        * storage/SQLStatement.cpp:
        * storage/SQLStatement.h:
        * storage/SQLStatementCallback.h:
        * storage/SQLStatementErrorCallback.h:
        * storage/SQLTransaction.cpp:
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCallback.h:
        * storage/SQLTransactionErrorCallback.h:
        * storage/Storage.cpp:
        * storage/Storage.h:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        * storage/StorageAreaSync.h:
        * storage/StorageEvent.cpp:
        * storage/StorageEvent.h:
        * storage/StorageMap.cpp:
        * storage/StorageMap.h:
        * storage/StorageNamespaceImpl.cpp:
        * storage/StorageSyncManager.cpp:
        * storage/StorageSyncManager.h:

2009-08-26  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=28763, flickering when opacity changes.

        Make opacity changes from < 1 to 1 and from 1 to < 1 cause a relayout to happen.  We need
        to do this in order for overflow information to be properly recomputed.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):

2009-08-26  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        HTMLMediaElement sometimes loses events
        https://bugs.webkit.org/show_bug.cgi?id=28762
        <rdar://problem/7172437>

        A media element triggers the resource selection algorithm if 
        play() is called when the networkState attribute is NETWORK_EMPTY, but
        it also immediately queues 'play' and either 'waiting' or 'playing' events.
        One of the steps in preparing to load is to flush pending events, so those 
        events were lost if the load timer fired quickly enough. Fixed by deleting
        pending events before scheduling the load timer.

        Test: media/audio-play-event.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::scheduleLoad):
            Do nothing if the load timer is already scheduled. Call prepareForLoad so queue of 
            pending events is flushed immediately.
        (WebCore::HTMLMediaElement::scheduleNextSourceChild):
            New, start the load timer without flushing pending events.
        (WebCore::HTMLMediaElement::load):
            Call prepareForLoad();
        (WebCore::HTMLMediaElement::prepareForLoad):
            New, load setup code moved from loadInternal.
        (WebCore::HTMLMediaElement::loadInternal):
            Moved some setup code to prepareForLoad so it can be invoked immediately before
            arming the load timer.
        (WebCore::HTMLMediaElement::setNetworkState):
            Call scheduleNextSourceChild instead of scheduleLoad as the later now clears
            pending events.
        * html/HTMLMediaElement.h:
            Declare scheduleNextSourceChild.

2009-08-26  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28751
        Switch ICO decoder from a Vector of raw pointers to a Vector of
        OwnPtrs now that that is possible.  Makes code slightly simpler.

        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decodeAtIndex):
        (WebCore::ICOImageDecoder::processDirectory):
        * platform/image-decoders/ico/ICOImageDecoder.h:

2009-08-26  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=28718, image inside relpositioned inline doesn't paint.
        Make sure vertical overflow is still computed across self-painting layers, even though it isn't
        propagated to parents.

        Added fast/repaint/rel-positioned-inline-with-overflow.html

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

2009-08-26  David Levin  <levin@chromium.org>

        Reviewed by Darin Fisher.

        ResourceRequestBase::*[Aa]llowHTTPCookies shouldn't mention http.
        https://bugs.webkit.org/show_bug.cgi?id=28735

        Renaming the method to imply its wider implications of affecting cookies
        over any protocol that supports them.

        No change in functionality so no new tests.

        * WebCore.order:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        (WebCore::ResourceRequestBase::allowCookies):
        (WebCore::ResourceRequestBase::setAllowCookies):
        (WebCore::equalIgnoringHeaderFields):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage):

2009-08-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Made RenderInline::clippedOverflowRectForRepaint() actually include
        overflow.

        Test: fast/repaint/inline-overflow.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesVisibleOverflowBoundingBox): Added. Returns
            the bounding box of all lines’ visible overflow boxes (under the
            assumption that the first and last lines determine the top and
            bottom, respectively).
        (WebCore::RenderInline::clippedOverflowRectForRepaint): Changed to use
            linesVisibleOverflowBoundingBox() instead of linesBoundingBox().
        * rendering/RenderInline.h:

2009-08-26  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        minor style correction and include fix for notifications
        https://bugs.webkit.org/show_bug.cgi?id=28745

        No change in behavior, so no tests.

        * bindings/js/JSDesktopNotificationsCustom.cpp: add include of Error.h
        * notifications/Notification.cpp: change enum style to InterCaps
        (WebCore::Notification::Notification):
        * notifications/NotificationPresenter.h:
        (WebCore::NotificationPresenter::):

2009-08-25  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        postMessage() spec now supports sending arrays of ports
        https://bugs.webkit.org/show_bug.cgi?id=26902

        Added support for sending multiple ports at once via postMessage(). JS bindings will be updated in an upcoming patch.

        No new tests, since the new functionality is not exposed via new JS bindings yet, so the old tests suffice.

        * WebCore.xcodeproj/project.pbxproj:
        Mark MessagePort.h and MessagePortChannel.h as private since they are used by WebKit now.
        * dom/MessageEvent.cpp:
        Updated APIs to support passing MessagePortArrays.
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        (WebCore::MessageEvent::messagePort):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        Now accepts a MessagePortArray parameter instead of a single MessagePort.
        (WebCore::MessageEvent::ports):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::disentanglePorts):
        Added new static function to extract a MessagePortChannelArray from a MessagePortArray.
        (WebCore::MessagePort::entanglePorts):
        Added new static function to generate a MessagePortArray (entangled ports) from a MessagePortChannelArray.
        * dom/MessagePort.h:
        * dom/MessagePortChannel.cpp:
        EventData now contains a MessagePortChannelArray field instead of a single MessagePortChannel.
        (WebCore::MessagePortChannel::EventData::create):
        (WebCore::MessagePortChannel::EventData::EventData):
        * dom/MessagePortChannel.h:
        (WebCore::MessagePortChannel::EventData::channels):
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
        (WebCore::PostMessageTimer::event):
        (WebCore::DOMWindow::postMessage):
        Now accepts a MessagePortArray parameter instead of a single MessagePort.
        * page/DOMWindow.h:
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::postMessage):
        Now accepts a MessagePortArray parameter instead of a single MessagePort.
        (WebCore::DedicatedWorkerContext::dispatchMessage):
        * workers/DedicatedWorkerContext.h:
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):
        Now accepts a MessagePortArray parameter instead of a single MessagePort.
        (WebCore::Worker::dispatchMessage):
        * workers/Worker.h:
        * workers/WorkerContextProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        Updated WorkerObjectProxy and WorkerContextProxy API implementations to support sending multiple MessagePorts.
        (WebCore::MessageWorkerContextTask::create):
        (WebCore::MessageWorkerContextTask::MessageWorkerContextTask):
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::MessageWorkerTask::create):
        (WebCore::MessageWorkerTask::MessageWorkerTask):
        (WebCore::MessageWorkerTask::performTask):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:
        Updated WorkerObjectProxy and WorkerContextProxy APIs to support sending multiple MessagePorts.

2009-08-26  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        SocketStreamHandle interface for WebSocket API
        https://bugs.webkit.org/show_bug.cgi?id=28037

        Add build systems only for GNUmakefile.am and WebCore.xcodeproj.now.
        Other build systems will be updated once the code is functional.
        Tests will be landed once this code is complete and functional.

        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/SocketStreamErrorBase.cpp: Added.
        * platform/network/SocketStreamErrorBase.h: Added.
        * platform/network/SocketStreamHandleBase.cpp: Added.
        * platform/network/SocketStreamHandleBase.h: Added.
        * platform/network/SocketStreamHandleClient.h: Added.
        * platform/network/cf/SocketStreamError.h: Added.
        * platform/network/cf/SocketStreamHandle.h: Added.
        * platform/network/cf/SocketStreamHandleCFNet.cpp: Added.
        * platform/network/soup/SocketStreamError.h: Added.
        * platform/network/soup/SocketStreamHandle.h: Added.
        * platform/network/soup/SocketStreamHandleSoup.cpp: Added.

2009-08-26  Mads Ager  <ager@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] setTimeout does not convert non-string argument to string
        https://bugs.webkit.org/show_bug.cgi?id=28739

        Convert non-string argument to setTimeout to string in the V8
        bindings.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):

2009-08-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [ES5] Implement getOwnPropertyDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=28724

        Implement the WebCore side of getOwnPropertyDescriptor.  This
        requires a custom implementation of getOwnPropertyDescriptor
        for every class with a custom implementation of getOwnPropertySlot.

        The bindings generator has been updated to generate appropriate
        versions of getOwnPropertyDescriptor for the general case where
        a custom getOwnPropertyDescriptor is not needed.  ES5 is vague
        about how getOwnPropertyDescriptor should work in the context of
        "host" functions with polymorphic [[GetOwnProperty]], so it seems
        okay that occasionally we "guess" what attributes -- eg. determining
        whether a property is writable.

        Test: fast/js/getOwnPropertyDescriptor.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::getOwnPropertyDescriptor):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertyDescriptorDelegate):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::getOwnPropertyDescriptor):
        * bindings/js/JSNamedNodesCollection.h:
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::runtimeObjectCustomGetOwnPropertyDescriptor):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::getOwnPropertyDescriptor):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::getOwnPropertyDescriptorDelegate):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::getOwnPropertyDescriptor):
        * bridge/runtime.h:
        (JSC::Bindings::Instance::getOwnPropertyDescriptor):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertyDescriptor):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::getOwnPropertyDescriptor):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::getOwnPropertyDescriptor):
        * bridge/runtime_object.h:

2009-08-26  Vincent Untz <vuntz@gnome.org>

        Reviewed by Xan Lopez.

        GObject checks for NULL (and not 0) in g_object_get, so use that
        as we were already doing elsewhere to make the compiler happy.

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

2009-08-26  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        RenderThemeMac.mm has incorrect casting for media control element.
        https://bugs.webkit.org/show_bug.cgi?id=28730

        MediaControlMuteButtonElement was incorrectly casted to
        MediaControlPlayButtonElement. This is corrected in this patch.

        No new tests because this is code cleanup and is already covered by existing
        media layout tests.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaMuteButton):

2009-08-26  Robert Sesek  <rsesek@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Multi-value select boxes cannot do non-contiguous selection on Mac
        https://bugs.webkit.org/show_bug.cgi?id=28670

        Change the condition regarding the key modifier check for non-contiguous
        selection on a multi-value list from just PLATFORM(MAC) to
        PLATFORM(MAC) || (PLATFORM(CHROMIUM) && PLATFORM(DARWIN)).

        No new tests. This patch only changes the condition on which a certain mouse
        event modifier key is used.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::listBoxDefaultEventHandler):

2009-08-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein

        r47744 causes media/video-controls-with-mutation-event-handler.html to crash
        https://bugs.webkit.org/show_bug.cgi?id=28732

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement):
            Don't call setAttribute from the construtor, any registered mutation event 
            listener will cause a crash.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createVolumeSlider):
            Set the maxAttr here instead of in the constructor.

2009-08-25  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Brady Eidson.

        Timers from cached pages fire instantly rather than the after the specified timeout delay
        https://bugs.webkit.org/show_bug.cgi?id=28683

        Test: fast/dom/Window/timer-resume-on-navigation-back.html

        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Remove duplicated Frame::restore() call, since
            it should be done only once in FrameLoader::open(cachedFrame)
        * page/DOMTimer.cpp: Added a debug-only flag and ASSERT to catch out-of-order suspense/restore.
        (WebCore::DOMTimer::DOMTimer): Ditto.
        (WebCore::DOMTimer::suspend): Ditto.
        (WebCore::DOMTimer::resume): Ditto.
        * page/DOMTimer.h: Ditto.

2009-08-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Setting the volume of a media element has no effect if called too early
        https://bugs.webkit.org/show_bug.cgi?id=28731

        * manual-tests/audio-volume.html: 
            Added.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::setVolume):
        (WebCore::MediaPlayerPrivate::setRate):
            Don't bail if metadata hasn't been loaded, it is fine to set rate and/or
            volume as soon as the movie has been created.

2009-08-25  David Levin  <levin@chromium.org>

        Reviewed by Maciej Stachowiak.

        DocumentThreadableLoader::getShouldUseCredentialStorage should allow for synchronous callbacks from SubresourceLoader::create.
        https://bugs.webkit.org/show_bug.cgi?id=28728

        Test: This code path is exercised while running xhr layout tests in chromium.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::getShouldUseCredentialStorage): When called
        back synchronously, the loader is 0, so the assert is changed to allow for that.
        (WebCore::DocumentThreadableLoader::loadRequest): Synchronous callbacks may be
        done before SubresourceLoader::create finishes, so ensure that any previous loader
        -- from a preflight request -- is cleared before calling SubresourceLoader::create.

2009-08-25  Mark Rowe  <mrowe@apple.com>

        Stop installing IDL files in to the framework.

        * WebCore.xcodeproj/project.pbxproj:

2009-08-25  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Support for HTMLInputElement::list and HTMLInputElement::selectedOption.
        https://bugs.webkit.org/show_bug.cgi?id=27756

        Tests: fast/forms/input-list.html
               fast/forms/input-selectedoption.html

        * html/HTMLAttributeNames.in:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::list):
        (WebCore::HTMLInputElement::selectedOption):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:

2009-08-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        <video> and <audio> controller should be accessible (edit)
        https://bugs.webkit.org/show_bug.cgi?id=28081

        Test: accessibility/media-element.html

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
            Add AccessibilityMediaControls.cpp/.h

        * accessibility/AXObjectCache.cpp:
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::getOrCreate):
            Create AccessibilityMediaControl. Update Copyright

        * accessibility/AccessibilityMediaControls.cpp:
        * accessibility/AccessibilityMediaControls.h:
            Added.

        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityObject.h:
            Add isMediaTimeline. Update Copyright.

        * accessibility/AccessibilitySlider.h:
            Make constructor protected instead of private so AccessibilityMediaTimeline can
            call it.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
            Add NSAccessibilityValueDescriptionAttribute to range attributes. 
        (-[AccessibilityObjectWrapper subrole]):
            Return NSAccessibilityTimelineSubrole for AccessibilityMediaTimeline.

        * dom/Node.h:
            add isMediaControlElement.

        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::localizedMediaControlElementString): 
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription): 
            New, return localized media controller strings.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):
            Move inside of "#if ENABLE(VIDEO)"
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::MediaControlElement):
            Initialize m_displayType.
        (WebCore::MediaControlElement::MediaControlElement):
        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement):
            Fix style.
        (WebCore::MediaControlInputElement::MediaControlInputElement):
            Set m_displayType based on pseudo style ID.
        (WebCore::MediaControlInputElement::MediaControlInputElement):
            rename local "o" to "object".
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement):
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement):
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement):
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement):
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
            Update for MediaControlInputElement constructor change.
        (WebCore::MediaControlTimeDisplayElement::formatTime):
            New, moved here from RenderMedia so AccessibilityMediaTimeDisplay can use it.
        (WebCore::MediaControlTimeDisplayElement::setCurrentValue):
            New, set text to current time.
        * rendering/MediaControlElements.h:

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls):
            Create controls in tab order.
        (WebCore::RenderMedia::formatTime):
            Moved to MediaControlTimeDisplayElement::formatTime.
        (WebCore::RenderMedia::updateTimeDisplay):
            Call MediaControlTimeDisplayElement::setCurrentValue.
        * rendering/RenderMedia.h:

2009-08-25  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Fix Canvas layout test failures in Chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=28720

        The previous fix r47757 does not handle the V8 object conversion correctly.

        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-08-25  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Fix compiling errors in Chromium build caused by Canvas3D changes from r47752.
        https://bugs.webkit.org/show_bug.cgi?id=28717

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-08-25  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        [chromium] Implement media volume slider for chromium
        https://bugs.webkit.org/show_bug.cgi?id=28715

        Provided the implementation of the volume slider and its container for
        chromium port. With this change there will be a usable volume control
        slider for chromium theme.

        No new tests since this is covered by existing media layout tests.

        * css/mediaControlsChromium.css: CSS style for the volume slider.
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::mediaSliderThumbImage): Returns the image for slider thumb.
        (WebCore::mediaVolumeSliderThumbImage): Returns the image for volume slider thumb.
        (WebCore::RenderThemeChromiumSkia::paintMediaVolumeSliderTrack): Paints the track with one vertical white line.
        (WebCore::RenderThemeChromiumSkia::adjustSliderThumbSize): Adjusts thumb sizes according to the images.
        (WebCore::RenderThemeChromiumSkia::paintMediaSliderThumb): Paints slider thumb image.
        (WebCore::RenderThemeChromiumSkia::paintMediaVolumeSliderThumb): Paints volume slider thumb image.

2009-08-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Missed checking in 2 Canvas3D files
        https://bugs.webkit.org/show_bug.cgi?id=28018

        * bindings/js/JSCanvasRenderingContextCustom.cpp: Implements toJS to do proper subclass binding
        * bindings/js/JSCanvasRenderingContext3DCustom.cpp: Argument marshaling for 3D calls

2009-08-25  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        [V8] Exception from JavaScript propagates to main script
        https://bugs.webkit.org/show_bug.cgi?id=26433

        Make sure that exceptions thrown both at compile time and at
        runtime in javascript URLs are isolated from the main script.

        Test: fast/dom/javascript-url-exception-isolation.html

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):

2009-08-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Added all new Canvas3D files to the build
        https://bugs.webkit.org/show_bug.cgi?id=28018

        This also hooks up CanvasRenderingContext as the common base class for
        CanvasRenderingContext2D and CanvasRenderingContext3D. And it adds a bit
        of logic throughout to support the new CanvasRenderingContext3D object.
        But nothing is hooked up yet.

        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore/GNUmakefile.am:
        * WebCore/WebCore.gypi:
        * WebCore/WebCoreSources.bkl:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::strokeStyle):
        (WebCore::JSCanvasRenderingContext2D::setStrokeStyle):
        (WebCore::JSCanvasRenderingContext2D::fillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::strokeRect):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        (WebCore::JSCanvasRenderingContext2D::putImageData):
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::isObservableThroughDOM):
        * bindings/js/JSDocumentCustom.cpp:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::markChildren):
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasContext):
        * dom/Document.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::willDraw):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::is3D):
        (WebCore::HTMLCanvasElement::context3D):
        (WebCore::HTMLCanvasElement::texture3D):
        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::renderingContext):
        * html/canvas/CanvasObject.cpp:
        (WebCore::CanvasObject::~CanvasObject):
        * html/canvas/CanvasRenderingContext.idl:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::~CanvasRenderingContext2D):
        * html/canvas/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::is2d):
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/CanvasRenderingContext3D.cpp:
        * html/canvas/CanvasRenderingContext3D.idl:

2009-08-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        REGRESSION (r47630): fast/repaint/background-generated.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=28704

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize): Handle SizeNone.
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer): Initialize the size type to SizeNone.
        * rendering/style/FillLayer.h:
        (WebCore::FillSize::FillSize): Changed assignment to initialization and
            removed redundant assignment to size.

2009-08-25  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Complex text doesn't show up with text stroking
        https://bugs.webkit.org/show_bug.cgi?id=28707

        Skip the NULL check of m_hdc if Windows GDI is not in use.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawComplexText):

2009-08-25  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        Media controls panel does not have a volume control slider
        https://bugs.webkit.org/show_bug.cgi?id=28241

        Introduced "-webkit-media-controls-volume-slider",
        "-webkit-media-controls-volume-slider-container" and the supporting
        implementation. Also added appearances of "media-volume-slider" and
        "media-volume-slider-container".

        The implementation of the controls are in WebCore::MediaControlElements.
        Logic to trigger the display of the volume controls are in WebCore::RenderMedia.

        No new tests since this change doesn't have theme implementation and the
        volume slider is disabled by default.

        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::orientation): Marks that volume slider is vertical.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added corresponding CSS values.
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): ditto.
        * css/CSSSelector.h:
        (WebCore::CSSSelector::): ditto.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): ditto.
        * css/CSSValueKeywords.in: ditto.
        * css/mediaControls.css: Makes the volume slider disabled by default.
        * platform/ThemeTypes.h: Defines theme parts for volume slider and its container.
        (WebCore::):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement):
        (WebCore::MediaControlVolumeSliderContainerElement::styleForElement):
        Adjust the CSS values for "display", "postion", "left" and "top" according to member variables.
        (WebCore::MediaControlVolumeSliderContainerElement::setVisible): Affects the "display" CSS value.
        (WebCore::MediaControlVolumeSliderContainerElement::setPosition): Affects the "left" and "top" CSS values.
        (WebCore::MediaControlVolumeSliderContainerElement::hitTest): Hit testing this element.
        (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement):
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler): Modifies the volume using the slider value, allows dragging.
        * rendering/MediaControlElements.h:
        (WebCore::): Added definition for MediaControlVolumeSliderElement and MediaControlVolumeSliderContainerElement.
        (WebCore::MediaControlVolumeSliderContainerElement::isVisible): Inline getter.
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::styleDidChange): Updates styles for volume container and volume slider.
        (WebCore::RenderMedia::createVolumeSliderContainer): Creates volume slider container and attach to panel.
        (WebCore::RenderMedia::createVolumeSlider): Creates volume slider and attach to volume slider container.
        (WebCore::RenderMedia::updateControls): Updates volume container and volume slider.
        (WebCore::RenderMedia::updateVolumeSliderContainer): Sets the visibility and position of volume slider container and its child.
        (WebCore::RenderMedia::forwardEvent):
        Hit testing the volume slider container and volume slider to toggle the visibility and forward events to slider.
        * rendering/RenderMedia.h:
        Added definition for RenderMedia::updateVolumeSliderContainer().
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart): Not implemented.
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::createThumbStyle): Makes volume slider vertical.
        (WebCore::RenderSlider::thumbRect): ditto.
        (WebCore::RenderSlider::mouseEventIsInThumb): ditto.
        (WebCore::RenderSlider::setValueForPosition): ditto.
        (WebCore::RenderSlider::positionForOffset): ditto.
        (WebCore::RenderSlider::currentPosition): ditto.
        (WebCore::RenderSlider::trackSize): ditto.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle): Adjust style for volume slider thumb.
        (WebCore::RenderTheme::paint): Paints volume control parts using theme.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMediaVolumeSliderContainer): Naive implementation to be overridden.
        (WebCore::RenderTheme::paintMediaVolumeSliderTrack): ditto.
        (WebCore::RenderTheme::paintMediaVolumeSliderThumb): ditto.
        * rendering/style/RenderStyleConstants.h:
        (WebCore::): Constants for volume control parts.

2009-08-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt/Mac] Use CONFIG+=build_all only when building libraries

        If no configuration is specified when building WebKit we pass the
        debug_and_release option to QMake which results in Makefiles for
        both configurations being generated.

        Previously we built both of these configurations by default, for
        all targets (both the QtWebKit framework/dyldlib and the various
        executables such as QtLauncher and tests). This makes sense for
        the libraries, which get the _debug suffix and can be loaded on
        demand by setting the DYLD_IMAGE_SUFFIX, but for executables we
        ended up building the same executable twice.

        We now only build one instance of each executable, and since this
        is a developer build we build the debug-version. Passing either
        --debug or --release to build-webkit will override this, and
        even in the default case the release version can still be built
        by running 'make release' in the the build directory of each
        target.

        * WebCore.pro:

2009-08-25  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=28690
        Build failure in webkitgtk+-1.1.3

        Do not use deprecated function to unref a pixbuf.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::Cursor::Cursor):

2009-08-24  Hironori Bono  <hbono@chromium.org>

        Reviewed by Adam Barth.

        Fix Bug 27827 "[Chromium] Functions Keys don't work in google spreadsheet".
        <https://bugs.webkit.org/show_bug.cgi?id=27827>.

        Because of the lack of mappings from GDK key-codes to WebKit key-codes,
        Chromium cannot send valid key-codes to JavaScript when a user types
        function keys. This change just copies the mappings from 'KeyEventGtk.cpp'.

        To write layout tests for this issue, added mappings from function-key
        names to platform-specific key-codes to EventSendingController objects
        so that eventSender.keyDown() can send function-key events without using
        platform-specific key codes. (Unfortunately, this eventSender.keyDown() change
        is only for Mac. So this change adds this new test to Skipped tests for other
        platforms to prevent this change from crashing the build trees.)

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

       * platform/chromium/KeyCodeConversionGtk.cpp: Add mappings from GDK key-codes
        to WebKit key-code for function keys.
        (WebCore::windowsKeyCodeForKeyEvent):

2009-08-24  Antti Koivisto  <antti@apple.com>

        Reviewed by Simon Fraser.
        
        https://bugs.webkit.org/show_bug.cgi?id=28698
        Avoid unnecessary transformations for the window resizer rect.

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::setFrameRect):

2009-08-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7161900> REGRESSION: 100 MB membuster leak on windows due to 47391
        (DNS prefetching support)

        * platform/network/cf/DNSCFNet.cpp: (WebCore::prefetchDNS): Use a run loop from secondary
        thread on Windows, because there isn't one on main one.

2009-08-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28374
        Cross-scheme requests should not be blocked by appcache rules

        Test: http/tests/appcache/different-scheme.html

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::shouldLoadResourceFromApplicationCache):
        Resources with different schemes can never be loaded from appcache.

2009-08-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=28688
        REGRESSION(r24994): Cannot create a frame with a javascript URL

        Test: http/tests/security/javascriptURL/javascriptURL-in-new-iframe.html

        * bindings/js/JSAttrCustom.cpp: (WebCore::JSAttr::setValue):
        * bindings/js/JSElementCustom.cpp: (WebCore::allowSettingSrcToJavascriptURL):
        * bindings/js/JSHTMLFrameElementCustom.cpp: (WebCore::allowSettingJavascriptURL):
        * bindings/js/JSHTMLIFrameElementCustom.cpp: (WebCore::JSHTMLIFrameElement::setSrc):
        Omit the checks if there is no document in frame yet.

2009-08-24  Nate Chapin  <japhet@chromium.org>

        Reviewed by Eric Seidel.

        Fix crash in fast/css/rem-dynamic-scaling.html due to a freed
        RenderStyle being accessed.

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

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Make currentStyle a RefPtr.

2009-08-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/5743105> Long freezing during loading and selecting text
        of a large table
        https://bugs.webkit.org/show_bug.cgi?id=14918

        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection): Added calls to
            beginDeferredRepaints() and endDeferredRepaints() around the
            invalidation of the selection, in order to better coalesce multiple
            invalid rectangles.

2009-08-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Simplify findTreeElement code, get rid of potential infinite loop.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.findTreeElement):
        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype.getCachedTreeElement):
        (TreeOutline.prototype.findTreeElement):
        * inspector/front-end/utilities.js:
        (isAncestorNode):
        ():

2009-08-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Do expand local scope when hitting the break

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

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

2009-08-24  Ada Chan  <adachan@apple.com>

        Reviewed by Steve Falkenburg.

        Make sure we use the current FrameView's frame rect when
        going back to a cached page.
        
        https://bugs.webkit.org/show_bug.cgi?id=28659

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

2009-08-24  Cameron McCormack  <cam@mcc.id.au>

        Reviewed by Darin Adler.

        Modifying <text rotate=""> doesn't clear the corresponding SVGAnimatedNumberList
        https://bugs.webkit.org/show_bug.cgi?id=28673

        Test: svg/dom/text-rotate-live.html

        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse): Clear the list before adding the parsed
        numbers.

2009-08-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by NOBODY (build fix)

        Turn off ENABLE_3D_CANVAS in the xconfig files.

        * Configurations/FeatureDefines.xcconfig:

2009-08-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Only expand local scope when hitting the break

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

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

2009-08-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        background-size fails to parse if a single length/percentage/auto is followed by a comma
        https://bugs.webkit.org/show_bug.cgi?id=28674

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillSize): Added an allowComma parameter,
            which is set to false when this method consumes a comma. Moved
            handling of 'contain' and 'cover' from parseFillProperty into this
            method.
        (WebCore::CSSParser::parseFillProperty): Set allowComma to true before
            processing the next value, and pass allowComma to parseFillSize.
        * css/CSSParser.h:

2009-08-17  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Support for cursors that are images
        https://bugs.webkit.org/show_bug.cgi?id=28346

        Added support for cursors which are images for CursorGtk. Added
        a manual test for this.

        * manual-tests/gtk/cursor-image.html: Added.
        * manual-tests/gtk/resources/redcursor.cur: Added.
        * platform/gtk/CursorGtk.cpp:
        (WebCore::Cursor::Cursor):

2009-08-24  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Integrate GStreamer video with the graphics backend
        https://bugs.webkit.org/show_bug.cgi?id=16356

        Improves GStreamer backend implementation of MediaPlayerPrivate class.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateErrorCallback): Send proper MediaPlayer
        error for different GStreamer errors to MediaPlayerPrivate.
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Move static
        initialization boolean to a better place.
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::pause):
        (WebCore::MediaPlayerPrivate::duration): Return if error occured, do not
        consider the source as stream if duration query failed.
        (WebCore::MediaPlayerPrivate::currentTime): Return if error occured, use
        an early return.
        (WebCore::MediaPlayerPrivate::seek): Return if error occured.
        (WebCore::MediaPlayerPrivate::setEndTime): Remove implementation since this
        function doesn't seem to be used anywhere in WebCore.
        (WebCore::MediaPlayerPrivate::paused):
        (WebCore::MediaPlayerPrivate::seeking):
        (WebCore::MediaPlayerPrivate::setRate): Seek to current time when rate is set.
        (WebCore::MediaPlayerPrivate::maxTimeBuffered): Return if error occured.
        (WebCore::MediaPlayerPrivate::maxTimeSeekable): Ditto.
        (WebCore::MediaPlayerPrivate::maxTimeLoaded): Ditto.
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::totalBytesKnown):
        (WebCore::MediaPlayerPrivate::totalBytes): Ditto.
        (WebCore::MediaPlayerPrivate::updateStates): Return if error occured, update
        after seek ended with a successful change
        (WebCore::MediaPlayerPrivate::didEnd): Do not pause the playbin when end is reached.
        (WebCore::MediaPlayerPrivate::loadingFailed): Update network state with the given error.
        (WebCore::mimeTypeCache): Gather supported mime types from GStreamer.
        (WebCore::MediaPlayerPrivate::getSupportedTypes):
        (WebCore::MediaPlayerPrivate::supportsType):
        (WebCore::MediaPlayerPrivate::hasSingleSecurityOrigin):
        (WebCore::MediaPlayerPrivate::supportsFullscreen): First step towards fullscreen
        support.
        (WebCore::MediaPlayerPrivate::createGSTPlayBin): Use playbin2 instead of playbin,
        do not set playbin's audio sink.
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        (webkit_video_sink_idle_func): Use C+casts, decrease reference count of async
        queue at the end of the idle function.
        (webkit_video_sink_render): Increase reference count of async queue.
        (webkit_video_sink_stop): Remove any idle functions with the sink as data.

2009-08-23  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Remaining new files for Canvas3D
        https://bugs.webkit.org/show_bug.cgi?id=28018

        * bindings/js/JSHTMLCanvasElementCustom.cpp: Added Canvas3D method behind an ifdef
        * html/canvas/CanvasByteArray.cpp: Added. Efficient array of bytes for passing to GL functions
        * html/canvas/CanvasByteArray.h: Added.
        * html/canvas/CanvasByteArray.idl: Added.
        * html/canvas/CanvasNumberArray.cpp: Added. Efficient array of 32 bit floats for passing to GL functions
        * html/canvas/CanvasNumberArray.h: Added.
        * html/canvas/CanvasNumberArray.idl: Added.

2009-08-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Migrate call frames interaction to the InjectedScript-based schema.

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

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleTextMessage):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.get domWindow):
        (InspectorController.openInInspectedWindow):
        (InspectorController.getCallFrames):
        (InspectorController.evaluateInCallFrame):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype.generateStylesheet):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.evaluate):
        (InjectedScript._evaluateOn):
        (InjectedScript.openInInspectedWindow):
        (InjectedScript.getCallFrames):
        (InjectedScript.evaluateInCallFrame):
        (InjectedScript._callFrameForId):
        (InjectedScript._objectForId):
        (InjectedScript.CallFrameProxy):
        (InjectedScript.CallFrameProxy.prototype._wrapScopeChain):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype._update):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectPropertyProxy):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane):
        (WebInspector.ScopeChainSidebarPane.prototype.update):
        (WebInspector.ScopeVariableTreeElement.prototype.onattach):
        (WebInspector.ScopeVariableTreeElement.prototype.onexpand):
        (WebInspector.ScopeVariableTreeElement.prototype.oncollapse):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        (WebInspector.ScriptsPanel.prototype.variablesInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype.debuggerPaused.callback):
        (WebInspector.ScriptsPanel.prototype.debuggerPaused):

2009-08-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Add support for the placeholder attribute and DOM property of the textarea element.
        https://bugs.webkit.org/show_bug.cgi?id=21248

        A DOM node for an INPUT element doesn't have a flag for placeholder
        visibility anymore.  This patch also fixes a bug that a renderer
        doesn't reflect a corresponding DOM value change.

        Tests: fast/forms/textarea-placeholder-dom-property.html
               fast/forms/textarea-placeholder-pseudo-style.html
               fast/forms/textarea-placeholder-set-attribute.html
               fast/forms/textarea-placeholder-set-value.html

        * css/html.css: Add the default style for placeholder of textarea.
        * dom/InputElement.cpp: Cleanup for m_placeholderShouldBeVisible removal
        (WebCore::InputElement::dispatchFocusEvent):
        (WebCore::InputElement::dispatchBlurEvent):
        (WebCore::InputElement::placeholderShouldBeVisible):
        (WebCore::InputElement::updatePlaceholderVisibility):
        (WebCore::InputElement::setValueFromRenderer):
        (WebCore::InputElementData::InputElementData):
        * dom/InputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dispatchFocusEvent):
        (WebCore::HTMLInputElement::dispatchBlurEvent):
        (WebCore::HTMLInputElement::setValue):
        (WebCore::HTMLInputElement::placeholderShouldBeVisible):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::updatePlaceholderVisibility):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        (WebCore::HTMLTextAreaElement::setValue):
        (WebCore::HTMLTextAreaElement::placeholderShouldBeVisible):
        (WebCore::HTMLTextAreaElement::updatePlaceholderVisibility):
        (WebCore::HTMLTextAreaElement::dispatchFocusEvent):
        (WebCore::HTMLTextAreaElement::dispatchBlurEvent):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.idl:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::RenderTextControl):
        (WebCore::RenderTextControl::styleDidChange):
        (WebCore::RenderTextControl::setInnerTextStyle):
        (WebCore::RenderTextControl::updatePlaceholderVisibility):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::RenderTextControlMultiLine):
        (WebCore::RenderTextControlMultiLine::nodeAtPoint):
        (WebCore::RenderTextControlMultiLine::updateFromElement):
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):
        (WebCore::RenderTextControlMultiLine::textBaseStyle):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::textBaseStyle):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        * rendering/RenderTextControlSingleLine.h:
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::dispatchFocusEvent):
        (WebCore::WMLInputElement::dispatchBlurEvent):
        (WebCore::WMLInputElement::setValue):
        (WebCore::WMLInputElement::placeholderShouldBeVisible):

2009-08-23  Dirk Schulze  <krit@webkit.org>

        Reviewed by Mark Rowe.

        Code clean-up and build fix for filters enabled builds. Moved SVGNames.h
        into #if ENABLE(SVG) for Document.cpp and added SVGNames.h to the other
        files. They are needed there after r47688.

        * dom/Document.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:

2009-08-23  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed, build fix for make distcheck on GTK+.

        * GNUmakefile.am: Added files needed for the build.
        * bindings/js/JSDOMWindowCustom.cpp: Protect SharedWorker include
        with #if clause.
        * bindings/js/JSEventTarget.cpp: Dito.
        * dom/Document.cpp: Dito.
        * loader/FrameLoader.cpp: Dito.

2009-08-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector: Throws an Error on "null"
        https://bugs.webkit.org/show_bug.cgi?id=28665

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

2009-08-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Inspector: REGRESSION Formatting Function in Console is Abbreviated Too Often

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

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

2009-08-22  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] BitmapImage::getGdkPixbuf does not handle alpha channels properly
        https://bugs.webkit.org/show_bug.cgi?id=28345

        When doing the conversion between cairo_surface_t* and GdkPixbuf*
        account for the differences in the respective formats' in-memory
        image format.

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::getCairoSurfacePixel):
        (WebCore::getGdkPixbufPixel):
        (WebCore::BitmapImage::getGdkPixbuf):

2009-08-22  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        Make DOM classes start with a reference count of 1, like all other RefCounted
        
        Next step: Element, HTMLElement, HTMLAnchorElement, HTMLAppletElement,
        HTMLAreaElement, HTMLEmbedElement, HTMLFrameElement, HTMLIFrameElement,
        HTMLObjectElement, HTMLPlugInElement, HTMLPlugInImageElement.

        * DerivedSources.make: Fix error seen every time we build by escaping the $
        in the build rule, since you have to use $$ for that in make.

        * WebCore.base.exp: Updated.

        * bindings/objc/DOM.mm:
        Added now-needed include of SVGNames.h.

        * dom/Document.cpp: Added now-needed include of SVGNames.h.
        (WebCore::Document::createElement): Use create instead of new.

        * dom/Element.cpp:
        (WebCore::Element::Element): Added ConstructionType argument so the caller
        can determine whether this starts with a reference count of either 0 or 1.
        Later we will remove this again once they are all 1.
        (WebCore::Element::create): Added.

        * dom/Element.h: Added create and made constructor protected.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::StyledElement): Added ConstructionType argument.
        * dom/StyledElement.h: Made many functions protected or private, including
        the constructor.

        * dom/make_names.pl: Use create to create the base elements HTMLElement,
        SVGElement, and WMLElement.

        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply): Use create instead of new.
        * editing/UnlinkCommand.cpp:
        (WebCore::UnlinkCommand::doApply): Ditto.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::create): Added.
        * html/HTMLAnchorElement.h: Made constructor protected and added create.
        Also made m_rootEditableElementForSelectionOnMouseDown a RefPtr.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::create): Added.
        * html/HTMLAppletElement.h: Made constructor private and added create.

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::create): Added.
        * html/HTMLAreaElement.h: Made constructor private and added create.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::create): Added.
        * html/HTMLElement.h: Made constructor protected and added create.
        Made other functions protected and private. Also added inline
        definition of constructor.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::create): Added.
        * html/HTMLEmbedElement.h: Made constructor private and added create.
        Made other functions private.

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::create): Added.
        (WebCore::HTMLFrameElement::parseMappedAttribute):
        * html/HTMLFrameElement.h: Made constructor private and added create.
        Made other functions private.

        * html/HTMLFrameElementBase.h: Made functions protected and private.

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement): Pass
        CreateElement so reference count starts at 1.

        * html/HTMLFrameOwnerElement.h: Made functions protected and private.

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::create): Added.
        * html/HTMLIFrameElement.h: Made constructor private and added create.
        Made other functions private.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::create): Added.
        (WebCore::HTMLObjectElement::containsJavaApplet): Changed while loop
        into a for loop and tweaked formatting.

        * html/HTMLObjectElement.h: Made constructor private and added create.
        Made other functions private.

        * html/HTMLPlugInElement.h: Made constructor protected.
        Made other functions protected and private.

        * html/HTMLPlugInImageElement.h: Made constructor and another function
        protected.

        * html/HTMLTagNames.in: Removed createWithNew from all classes that
        now have create functions. Moved conditional noscript to a separate
        paragraph.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName): Use create.
        (WebCore::HTMLViewSourceDocument::addLink): Ditto.
        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData): Ditto.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement): Pass CreateElementZeroRefCount
        so reference count still starts at 0. Will change this class later.
        (WebCore::SVGElement::create): Added.
        * svg/SVGElement.h: Added create, made constructor protected, and
        made other functions protected and private. Removed unneeded
        SVGNames.h include.

        * svg/SVGExternalResourcesRequired.h: Added now-needed SVGNames.h
        include.

        * svg/SVGStopElement.h: Added now-needed SVGNames.h include.
        Made functions private.

        * wml/WMLElement.cpp:
        (WebCore::WMLElement::WMLElement): Pass CreateElementZeroRefCount
        so reference count still starts at 0. Will change this class later.
        (WebCore::WMLElement::create): Added.
        * wml/WMLElement.h: Added create and made constructor protected.

        * wml/WMLTagNames.in: Removed createWithNew from WMLElement.

2009-08-22  Adele Peterson  <adele@apple.com>

        Reviewed by Anders Carlsson.

        Fix for <rdar://problem/7161656> Crash in RenderObject::destroy when using custom scrollbars

        Custom scrollbars normally get detached when a document gets detached.  In this case, a crash was happening when the document had gone into the page cache 
        and then was getting destroyed without proper scrollbar teardown.  This change makes custom scrollbars get detached when the document enters the cache.

        I couldn't figure out a way to reliably cause this to happen in DRT, since the reproducible case relies on the cache being purged at a particular time.

        * history/CachedFrame.cpp: (WebCore::CachedFrame::CachedFrame): Detach custom scrollbars when the CachedFrame is created.  
          They'll get reattached when the document comes out of the page cache.
        * page/FrameView.cpp: (WebCore::FrameView::~FrameView): Added some asserts to catch this problem earlier in debug builds.

2009-08-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Make sure self-collapsing blocks that clear floats are still able to collapse their bottom margins with
        the bottom of their parent blocks.  The old code prevented all collapsing, but all CSS2.1 states is that:
        "An element that has had clearance applied to it never collapses its top margin with its parent block's bottom margin."
        
        The implication is that the bottom margin can still collapse, and the block-inside-inline form of
        fast/block/margin-collapse/025.html (added as fast/block/margin-collapse/block-inside-inline/025.html) depends
        on it to get comparable results.

        Added block-inside-inline tests (a whole slew of them) in fast/block/margin-collapse/block-inside-inline/

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::handleBottomOfBlock):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::MarginInfo::clearMargin):
        (WebCore::RenderBlock::MarginInfo::canCollapseBottomWithChildren):

2009-08-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Need to implement ARIA role="listitem" and role="list"
        https://bugs.webkit.org/show_bug.cgi?id=28606

        Test: platform/mac-snowleopard/accessibility/aria-list-and-listitem.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::isUnorderedList):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::RoleEntry::):

2009-08-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Clean up fill image geometry calculation
        https://bugs.webkit.org/show_bug.cgi?id=28652

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize): Renamed
            calculateBackgroundSize() to this. Replaced separate scaledWidth and
            scaledHeight parameters with a single scaledSize parameter. Renamed
            parameters and local variables.
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry): Changed
            to use CSS3 Backgrounds and Borders terminology in comments and
            local variable names. Renamed, clarified and consolidated some local
            variables.
        * rendering/RenderBoxModelObject.h: Made calculateFillTileSize() private.

2009-08-22  Chris Marrin  <cmarrin@apple.com>

        Unreviewed, build fix.

        Backing out http://trac.webkit.org/changeset/47669

        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:

2009-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Backing out http://trac.webkit.org/changeset/47671 in preparation of
        rolling out http://trac.webkit.org/changeset/47669.

2009-08-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Anders Carlsson.

        Build fix, add CanvasRenderingContext to build systems.
        https://bugs.webkit.org/show_bug.cgi?id=28018

        * DerivedSources.make: Added CanvasRenderinContext.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

2009-08-21  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        New files implementing GL buffer wrappers, and support to make them platform independent
        https://bugs.webkit.org/show_bug.cgi?id=28018

        * html/canvas/CanvasBuffer.cpp: Added. Wrapper around GL Buffer object
        * html/canvas/CanvasBuffer.h: Added.
        * html/canvas/CanvasBuffer.idl: Added.
        * html/canvas/CanvasFramebuffer.cpp: Added. Wrapper around GL Framebuffer object
        * html/canvas/CanvasFramebuffer.h: Added.
        * html/canvas/CanvasFramebuffer.idl: Added.
        * html/canvas/CanvasObject.h: Expose m_context
        * html/canvas/CanvasProgram.cpp: Added. Wrapper around GL Program object
        * html/canvas/CanvasProgram.h: Added.
        * html/canvas/CanvasProgram.idl: Added.
        * html/canvas/CanvasRenderbuffer.cpp: Added. Wrapper around GL Renderbuffer object
        * html/canvas/CanvasRenderbuffer.h: Added.
        * html/canvas/CanvasRenderbuffer.idl: Added.
        * html/canvas/CanvasRenderingContext3D.cpp: Move m_objects hash table from GraphicsContext3D to here
        * html/canvas/CanvasRenderingContext3D.h:
        * html/canvas/CanvasShader.cpp: Added. Wrapper around GL Shader object
        * html/canvas/CanvasShader.h: Added.
        * html/canvas/CanvasShader.idl: Added.
        * html/canvas/CanvasTexture.cpp: Added. Wrapper around GL Texture object
        * html/canvas/CanvasTexture.h: Added.
        * html/canvas/CanvasTexture.idl: Added.
        * platform/graphics/GraphicsContext3D.cpp: Removed.
        * platform/graphics/GraphicsContext3D.h: Move m_objects hash table from here to CanvasRenderingContext3D
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Implement platform dependent code for GL object creation/destruction

2009-08-21  Darin Adler  <darin@apple.com>

        * WebCore.vcproj/build-generated-files.sh:
        * make-generated-sources.sh:
        Removed obsolete code to set up CREATE_HASH_TABLE.

2009-08-21  Adele Peterson  <adele@apple.com>

        Reviewed by Mark Rowe.

        <rdar://problem/7162322> Custom style sheet ignored if UAC is enabled 

        * platform/win/SharedBufferWin.cpp: (WebCore::SharedBuffer::createWithContentsOfFile): 
        No need to open the file with write access.  Only read access is needed.

2009-08-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7161454> Leaks seen during http/tests/xmlhttprequest/cross-origin-no-authorization.html

        Also fixes leaks seen on appcache tests.

        * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::cancel): Work around
        something that's likely a CFNetwork issue. Note that on Windows, there is no matching API
        to call, and we do not think that the leak occurs there anyway.

2009-08-21  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=28650
        Remove cross-thread code from CrossOriginPreflightResultCache.
        Removed mutexes, atomic initializer and string copy.

        No new tests, the worker tests cover this.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::addToAccessControlAllowList):
        (WebCore::CrossOriginPreflightResultCache::shared):
        (WebCore::CrossOriginPreflightResultCache::appendEntry):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        (WebCore::CrossOriginPreflightResultCache::empty):
        * loader/CrossOriginPreflightResultCache.h:

2009-08-21  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Jan Alonzo.

        Buildfix after http://trac.webkit.org/changeset/47655.

        * html/HTMLFormControlElement.h:

2009-08-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector: Improve Cookie DataGrid to Show Hidden Data
        https://bugs.webkit.org/show_bug.cgi?id=28269

          Removed Custom Bindings

        * bindings/js/JSInspectorBackendCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        * inspector/InspectorBackend.cpp:

          Made Non-Custom Bindings in the Backend

        (WebCore::InspectorBackend::getCookies):
        (WebCore::InspectorBackend::deleteCookie):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::deleteCookie):
        * inspector/InspectorController.h:

          Build the Cookie ScriptObjects, handles using document.cookie in
          case the platform hasn't implemented raw cookie access.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getCookies):
        (WebCore::InspectorDOMAgent::buildObjectForCookie):
        (WebCore::InspectorDOMAgent::buildArrayForCookies):
        * inspector/InspectorDOMAgent.h:

          Complete the Asynchronous Calls

        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetCookies):
        * inspector/InspectorFrontend.h:

          Asynchronous Functions to get Cookie Data

        * inspector/front-end/DOMAgent.js:
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.Cookies.buildCookiesFromString): fallback behavior

          Refactor to use the Asynchronous Functions

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.get statusBarItems):
        (WebInspector.CookieItemsView.prototype.update.callback):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype.simpleDataGridForCookies):
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked):

          Cleaned/Commented Related Code

        (InspectorController.searchCanceled):
        * inspector/front-end/InjectedScript.js:
        * platform/Cookie.h:
        * English.lproj/localizedStrings.js: the new strings that were supposed to have gone in last time

2009-08-21  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=28145
        Add support for novalidate/formnovalidate attribute, from HTML5 specs:
        http://www.whatwg.org/specs/web-apps/current-work/#attr-fs-novalidate

        Tests: fast/forms/formnovalidate-attribute.html
               fast/forms/novalidate-attribute.html

        * html/HTMLAttributeNames.in: added novalidate, formnovalidate
        * html/HTMLButtonElement.idl: formnovalidate attribute exposed
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::formNoValidate): attribute getter
        (WebCore::HTMLFormControlElement::setFormNoValidate): attribute setter
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::novalidate): attribute getter
        (WebCore::HTMLFormElement::setNovalidate): attribute setter
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl: novalidate attribute exposed
        * html/HTMLInputElement.idl: formNoValidate attribute exposed

2009-08-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Beth Dakin.

        Rendering changes to complete
        [CSS3 Backgrounds and Borders] Add support for the "contain" value for
        background-size
        https://bugs.webkit.org/show_bug.cgi?id=27573
        and
        [CSS3 Backgrounds and Borders] Add support for the "cover" value for
        background-size
        https://bugs.webkit.org/show_bug.cgi?id=27574

        Test: fast/backgrounds/size/contain-and-cover.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundSize):
        * rendering/RenderObject.cpp:
        (WebCore::mustRepaintFillLayers):

2009-08-21  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=27452
        Add support for checkValidity() method and invalid event, from HTML5
        specs:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-form-checkvalidity

        Tests: fast/events/invalid-001.html
               fast/events/invalid-002.html
               fast/events/invalid-003.html
               fast/events/invalid-004.html
               fast/events/invalid-005.html
               fast/forms/checkValidity-001.html
               fast/forms/checkValidity-002.html
               fast/forms/checkValidity-003.html
               fast/forms/checkValidity-004.html

        * dom/Document.idl: oninvalid event handler
        * dom/Element.idl: ditto
        * dom/EventNames.h: added invalid event
        * dom/Node.cpp:
        (WebCore::Node::oninvalid): ditto
        (WebCore::Node::setOninvalid): ditto
        * dom/Node.h: ditto
        * html/HTMLAttributeNames.in: oninvalid attribute
        * html/HTMLButtonElement.idl: added checkValidity() method
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute): parses oninvalid
        * html/HTMLFieldSetElement.idl: added checkValidity() method
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::checkValidity): checkValidity()
        implementation
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::checkValidity): checkValidity() implementation
        for form elements
        * html/HTMLFormElement.h: checkValidity() definition
        * html/HTMLFormElement.idl: added checkValidity() method
        * html/HTMLInputElement.idl: added checkValidity() method
        * html/HTMLSelectElement.idl: added checkValidity() method
        * html/HTMLTextAreaElement.idl: added checkValidity() method
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::oninvalid): oninvalid event handler
        (WebCore::DOMWindow::setOninvalid): ditto
        * page/DOMWindow.h: ditto
        * page/DOMWindow.idl: ditto

2009-08-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        The CSS part of https://bugs.webkit.org/show_bug.cgi?id=27571 [CSS3 
        Backgrounds and Borders] Add support for the "round" value for 
        background-repeat
        -and-
        https://bugs.webkit.org/show_bug.cgi?id=27570 [CSS3 Backgrounds and 
        Borders] Add support for the "space" value for background-repeat

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFillRepeat):
        * css/CSSValueKeywords.in:
        * rendering/style/FillLayer.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-08-21  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        New files for Canvas 3D feature
        https://bugs.webkit.org/show_bug.cgi?id=28018

        This is all the new files for implementing Canvas 3D. None of them are hooked up and
        are not even included in the build yet. This incorporates the reviews from Simon
        and Ollie for these files.

        * bindings/js/JSCanvasNumberArrayCustom.cpp: Added. Custom JS binding to do implicit conversion from JS Array
        * html/CanvasObject.cpp: Added. Base class for all GL object containers
        * html/CanvasObject.h: Added.
        * html/CanvasRenderingContext.cpp: Added. Base class for CanvasRenderingContext2D and CanvasRenderingContext3D
        * html/CanvasRenderingContext.h: Added.
        * html/CanvasRenderingContext.idl: Added.
        * html/CanvasRenderingContext3D.cpp: Added. 3D context returned from Canvas.getContext()
        * html/CanvasRenderingContext3D.h: Added.
        * html/CanvasRenderingContext3D.idl: Added.
        * platform/graphics/GraphicsContext3D.cpp: Added. Platform interface between CanvasRenderingContext3D and 3D graphics engine
        * platform/graphics/GraphicsContext3D.h: Added.
        * platform/graphics/mac/Canvas3DLayer.h: Added. CALayer subclass to composite 3D canvas
        * platform/graphics/mac/Canvas3DLayer.mm: Added.
        * platform/graphics/mac/GraphicsContext3DMac.cpp: Added. Mac specific interface (OpenGL based)

2009-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        No Review.

        Another Windows build fix.

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

2009-08-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=28625, focus rings don't respect the non-strict mode
        line box shrinking quirk.  Make sure outlines don't extend outside the lineTop and lineBottom
        of the root line box.

        Covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addFocusRingRects):
        (WebCore::RenderInline::paintOutline):

2009-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        No Review.

        Windows build fix.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::setTextDecorationProperty): Made it static
        (WebCore::diffTextDecorations): Made it static

2009-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        execCommand("Underline") uses CSS even when styleWithCSS has been turned off
        https://bugs.webkit.org/show_bug.cgi?id=23892

        This patch adds support for u and s in StyleChange and addInlineStyleIfNeeded so that
        WebKit does not use CSS to decorate texts when styleWithCSS is set to false.

        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::copy): Added.
        * css/CSSValueList.h: Added copy.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::applyUnderline):
        (WebCore::StyleChange::applyLineThrough):
        (WebCore::StyleChange::StyleChange): Added a boolean trimTextDecorations argument.
        (WebCore::StyleChange::init): Ditto.
        (WebCore::StyleChange::extractTextStyles): Handles text decorations.
        (WebCore::getPropertiesNotInComputedStyle): Handles text decorations properly.
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded): Adds u and s if needed.

2009-08-21  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector: Rename "Databases" Panel as "Storage"
        https://bugs.webkit.org/show_bug.cgi?id=28620

          Updated enum from "DatabasesPanel" to "StoragePanel" and wherever it was used.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::specialPanelForJSName): string to display StoragePanel can be either "databases" or "storage"
        * inspector/InspectorController.h:
        (WebCore::InspectorController::):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::showPanel):

          Updated All Direct Access from WebInspector.panels.databases to WebInspector.panels.storage,
          any DatabasesPanel constructors and appropriate function names.

        * inspector/front-end/DOMStorageDataGrid.js:
        (WebInspector.DOMStorageDataGrid.prototype._startEditingColumnOfDataGridNode):
        (WebInspector.DOMStorageDataGrid.prototype._startEditing):
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted):
        (WebInspector.DOMStorageDataGrid.prototype._editingCancelled):
        (WebInspector.DOMStorageDataGrid.prototype.deleteSelectedRow):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype.update):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels): updated string that comes from hiddenPanels to be "databases" or "storage"
        (WebInspector.showStoragePanel):
        (WebInspector.selectDatabase):
        (WebInspector.selectDOMStorage):
        (WebInspector.addDatabase):
        (WebInspector.addDOMStorage):

          Renamed some files and Updated Accordingly.

        * inspector/front-end/StoragePanel.js: Renamed from WebCore/inspector/front-end/DatabasesPanel.js.
        * inspector/front-end/Images/storageIcon.png: Renamed from WebCore/inspector/front-end/Images/databasesIcon.png.
        * inspector/front-end/WebKit.qrc: use new file names
        * inspector/front-end/inspector.css: use new images name and class names
        * inspector/front-end/inspector.html: use new file name
        * WebCore.gypi: use new file names

          Miscellaneous Updates.

        * English.lproj/localizedStrings.js: Updated Tooltip from "Databases" to "Storage"

2009-08-21  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        [Haiku] Adding three font-specific files to WebCore:
        FontCacheHaiku.cpp, FontHaiku.cpp, and SimpleFontDataHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28131

        * platform/graphics/haiku/FontCacheHaiku.cpp: Added.
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::createFontPlatformData):
        (WebCore::FontCache::getTraitsInFamily):
        * platform/graphics/haiku/FontHaiku.cpp: Added.
        (charUnicodeToUTF8HACK):
        (WebCore::Font::canReturnFallbackFontsForComplexText):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/haiku/SimpleFontDataHaiku.cpp: Added.
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):

2009-08-21  Philippe Beauchamp  <philippe.beauchamp@gmail.com>

        Reviewed by Adam Roben.

        Middle click panning icon is offset by 3 pixels
        https://bugs.webkit.org/show_bug.cgi?id=28611

        * platform/ScrollView.cpp:
        panIconSizeLength initialized to 20 instead of 16 to match icon dimension (2 pixels offset)
        * platform/win/CursorWin.cpp:
        (WebCore::middlePanningCursor):
        Hotspot initialized to (8,8) instead of (7,7) (one pixel offset)
        
2009-08-21  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Remove inspector resources for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=28610

        Based on an idea from Simon Hausmann.

        * WebCore.pro:

2009-08-21  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Eric Seidel.

        Inspector: Remove Unused Variable
        https://bugs.webkit.org/show_bug.cgi?id=28616

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._checkWarning):

2009-08-21  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector: Console Array Formatter Shows Extra Properties
        https://bugs.webkit.org/show_bug.cgi?id=28615

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatarray): do not ignore hasOwnProperties

2009-08-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        The CSS part of https://bugs.webkit.org/show_bug.cgi?id=27574 [CSS3 
        Backgrounds and Borders] Add support for the "contain" value for 
        background-size
        -and-
        https://bugs.webkit.org/show_bug.cgi?id=27573 [CSS3 Backgrounds and 
        Borders] Add support for the "cover" value for background-size

        Return contain or cover when appropriate, and otherwise do what we 
        used to do.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

        Accept contain and cover as valid values for background-size.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillProperty):

        Handle setting the size and the sizeLength if appropriate.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapFillSize):

        Added new keywords contain and cover.
        * css/CSSValueKeywords.in:

        Use just sizeLength instead of size to match old behavior.
        * page/animation/AnimationBase.cpp:
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundSize):
        * rendering/RenderObject.cpp:
        (WebCore::mustRepaintFillLayers):

        The variable m_sizeType is an EBackgroundSize, and m_sizeLength is 
        a LengthSize (the equivalent of what m_size used to be). I got rid 
        of m_sizeSet and made isSizeSet() dynamic. I also defined a new 
        struct, FillSize that can be used to set or get m_size and 
        m_sizeLength both at once. 
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        (WebCore::FillLayer::operator==):
        (WebCore::FillLayer::fillUnsetProperties):
        * rendering/style/FillLayer.h:
        (WebCore::FillSize::FillSize):
        (WebCore::FillSize::operator==):
        (WebCore::FillSize::operator!=):
        (WebCore::FillLayer::sizeLength):
        (WebCore::FillLayer::size):
        (WebCore::FillLayer::isSizeSet):
        (WebCore::FillLayer::setSizeType):
        (WebCore::FillLayer::setSizeLength):
        (WebCore::FillLayer::setSize):
        (WebCore::FillLayer::clearSize):
        (WebCore::FillLayer::initialFillSizeType):
        (WebCore::FillLayer::initialFillSizeLength):
        (WebCore::FillLayer::initialFillSize):

        This is all boiler-plate stuff to adjust to the new size() vs. 
        sizeType() vs. sizeLength() distinction.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::backgroundSizeType):
        (WebCore::InheritedFlags::backgroundSizeLength):
        (WebCore::InheritedFlags::maskSize):
        (WebCore::InheritedFlags::setBackgroundSize):
        (WebCore::InheritedFlags::setBackgroundSizeLength):
        (WebCore::InheritedFlags::setMaskSize):

        Definition for EBackgroundSizeType.
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-08-21  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Not reviewed, build fix after r47580.

        [Qt] Adjust the files.

        * inspector/front-end/WebKit.qrc:

2009-08-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Enable various "grouping" ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=28486

        Test: platform/mac/accessibility/aria-grouping-roles.html

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizedStrings.h:
        * platform/mac/LocalizedStringsMac.mm:

2009-08-20  David Levin  <levin@chromium.org>

        Unreviewed trivial comment fix.

        Update a bug link in a comment due to bugzilla amnesia.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setResourceToRevalidate):

2009-08-20  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        HTML5 media elements do not fire waiting events correctly
        https://bugs.webkit.org/show_bug.cgi?id=28335

        Fire the waiting event before seeking, and fix a case where firing of
        the seeked event is missed when the ready state is changed during
        a seek.

        Added video-waiting-seeking.html into manual tests because not
        all platforms allow seeking into non-buffered ranges.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): add support for
        waiting event when seeking.
        (WebCore::HTMLMediaElement::finishSeek): send seeked event
        whenever seeking finishes.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): dispatch to
        new function.
        * html/HTMLMediaElement.h:
        * manual-tests/video-waiting-seeking.html: Added.

2009-08-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        Fix more cases of
        <rdar://problem/7154521> Lots of "<Error>: doClip: empty path." spew in
        the console with certain content

        If the border box is empty, simply avoid painting instead of trying to
        clip to the empty path.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2009-08-20  Jeremy Orlow  <jorlow@chromium.org>

        Build fix.  Forgot a svn add for a patch I landed.  :-(

        * storage/SQLTransactionClient.cpp: Added.
        (WebCore::SQLTransactionClient::didCommitTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * storage/SQLTransactionClient.h: Added.

2009-08-20  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added a client to SQLTransaction. In addition to being a place to
        get notifications about certain events in a transaction, it is
        also an abstraction layer that allows us to plug in different
        implementations for each port for how transactions interract with
        the main DB. For example, WebCore's default implementation will
        make direct calls to DatabaseTracker's methods. At the same time,
        Chromium's implementation will send IPCs to the browser process
        whenever a transaction needs something from the main DB.

        All storage tests pass.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/Database.cpp:
        (WebCore::Database::transactionClient):
        * storage/Database.h:
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::transactionClient):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        * storage/SQLTransactionClient.cpp: Added.
        * storage/SQLTransactionClient.h: Added.

2009-08-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        Fix of <https://bugs.webkit.org/show_bug.cgi?id=24793>
        Auto scroll speed is faster than in IE, Firefox.
        
        Changed pan scrolling speed to match Firefox's algorithm.

        * rendering/RenderLayer.cpp:
        (WebCore::adjustedScrollDelta):
        (WebCore::RenderLayer::panScrollFromPoint):

2009-08-20  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

        Fix for assert in Chromium page cycler:  drawRect() was re-using
        an SkPaint, but not resetting it before calling
        PlatformGraphicsSkia::setupPaintForFilling() a second time.  This
        CL fixes drawRect(), and re-enables the assert.
        http://bugs.webkit.org/show_bug.cgi?id=28172
        http://crbug.com/19797

        Covered by Chromium page cycler tests.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::drawRect):
        (PlatformContextSkia::setupPaintCommon):

2009-08-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7159016> Popup menus don't disappear when you click outside the window.
        
        Revert r47535 which introduced this.
        
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupWndProc):

2009-08-20  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Crashes on sites with lots of images
        https://bugs.webkit.org/show_bug.cgi?id=28473

        The problem is that m_resourceToRevalidate::m_isBeingRevalidated is false while
        CachedResource is still referring to it, so it may get deleted before
        Cache::revalidationSucceeded calls CachedResource::clearResourceToRevalidate.

        * loader/Cache.cpp:
        (WebCore::Cache::revalidateResource): Added assert to verify the resource
        being revalidated is physically in the cache.
        (WebCore::Cache::revalidationSucceeded): Changed to do one call to switch from the revalidating
        resource to the revalidated resource.  This allows for proper lifetime management of the
        revalidated resource. Added assert to verify that the revalidatingResource is in the cache.
        (WebCore::Cache::pruneDeadResources): Don't remove items from the cache that are in the
        process of being validated (or else they can get added twice: Once through the normal mechanism
        and then again during revalidateResource).

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::isSafeToMakePurgeable):
        Changed m_isBeingRevalidated to m_proxyResource to allow finding out
        who the validating resource (or proxy) is.

        (WebCore::CachedResource::~CachedResource): Removed code to handle m_resourceToRevalidate
        being non-zero because this shouldn't be possible due to checks in canDelete. Added asserts
        as well.
        (WebCore::CachedResource::setResourceToRevalidate): Adjusted for the change to m_proxyResource
        and added a comment about the assert.
        (WebCore::CachedResource::clearResourceToRevalidate):
        Only clean up the resourceToRevalidate if it hasn't gotten a new proxy resource.
        * loader/CachedResource.h:
        (WebCore::CachedResource::setInCache): Don't clear m_proxyResource because the resource
        is still being referred to by it and the code it robust to this being switched to a new proxy
        resource without it being cleared first.
        (WebCore::CachedResource::canDelete): Changed m_isBeingRevalidated to m_proxyResource.

2009-08-20  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Eric Seidel.

        Fix "Chromium RTL autocomplete popup is not layout correctly".
        https://bugs.webkit.org/show_bug.cgi?id=27889

        The complete fix of the issue consists 2 parts: the patch in webkit
        and the patch in Chromium's own code.

        This webkit patch only affects Chromium autofill. It
        1. introduces a new flag in WebCore::PopupContainerSettings to
           distinguish whether the width of the drop-down should be restricted
           or not.
           For autofill, the width of the drop-down is restricted to
           be the same as that of the input field (the new flag is set in
           Chromium's own code). But width is not restricted for <select> (same as before).
        2. introduce a new flag in WebCore::PopContainerSettings to
           indicate what heuristics to use when displaying text in drop-down menu.
           For autofill, use drop-down item's directionality to display drop-down items.
           Previously, drop-down item is displayed in the its first strong
           directional character's directionality.
           (drop-down item's directionality is set in Chromium's own code.
           It is set the same as the directionality of the element. 
           For autofill, it is the same directionality as that of the input field.)
           For <select>, still use the text's first strong directional character's
           directionality to display the text.


        Since the patch only affects the chromium client, not webcore part or
        other clients. No automatic tests is possible.

        * manual-tests/autofill-popup-width-and-item-direction.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::):
        (WebCore::PopupListBox::paintRow): If list box width is restricted and 
        an item is longer to fit in a list box, truncate it and draw part of the text and append ellipses.
        (WebCore::PopupListBox::layout): Restrict width of list box if applicable.
        * platform/chromium/PopupMenuChromium.h: 
        (WebCore::PopupItem::PopupItem): style change.
        (WebCore::PopupContainerSettings::): Add 2 new flags in PopupContainerSetting to 
        distinguish whether to restrict width of list box and 
        in what directionality to display the text in drop-down.

2009-08-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adele Peterson.

        Fix of <https://bugs.webkit.org/show_bug.cgi?id=28504>. 
        Pan Scrolling can scroll while showing the middlePanScroll icon.
        
        Fixed an off by one error between RenderLayer::panScrollFromPoint and EventHandler::updatePanScrollState. 
        In RenderLayer::panScrollFromPoint, we were setting the icon to be an arrow if the difference between the start
        of the pan scroll and the current mouseposition is > 15. However, in EventHandler::updatePanScrollState, we would
        set our amount to scroll to 0 only if the difference in mouse position is < 15. I made this check a <= 15, to fix
        the off by one error.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::panScrollFromPoint):

2009-08-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Pull the code in layoutBlockChildren for handling a normal flow block child into a helper method,
        layoutBlockChild.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutBlockChild):
        * rendering/RenderBlock.h:

2009-08-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Made subframeForHitTargetNode a public static method, so WebView can call it
        during hit testing.

        * page/EventHandler.cpp:
        (WebCore::subframeForHitTestResult):
        (WebCore::EventHandler::subframeForTargetNode):
        * page/EventHandler.h:

2009-08-20  Brent Fulgham  <bfulgham@webkit.org>

        Rubberstamped by Kevin Ollivier.

        Check for null bundle before attempting to use it.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::certificatePath): Add null check on return of
          CFBundleGetBundleWithIdentifier.

2009-08-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=28497, images and inline replaced elements don't propagate overflow properly on a line.

        Added fast/repaint/inline-block-overflow.html and updated another test.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        Make sure to still propagate the border box of the replaced element as layout overflow when overflow clip is set on the
        replaced element.  Make sure to use the InlineBox x/y positions instead of the RenderBox x/y, since the position of the
        RenderBox has not been updated to the new values yet.
        
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        Don't use the root line box's overflow.  Use the actual line box overflow values instead.  In the case of an inline
        with a layer, our overflow didn't propagate to the root line, so we always need to use our values.

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::layout):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        Make sure to clear shadow overflow when doing layout of replaced elements, so that we don't leave a stale overflow
        value around if a box-shadow goes away.

2009-08-20  Dmitry Titov  <dimich@chromium.org>

        Another attempt to fix Chromium build.

        * WebCore.gypi: now use the correct name of the image file.

2009-08-20  Dan Bernstein  <mitz@apple.com>

        Make the Windows build even fixeder

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::flush):

2009-08-20  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, Chromium build fix.

        * WebCore.gypi: add new Webinspector image files (localStorage.png and sessionStorage.png)

2009-08-20  Dan Bernstein  <mitz@apple.com>

        Windows build fix after the last change

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContext::drawWindowsBitmap):

2009-08-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Geoffrey Garen.

        Replace many manually-released CFTypeRefs with RetainPtrs
        https://bugs.webkit.org/show_bug.cgi?id=28498

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::createCGColor):
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::setURLForRect):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::createScratchContext):
        (WebCore::Path::contains):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::getTIFFRepresentation):
        * platform/mac/ClipboardMac.mm:
        (WebCore::cocoaTypeFromMIMEType):
        (WebCore::MIMETypeFromCocoaType):
        * platform/mac/WebCoreNSStringExtras.mm:
        (stringEncodingForResource):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::advanceCurrentStream):
        (WebCore::setHTTPBody):
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::encode):

2009-08-20  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Output actual values of counters in showTree
        https://bugs.webkit.org/show_bug.cgi?id=28481

        No new tests because this patch just improves debugging outputs.

        * rendering/CounterNode.cpp:
        (WebCore::showTreeAndMark):

2009-08-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by NOBODY (build fix).

        Add file missed in last check-in.

        * html/HTMLAttributeNames.in:

2009-08-19  Timothy Hatcher  <timothy@apple.com>

        Adds new icons to the Web Inspector for Local Storage,
        Session Storage and Cookies.

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

        Reviewed by Eric Seidel.

        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.addDOMStorage):
        (WebInspector.DOMStorageSidebarTreeElement):
        * inspector/front-end/Images/cookie.png:
        * inspector/front-end/Images/domStorage.png: Removed.
        * inspector/front-end/Images/localStorage.png: Added.
        * inspector/front-end/Images/sessionStorage.png: Added.
        * inspector/front-end/inspector.css:

2009-08-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Anders Carlsson.

        HTML5 media elements must fire 'loadend' progress event
        https://bugs.webkit.org/show_bug.cgi?id=28419

        * dom/EventNames.h:
            Define loadend.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseMappedAttribute):
            Deal with onloadend.
        (WebCore::HTMLMediaElement::loadInternal):
            Post 'loadend' immediately after 'abort'.
        (WebCore::HTMLMediaElement::noneSupported):
            Post 'loadend' immediately after 'error'.
        (WebCore::HTMLMediaElement::mediaEngineError):
            Ditto.
        (WebCore::HTMLMediaElement::setNetworkState):
            Post 'loadend' immediately after 'load'.
        (WebCore::HTMLMediaElement::userCancelledLoad):
            Post 'loadend' immediately after 'abort'.

2009-08-20  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        REGESSION(r45316), Crash: WebKit crashes in Google Sites when indenting a table
        https://bugs.webkit.org/show_bug.cgi?id=28474

        This patch fixes a crash when indenting at right after a table.
        The bug was caused by Node* blockNode = enclosingBlock(endOfCurrentParagraph.deepEquivalent().node());
        where node() is equal to blockNode. Because blockNode is the enclosing block node, this patch changes it to
        enclosingBlock(endOfCurrentParagraph.deepEquivalent().node()->parentNode());

        Test: editing/execCommand/indent-right-after-table.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion): Fixed so that blockNode != endOfCurrentParagraph.deepEquivalent().node()

2009-08-20  Andrew Scherkus  <scherkus@chromium.org>

        Reviewed by David Levin.

        Render disabled mute button during an error or if no audio is present.

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

        Covered by existing layout tests:
        media/video-controls-visible-audio-only.html
        media/video-no-audio.html

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintMediaMuteButton):

2009-08-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7154605> Loading page with 1px wide <select> makes the
        toolbar go blank
        and
        <rdar://problem/7154521> Lots of "<Error>: doClip: empty path." spew in
        the console with certain content

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonGradients): Return early
        if the rectangle is empty. Use RenderStyle::getBorderRadiiForRect() to
        adjust the radii in case the sides of the rectangle are smaller than sum
        of the radii, so that the gradient background matches the border (which
        already uses getBorderRadiiForRect()). Check if bottomGradient is empty
        to avoid clipping to an empty path.
        (WebCore::RenderThemeMac::paintMenuListButton): Moved a
        GraphicContext::save() down to avoid a save/restore imbalance in the
        early return case.

        * rendering/RenderThemeSafari.cpp: Made the same changes.
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintMenuListButton):

2009-08-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [Gtk][REGRESSION] XHR test failures after r45558
        https://bugs.webkit.org/show_bug.cgi?id=27143

        Disable sniffing if it's explicitly requested. Updated patch
        originally by Gustavo Noronha.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::statusWillBeHandledBySoup):
        (WebCore::gotHeadersCallback):
        (WebCore::contentSniffedCallback):
        (WebCore::gotChunkCallback):
        (WebCore::startHttp):

2009-08-20  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Swap the pixels since QImage expect ARGB while ImageData
        stores them as RGBA.

        This fixes the fast/canvas/canvas-copyPixels.html test.

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

2009-08-20  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by David Levin.

        [v8] Use atomic string caching for createElement
        Extend atomic string caching to createElement.  Fix a bug in idl
        parser that caused incorrect parsing if a function argument
        attribute list contained a comma.
        https://bugs.webkit.org/show_bug.cgi?id=28449

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/v8/V8Binding.h:
        (WebCore::v8ValueToAtomicWebCoreStringWithNullCheck):
        * dom/Document.idl:

2009-08-20  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Not reviewed, build fix after r47515.

        [Qt] There is no Phonon::MediaObject::hasAudio() function.

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

2009-08-20  Darin Fisher  <darin@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28483
        The V8 ScriptController's cleanupScriptObjectsForPlugin should take a
        Widget* instead of void* to avoid the need for manual casting to Widget*
        at the callsite.

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

2009-08-19  David Levin  <levin@chromium.org>

        Unreviewed speculative build fix for qt.

        * page/OriginAccessEntry.cpp:

2009-08-19  Aaron Boodman  <aa@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=24853: Provide a way for WebKit clients to
        specify a more granular policy for cross-origin XHR access.

        Tests: http/tests/xmlhttprequest/origin-whitelisting-all.html
               http/tests/xmlhttprequest/origin-whitelisting-exact-match.html
               http/tests/xmlhttprequest/origin-whitelisting-https.html
               http/tests/xmlhttprequest/origin-whitelisting-ip-addresses-with-subdomains.html
               http/tests/xmlhttprequest/origin-whitelisting-ip-addresses.html
               http/tests/xmlhttprequest/origin-whitelisting-subdomains.html

        * WebCore.base.exp: Export methods to manipulate origin access whitelists to enable
        testing via layout tests.

        * WebCore.xcodeproj/project.pbxproj: Add OriginAccessEntry.*
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCoreSources.blk: Ditto.

        * page/SecurityOrigin.h: Implement origin access whitelists.
        (WebCore::originAccessMap): Static getter for access whitelists.
        (WebCore::SecurityOrigin::canRequest): Modify request checking logic to check whitelists.
        (WebCore::SecurityOrigin::whiteListAccessFromOrigin): Add an entry to a whitelist.
        (WebCore::SecurityOrigin::resetOriginAccessWhiteLists): Clear all the whitelists.

        * page/OriginAccessEntry.h: Added. An entry in an origin access whitelist.
        * page/OriginAccessEntry.cpp: Ditto.

2009-08-19  Kevin Ollivier  <kevino@theolliviers.com>

        Non-precomp headers build fix.

        * platform/image-decoders/ImageDecoder.cpp:

2009-08-19  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Disable a bad SKIA assert
        https://bugs.webkit.org/show_bug.cgi?id=28482

        In http://trac.webkit.org/changeset/47386/ an assert was "fixed" in SKIA code. 
        When this was pulled into Chromium, it started breaking the page cycler. 
        Disable it again until we can figure out what's going on.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintCommon):

2009-08-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        queryCommandState('underline') returns false if the selected text is also bold and italic
        https://bugs.webkit.org/show_bug.cgi?id=11022

        This patch modifies stateStrikethrough and stateUnderline to use the value -webkit-text-decorations-in-effect
        instead of text-decoration.  Because text-decoration only retrieves explicit styling at the node on which
        the query was sent, we need to use -webkit-text-decorations-in-effect to include decorations added by ancestors
        and also u, s, and strike tags.

        Test: editing/style/text-decoration-state.html

        * editing/EditorCommand.cpp:
        (WebCore::stateStrikethrough): Use -webkit-test-decorations-in-effect instead of text-decoration.
        (WebCore::stateUnderline): Ditto.

2009-08-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        - Fix <rdar://problem/7155710>
        HTML selects on windows cause containing window to become inactive when opened.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        Pass SWP_NOACTIVATE to SetWindowPos, remove AW_ACTIVATE from AnimateWindow and pass
        SW_SHOWNOACTIVATE to ShowWindow.
        
        (WebCore::PopupWndProc):
        Prevent mouse activation from activating the window.

2009-08-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Images flash as you hover them on http://www.atebits.com/scribbles/
        <rdar://problem/7143958>
        
        Tag images with the device colorspace with the colorspace of the main display, rather than
        GenericRGB, so that composited images color-match those rendered via Core Graphics.
        
        Covered by LayoutTests/compositing/color-matching/image-color-matching.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToImage):

2009-08-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt and Dan Bernstein.

        - Fix <rdar://problem/7152589> Stylable scrollbar corners aren't working.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        Initialize m_scrollCorner.

        (WebCore::FrameView::~FrameView):
        Assert that m_scrollCorner is null.

        (WebCore::FrameView::detachCustomScrollbars):
        Destroy m_scrollCorner.

        (WebCore::FrameView::invalidateScrollCorner):
        Invalidate the scroll corner.
        
        (WebCore::FrameView::updateScrollCorner):
        Create/destroy the scroll corner.
        
        (WebCore::FrameView::paintScrollCorner):
        Paint the scroll corner.
        
        * page/FrameView.h:
        (WebCore::FrameView::isFrameViewScrollCorner):
        Return whether a RenderScrollbarPart is the frame view scroll corner.
        
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        Go ahead and update the scroll corner.
        
        (WebCore::ScrollView::setScrollbarsSuppressed):
        Pass the scroll corner rect to invalidateRect.
        
        (WebCore::ScrollView::scrollCornerRect):
        Return the scroll corner rect.
        
        * platform/ScrollView.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::imageChanged):
        If this scrollbar part is the frame view scroll corner, invalidate it.

2009-08-19  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG feComponentTransfer needs to be implemented
        [https://bugs.webkit.org/show_bug.cgi?id=27768]

        Implementation of SVG Filter feComponentTransfer.

        There is already a test case
        Test: svg/W3C-SVG-1.1/filters-comptran-01-b.svg

        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::identity):
        (WebCore::table):
        (WebCore::discrete):
        (WebCore::linear):
        (WebCore::gamma):
        (WebCore::FEComponentTransfer::apply):

2009-08-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/7141522> Incorrect layout of product table at henry.com

        Test: fast/block/basic/quirk-percent-height-table-cell.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcPercentageHeight): Tweak the quirk that allows
        percentage-height children of auto-height blocks to look for an ancestor
        with non-auto height and compute their height based on it. The change is
        that if that ancestor is a table cell, it is ignored and the percent
        height computes to zero (just like in strict mode). This matches Firefox
        and IE.

2009-08-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Eric Seidel.

        Add 'icu::' qualifier when refering to ICU C+names to the other
        file with this issue missed in the previous check-in.

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

        No change in the test result.

        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::):

2009-08-19  Peter Kasting  <pkasting@google.com>

        Unreviewed (build fix for Skia).

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

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

2009-08-19  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Eric Seidel.

        [CAIRO] Remove setFont indirection
        https://bugs.webkit.org/show_bug.cgi?id=28453

        Remove the indirection and just set the font in Font::drawGlyphs.

        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/gtk/FontPlatformData.h:
        (WebCore::FontPlatformData::scaledFont):
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        * platform/graphics/gtk/SimpleFontDataPango.cpp:
        * platform/graphics/win/FontPlatformData.h:
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        * platform/graphics/win/SimpleFontDataCairoWin.cpp:

2009-08-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: When adding style selector, generate default name based
        on id / class / type.

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

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

2009-08-19  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Rename combinedOverflow to visibleOverflow, since that's what it actually represents.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::topvisibleOverflow):
        (WebCore::InlineFlowBox::bottomvisibleOverflow):
        (WebCore::InlineFlowBox::leftvisibleOverflow):
        (WebCore::InlineFlowBox::rightvisibleOverflow):
        (WebCore::InlineFlowBox::visibleOverflowRect):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::floatRect):
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::visibleOverflowRect):
        (WebCore::RenderBox::topvisibleOverflow):
        (WebCore::RenderBox::bottomvisibleOverflow):
        (WebCore::RenderBox::leftvisibleOverflow):
        (WebCore::RenderBox::rightvisibleOverflow):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::localBoundingBox):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderOverflow.h:
        (WebCore::RenderOverflow::visibleOverflowRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):

2009-08-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        Sound button appears in controller with movies that have no audio
        https://bugs.webkit.org/show_bug.cgi?id=28464

        Test: media/video-no-audio.html

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hasAudio):
            Added hasAudio.

        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::hasAudio):
        (WebCore::MediaPlayer::hasVideo):
            Make const.
        (WebCore::MediaPlayer::hasAudio):
            Added hasAudio.

        * platform/graphics/MediaPlayerPrivate.h:
            Add hasAudio.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::hasAudio):
            Ditto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::hasAudio):
            Ditto.

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

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::hasAudio):
            Ditto.

        * platform/graphics/win/QTMovieWin.h:
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::hasAudio):
            Ditto.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlMuteButtonElement::disabled):
            New, return true if media element doesn't have audio.
        (WebCore::MediaControlMuteButtonElement::rendererIsNeeded):
            Renderer is not needed if element has no audio.
        * rendering/MediaControlElements.h:
        (WebCore::MediaControlInputElement::disabled):

        * rendering/RenderThemeMac.mm:
        (WebCore::getMediaUIPartStateFlags):
            Return MediaUIPartDisabledFlag if node is disabled.
            

2009-08-19  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27357
        Removed the two unnecessary overridden willValidate() methods introduced
        in r47444.

        * html/HTMLKeygenElement.h:
        * html/HTMLObjectElement.h:

2009-08-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Allow dumping dangling nodes to the console.

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::clearConsoleMessages):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::releaseDanglingNodes):
        (WebCore::InspectorDOMAgent::startListening):
        (WebCore::InspectorDOMAgent::stopListening):
        (WebCore::InspectorDOMAgent::handleEvent):
        (WebCore::InspectorDOMAgent::bind):
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::pushDocumentToFrontend):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::setDetachedRoot):
        (WebCore::InspectorFrontend::childNodeCountUpdated):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatnode):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._setDetachedRoot):
        (WebInspector.DOMAgent.prototype._childNodeCountUpdated):
        (WebInspector.setDetachedRoot):
        (WebInspector.childNodeCountUpdated):
        (InspectorController.pushNodeToFrontend):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.pushNodeToFrontend):
        (InjectedScript.createProxyObject):

2009-08-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=27464
        Implement application cache online whitelist wildcard flag

        Test: http/tests/appcache/whitelist-wildcard.html

        A "*" in NETWORK section means that network loading needn't be blocked.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::isURLInOnlineWhitelist):
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::setAllowsAllNetworkRequests):
        (WebCore::ApplicationCache::allowsAllNetworkRequests):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::openDatabase):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::loadCache):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * loader/appcache/ManifestParser.h:

2009-08-19  Brady Eidson <beidson@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/7042555> Loading certain pages on Tiger will start a spurious download
        
        Get rid of method swizzling entirely. This created problems when lower level
        Foundation code would call into our own swizzled method.
        
        * platform/network/mac/ResourceHandleMac.mm: 
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): 
        * platform/network/mac/WebCoreURLResponse.h:
        * platform/network/mac/WebCoreURLResponse.mm:
        (-[NSURLResponse adjustMIMETypeIfNecessary]):

2009-08-19  Adam Roben  <aroben@apple.com>

        Fix linker warnings on Windows

        Reviewed by Anders Carlsson.

        Fixes <http://webkit.org/b/28462> WebCore causes linker warnings on
        Windows about multiply-defined JSHTMLDataListElement symbols

        * WebCore.vcproj/WebCore.vcproj: Exclude JSHTMLDataListElement.cpp
        from the build (just like we do for the other generated bindings
        files) so that we don't get warnings about multiply-defined symbols in
        JSHTMLDataListElement.cpp and DerivedSources.cpp. Also removed
        duplicate versions of JSSVGElementWrapperFactory.cpp, and let VS
        reorder a few files.

2009-08-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Eric Seidel

        Add 'icu::' qualifier when refering to ICU C+names.

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

        No change in the test result.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::fontContainsCharacter):

2009-08-19  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        Cleanup from my patch thet rewrote overflow.  Remove unused member variables from RenderTableSection and
        move the addition of overflow from children into a separate pass after the height of the section has been
        set.  This prevents the RenderOverflow struct from being aggressively allocated for all table sections.
        (Not a a correctness issue, just a memory issue.)

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTableSection.h:

2009-08-19  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Remove bogus dependency rules for built sources that derive
        from HTMLTagNames.in, HTMLAttributeNames.in and xmlattrs.in. The
        header files should be generated regardless of whether the source
        file changed or not. We should only rely on the *.in files being
        changed.

        * GNUmakefile.am:

2009-08-18  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Oliver Hunt.

        convert FormatBlock candidate tag list from if chain to hash lookup
        https://bugs.webkit.org/show_bug.cgi?id=28448

        No behavior change, just cleanup.

        * editing/htmlediting.cpp:
        (WebCore::validBlockTag):
        * editing/htmlediting.h:

2009-08-19  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update GraphicsContextSkia's version of drawLine to make use of the shared
        adjustLineToPixelBoundaries function and elimination overlapping code.

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

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

2009-08-18  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Style fixes based on cpp_style.py and WebKit Style guide for
        GraphicsContextSkia.cpp

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

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::setLineDash):
        (WebCore::GraphicsContext::setPlatformShadow):

2009-08-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=28446
        Custom request headers shouldn't be sent with cross-origin preflight request

        Tests: http/tests/xmlhttprequest/access-control-preflight-headers-async.html
               http/tests/xmlhttprequest/access-control-preflight-headers-sync.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight):
        Don't copy headers to OPTIONS request. The spec is vague about this, but the intention was
        that they shouldn't be sent, and Firefox doesn't send them.

2009-08-18  John Gregg  <johnnyg@google.com>

        Reviewed by Dimitri Glazkov.

        V8 Bindings for Desktop Notifications feature.
        https://bugs.webkit.org/show_bug.cgi?id=28271

        * WebCore.gypi: 
        added notification files to build (all still behind a flag that's not on)
        * bindings/scripts/CodeGeneratorV8.pm:
        added special case in DOMWindow/AppCache style for named event handlers
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::convertToV8Object):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp: Added.
        * notifications/Notification.h:
        made event handler routines public (as they are in DOMWindow, eg) for
        binding access.
        * notifications/NotificationCenter.idl:
        needed to make methods V8Custom to support different behaviors in 
        worker/page context in chromium. 
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::getNotificationPresenter):
        (WebCore::WorkerThread::setNotificationPresenter):
        needed to make these methods public as well so chromium can inject
        the notification presenter into the worker thread.

2009-08-13  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        - Implement HTML5 nav element
        https://bugs.webkit.org/show_bug.cgi?id=27937

        <nav> should behave essentially the same as <div> for parsing
        etc. This is implemented by the changes below.
        
        Tests: fast/html/nav-element.html

        * css/html.css:
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::tagPriority):
        (WebCore::blockTagList):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::getNode):
        * html/HTMLTagNames.in:

2009-08-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson, David Hyatt and Dan Bernstein.

        - Fix <rdar://problem/7152727>

        If a page has custom scroll bars, they will not update correctly when the window is activated/deactivated.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::hasCustomScrollbars):
        Check if the frame view or any of its subviews have custom scroll bars.
        
        (WebCore::FrameView::updateControlTints):
        Go ahead and update control tints if the frame view has custom scroll bars.
        
        * page/FrameView.h:

2009-08-18  Mark Rowe  <mrowe@apple.com>

        Roll out r47477 as it introduced assertion failures and crashes on the build bots.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/Database.cpp:
        * storage/Database.h:
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * storage/DatabaseThread.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        * storage/SQLTransactionClient.cpp: Removed.
        * storage/SQLTransactionClient.h: Removed.

2009-08-18  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding the SharedTimer file for WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=28126

        * platform/haiku/SharedTimerHaiku.cpp: Added.
        (WebCore::):
        (WebCore::SharedTimerHaiku::SharedTimerHaiku):
        (WebCore::SharedTimerHaiku::~SharedTimerHaiku):
        (WebCore::SharedTimerHaiku::instance):
        (WebCore::SharedTimerHaiku::start):
        (WebCore::SharedTimerHaiku::stop):
        (WebCore::SharedTimerHaiku::Filter):
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::setSharedTimerFireTime):
        (WebCore::stopSharedTimer):

2009-08-18  Mark Rowe  <mrowe@apple.com>

        Release build fix.

        * xml/XMLHttpRequest.cpp: Sprinkle some #ifndef NDEBUG around.
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest):

2009-08-18  Aaron Boodman  <aa@chromium.org>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=28412: Leak of WebCore::XMLHttpRequest object during layout tests.

        No new tests: Already covered by existing tests.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest): Add instrumentation for this kind of leak.
        (WebCore::XMLHttpRequest::~XMLHttpRequest): Ditto.
        (WebCore::XMLHttpRequest::createRequest): Only setPendingActivity() if we actually started a request. Also,
        restore a call to nonCacheRequestInFlight() that got lost in a recent refactor.

2009-08-18  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added a client to SQLTransaction. In addition to being a place to
        get notifications about certain events in a transaction, it is
        also an abstraction layer that allows us to plug in different
        implementations for each port for how transactions interract with
        the main DB. For example, WebCore's default implementation will
        make direct calls to DatabaseTracker's methods. At the same time,
        Chromium's implementation will send IPCs to the browser process
        whenever a transaction needs something from the main DB.

        All storage tests pass.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/Database.cpp:
        (WebCore::Database::transactionClient):
        * storage/Database.h:
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::transactionClient):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        * storage/SQLTransactionClient.cpp: Added.
        * storage/SQLTransactionClient.h: Added.

2009-08-18  Julie Parent  <jparent@chromium.org>

        Not reviewed, build fix for Chromium.

        Final change for v8 corresponding to http://trac.webkit.org/changeset/47469.

        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp: Added missing using statment

2009-08-18  Julie Parent  <jparent@chromium.org>

        Not reviewed, build fix for Chromium.

       More corresponding changes to V8 from http://trac.webkit.org/changeset/47469.

        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER): Use srcAttr instead of the src function.

2009-08-18  Julie Parent  <jparent@chromium.org>

        Not reviewed, build fix for Chromium.

        Make corresponding changes to V8 from http://trac.webkit.org/changeset/47469.

        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER): Use srcAttr instead of the src function.

2009-08-18  Dan Bernstein  <mitz@apple.com>

        Build fix.

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

2009-08-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        More work on making DOM classes start with reference count of 1
        https://bugs.webkit.org/show_bug.cgi?id=28068

        Some related clean-up and preparation steps so the subsequent
        patches will be as small as possible.

        * WebCore.base.exp: Sorted this file.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        Use nameAttr instead of the name function.

        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::JSHTMLFrameElement::setSrc):
        Use srcAttr instead of the src function.

        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        (WebCore::JSHTMLIFrameElement::setSrc):
        Use srcAttr instead of the src function.

        * bindings/objc/DOM.mm: Sorted includes.
        * dom/Document.cpp: Ditto.

        * dom/StyledElement.cpp: Made invalidateStyleAttribute inline.
        * dom/StyledElement.h: Ditto.

        * dom/make_names.pl: Changed default of createWithNew to 0.
        Eventually all elements will be created with create instead of new.

        * html/HTMLTagNames.in:
        * svg/svgtags.in:
        * wml/WMLTagNames.in:
        Added createWithNew for every tag. We'll remove it as we convert
        element classes to use create.

        * html/HTMLAppletElement.h: Removed unneeded forward declarations.
        * html/HTMLFrameElement.h: Ditto.

        * html/HTMLEmbedElement.cpp: Removed many attribute get and
        set functions.
        * html/HTMLEmbedElement.h: Ditto.
        * html/HTMLIFrameElement.cpp: Ditto.
        * html/HTMLIFrameElement.h: Ditto.
        * html/HTMLObjectElement.cpp: Ditto.
        * html/HTMLObjectElement.h: Ditto.
        * html/HTMLPlugInElement.cpp: Ditto.
        * html/HTMLPlugInElement.h: Ditto.

        * html/HTMLFrameElementBase.cpp: Removed many attribute get and
        set functions.
        (WebCore::HTMLFrameElementBase::location): Changed to use
        srcAttr instead of src.
        * html/HTMLFrameElementBase.h: Removed many attribute get and set
        functions.

        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        Use srcAttr and typeAttr instead of setSrc and setType.
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::createDocumentStructure): Ditto.

        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::updateWidget): Use nameAttr instead
        of name -- this avoids an extra AtomicString round trip and a little
        ref count churn too.

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        SharedWorkers need to support loading.
        https://bugs.webkit.org/show_bug.cgi?id=28342

        Added loader support to shared workers, and refactored worker tests to also test SharedWorkers

        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        Forwards load requests to an arbitrary document from the list of worker's documents.
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerContext):
        Posts responses back to the shared worker thread.

2009-08-18  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        StyleChange::init needs clean up before fixing the bug 23892
        https://bugs.webkit.org/show_bug.cgi?id=27749

        This patch simplifies StyleChange::init by removing the iteration on CSS properties,
        and adding functions reconcileTextDecorationProperties and extractTextStyle to handle the style.

        Because there is a bug in how text decorations are processes in getPropertiesNotInComputedStyle,
        this patch simplifies the treatment in order to preserve the original behavior of WebKit.
        However, the current implementation is not best (adds redundant text-decorations) and we should fix it later.

        No test is added since there is no change in behavior.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init): Uses getPropertiesNotInComputedStyle instead of iterating through the properties
        (WebCore::StyleChange::reconcileTextDecorationProperties): Removes -webkit-text-decorations-in-effects and redundant "none"
        (WebCore::getIdentifierValue): Obtains the identifier of a CSSPrimitiveValue
        (WebCore::StyleChange::extractTextStyles): Converts properties in style to m_apply* and removes the property
        (WebCore::getPropertiesNotInComputedStyle): Fixed a bug with how text decorations are treated

2009-08-18  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fixing a DB file naming bug in Chromium. The origin should come
        before the DB name in the file name.

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

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase):

2009-08-18  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding four image-specific files to WebCore:
        IconHaiku.cpp, ImageBufferData.h, ImageBufferHaiku.cpp, ImageHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28130

        * platform/graphics/Icon.h:
        * platform/graphics/haiku/IconHaiku.cpp: Added.
        (WebCore::Icon::~Icon):
        (WebCore::Icon::createIconForFile):
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):
        * platform/graphics/haiku/ImageBufferData.h: Added.
        * platform/graphics/haiku/ImageBufferHaiku.cpp: Added.
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageBuffer::image):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/haiku/ImageHaiku.cpp: Added.
        (WebCore::FrameData::clear):
        (WebCore::Image::loadPlatformResource):
        (WebCore::BitmapImage::initPlatformData):
        (WebCore::BitmapImage::invalidatePlatformData):
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::getBBitmap):

2009-08-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27575 [CSS3 
        Backgrounds and Borders] Drop the prefix from background-size

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillProperty):
        (WebCore::cssPropertyID):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::ensurePropertyMap):

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        SharedWorkers need to forward exceptions to parent documents
        https://bugs.webkit.org/show_bug.cgi?id=28320

        Changed SharedWorkerProxy to have individual mutexes (so workers can interact with their parent documents without contention).

        Updated SharedWorkerProxy to forward exceptions/console messages to all parent documents.

        * bindings/js/JSSharedWorkerConstructor.cpp:
        Cleaned up bitrot - added missing include.
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::postExceptionTask):
        Callback used to deliver exceptions to a document.
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        Forwards exceptions to all parent documents for presentation to the user.
        (WebCore::postConsoleMessageTask):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        Forwards console messages to all parent documents for presentation to the user.
        (WebCore::SharedWorkerProxy::addToWorkerDocuments):
        Grabs the mutex before accessing workerDocuments.
        (WebCore::SharedWorkerProxy::documentDetached):
        Grabs the mutex before accessing workerDocuments.

2009-08-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/7135588> HTMLMediaElement should ask WebPolicyLoadDelegate before loading resource
        
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        Call FrameLoaderClient::shouldLoadMediaElementURL.
        
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::shouldLoadMediaElementURL):
        Return true by default.

2009-08-18  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        openDatabase() should not execute any SQL statement on the
        database it's trying to open, unless there are no other open
        handles to the same database. Otherwise, we might run into a
        deadlock.

        Test: storage/open-database-while-transaction-in-progress.html

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

        * storage/Database.cpp:
        (WebCore::Database::performOpenAndVerify):

2009-08-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG Filter feBlend implementation missing
        [https://bugs.webkit.org/show_bug.cgi?id=28133]

        Implementation of SVG Filter feBlend.

        FilterEffect.cp needed changes to optimize the rendering. With the old code
        we drew a subEffect on the current FilterEffect by drawImage, got the PixelArray,
        cleared the drawing area, drew the next FilterEffect with drawImage and picked this
        PixelArray again. This was unefficient and slow. Now we calculate the requested area
        of the subEffect and ask the FilterEffect's ImageBuffer for the PixelArray directly,
        without any drawing operations on GraphicsContext.

        There is already a test case
        Test: svg/W3C-SVG-1.1/filters-blend-01-b.svg

        * html/canvas/CanvasPixelArray.h:
        (WebCore::CanvasPixelArray::set):
        (WebCore::CanvasPixelArray::get):
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::unknown):
        (WebCore::normal):
        (WebCore::multiply):
        (WebCore::screen):
        (WebCore::darken):
        (WebCore::lighten):
        (WebCore::FEBlend::apply):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::calculateDrawingIntRect):
        * platform/graphics/filters/FilterEffect.h:

2009-08-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Fix array formatter followup: node formatter.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._format):

2009-08-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Metrics sidebar broken

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

        * inspector/front-end/MetricsSidebarPane.js:

2009-08-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28432
        String::createCFString() returns a non-retained empty string

        No known change in functionality, so no test.

        * platform/text/cf/StringCF.cpp: (WebCore::String::createCFString): Retain the CFSTR result.
    
2009-08-18  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Oliver Hunt.

        Fix of <https://bugs.webkit.org/show_bug.cgi?id=28326> DRT on Windows doesn't support 
        LayoutTestController::setQuota or print a callback on UIDelegate::exceededDatabaseQuota.
        
        Removed an early return that can cause deleteOrigin or deleteAllDatabases to fail when
        it doesn't have to.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteOrigin):

2009-08-18  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=27357
        Support for :valid and :invalid CSS selectors, from HTML5 specs.
        http://www.whatwg.org/specs/web-apps/current-work/#selector-valid

        Tests: fast/css/pseudo-invalid-001.html
               fast/css/pseudo-invalid-002.html
               fast/css/pseudo-valid-001.html
               fast/css/pseudo-valid-002.html
               fast/css/pseudo-valid-003.html
               fast/css/pseudo-valid-004.html
               fast/css/pseudo-valid-005.html
               fast/css/pseudo-valid-006.html
               fast/css/pseudo-valid-007.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): extracts new pseudo-classes
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Make sure we don't share style between
form controls that have different validity states.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): applies
        style associated to new pseudo-classes
        * dom/Element.h:
        (WebCore::Element::willValidate): pushed up in hierarchy
        (WebCore::Element::isValidFormControlElement): checks for valid form
        control elements (wraps ValidityState::valid())
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::willValidate): minor clean up
        (WebCore::HTMLFormControlElement::isValidFormControlElement): ditto
        * html/HTMLFormControlElement.h:
        * html/HTMLKeygenElement.h:
        (WebCore::HTMLKeygenElement::willValidate): added
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::willValidate): added
        * html/HTMLObjectElement.idl:

2009-08-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Fix array formatter.

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._formatarray):

2009-08-17  Joe Mason  <joe.mason@torchmobile.com>

        Reviewed by George Staikos

        Replace repeated string of PLATFORM(FOO) with a single define
        https://bugs.webkit.org/show_bug.cgi?id=27734

        * loader/CachedFont.cpp:
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::platformDataFromCustomData):
        (WebCore::CachedFont::allClientsRemoved):

2009-08-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=20329, shadows and reflections incorrectly
        considered part of scrollable overflow.

        This patch takes the engine's concept of overflow and splits it into two types:
        layout overflow and visual overflow.
        
        Layout overflow is about other boxes that spill out of an enclosing box,  For example,
        in the inline flow case a tall image could spill out of a line box. Examples of 
        visual overflow are shadows, text stroke (and eventually outline and
        border-image).

        Three objects tracked overflow before this patch: RenderBlock had 
        m_overflowLeft/Top/Width/Height variables.  RootInlineBox had an Overflow*
        that also had four overflow values.  Finally RenderReplaced elements tracked shadow/reflection
        overflow using a map that cached four values.
        
        This patch takes all of these different overflow models and unifies them into a single
        new class called RenderOverflow.   This class is now a member variable in RenderBox and
        InlineFlowBoxes.  It is only allocated if overflow actually exists.  Instead of tracking
        four values, it tracks eight: left/top/right/bottom for layout overflow and 
        left/top/right/bottom for visual overflow.
        
        Overflow computation is now done after layout is finished rather than during layout
        (when child objects can be churning and moving around).  A number of layout tests progressed
        by deferring overflow computation to a separate pass.
        
        All inline flow boxes now track overflow (and not just the root line box).  This allows
        repainting of line boxes to actually be tight and bail early if the overflow rect of a box
        doesn't intersect.  The old code always visited all object on a line if the root line box
        intersected at all.
        
        Line box overflow no longer propagates across self-painting layers.  This fixes a number of
        issues with incorrect scrollbars appearing when relative positioned inlines were used in a page.
        
        Layer bounds have been modified to exclude visual overflow.  The width/height members only really
        have one reason for continued existence, and that is that they happen to be used in repaint()
        when an overflow clip object's height isn't accurate.  In this case, the bounds should exclude
        visual overflow anyway, so this change tightens that repaint up.
        
        Root lines have renamed m_selectionTop/Bottom to m_lineTop/Bottom and positionForPoint methods have
        been changed to use these instead of relying on overflow (which was totally wrong).

        Significant changes have been made to the "almost strict mode" line box quirk where objects with no
        text children have no effect on the height of a line.  Instead of making the height() of the objects
        variable and dependent on overflow, the objects now have their full height and get placed on
        the baseline properly.  They simply don't contribute to overflow above lineTop/Bottom.
        
        Reflections are no longer considered overflow of any kind.  Because reflections have their own layers,
        it is not necessary to treat them as visual or layout overflow in the RenderObject tree.  The end result
        of not incorporating them into RenderOverflow is that they have no effect on scrolling.  transparencyClipBox
        has been extended to support fully reflecting the entire clip box when a reflection exists.  This fixes
        numerous repaint bugs in transparent objects with reflections when the transparent objects had self-painting
        sublayers.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        (WebCore::FrameView::adjustPageHeight):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::height):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::adjustPosition):
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::topCombinedOverflow):
        (WebCore::InlineFlowBox::bottomCombinedOverflow):
        (WebCore::InlineFlowBox::leftCombinedOverflow):
        (WebCore::InlineFlowBox::rightCombinedOverflow):
        (WebCore::InlineFlowBox::combinedOverflowRect):
        (WebCore::InlineFlowBox::topLayoutOverflow):
        (WebCore::InlineFlowBox::bottomLayoutOverflow):
        (WebCore::InlineFlowBox::leftLayoutOverflow):
        (WebCore::InlineFlowBox::rightLayoutOverflow):
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::topVisualOverflow):
        (WebCore::InlineFlowBox::bottomVisualOverflow):
        (WebCore::InlineFlowBox::leftVisualOverflow):
        (WebCore::InlineFlowBox::rightVisualOverflow):
        (WebCore::InlineFlowBox::visualOverflowRect):
        (WebCore::InlineFlowBox::setHorizontalOverflowPositions):
        (WebCore::InlineFlowBox::setVerticalOverflowPositions):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::layout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::addOverflowFromBlockChildren):
        (WebCore::RenderBlock::handleBottomOfBlock):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::fillInlineSelectionGaps):
        (WebCore::RenderBlock::floatRect):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::getHeightForLineCount):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::computeVerticalPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::destroy):
        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        (WebCore::RenderBox::localCaretRect):
        (WebCore::RenderBox::addShadowAndReflectionOverflow):
        (WebCore::RenderBox::addOverflowFromChild):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::clearLayoutOverflow):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::combinedOverflowRect):
        (WebCore::RenderBox::topCombinedOverflow):
        (WebCore::RenderBox::bottomCombinedOverflow):
        (WebCore::RenderBox::leftCombinedOverflow):
        (WebCore::RenderBox::rightCombinedOverflow):
        (WebCore::RenderBox::layoutOverflowRect):
        (WebCore::RenderBox::topLayoutOverflow):
        (WebCore::RenderBox::bottomLayoutOverflow):
        (WebCore::RenderBox::leftLayoutOverflow):
        (WebCore::RenderBox::rightLayoutOverflow):
        (WebCore::RenderBox::visualOverflowRect):
        (WebCore::RenderBox::topVisualOverflow):
        (WebCore::RenderBox::bottomVisualOverflow):
        (WebCore::RenderBox::leftVisualOverflow):
        (WebCore::RenderBox::rightVisualOverflow):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):
        (WebCore::RenderLayer::localBoundingBox):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        * rendering/RenderOverflow.h: Added.
        (WebCore::RenderOverflow::RenderOverflow):
        (WebCore::RenderOverflow::topLayoutOverflow):
        (WebCore::RenderOverflow::bottomLayoutOverflow):
        (WebCore::RenderOverflow::leftLayoutOverflow):
        (WebCore::RenderOverflow::rightLayoutOverflow):
        (WebCore::RenderOverflow::topVisualOverflow):
        (WebCore::RenderOverflow::bottomVisualOverflow):
        (WebCore::RenderOverflow::leftVisualOverflow):
        (WebCore::RenderOverflow::rightVisualOverflow):
        (WebCore::RenderOverflow::setTopLayoutOverflow):
        (WebCore::RenderOverflow::setBottomLayoutOverflow):
        (WebCore::RenderOverflow::setLeftLayoutOverflow):
        (WebCore::RenderOverflow::setRightLayoutOverflow):
        (WebCore::RenderOverflow::setTopVisualOverflow):
        (WebCore::RenderOverflow::setBottomVisualOverflow):
        (WebCore::RenderOverflow::setLeftVisualOverflow):
        (WebCore::RenderOverflow::setRightVisualOverflow):
        (WebCore::RenderOverflow::layoutOverflowRect):
        (WebCore::RenderOverflow::visualOverflowRect):
        (WebCore::RenderOverflow::combinedOverflowRect):
        (WebCore::RenderOverflow::move):
        (WebCore::RenderOverflow::addLayoutOverflow):
        (WebCore::RenderOverflow::addVisualOverflow):
        (WebCore::RenderOverflow::resetLayoutOverflow):
        * rendering/RenderPartObject.cpp:
        (WebCore::RenderPartObject::layout):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::~RenderReplaced):
        (WebCore::RenderReplaced::layout):
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::positionForPoint):
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint):
        * rendering/RenderReplaced.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::layout):
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::paint):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):
        (WebCore::RenderText::localCaretRect):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::adjustPosition):
        (WebCore::RootInlineBox::verticallyAlignBoxes):
        (WebCore::RootInlineBox::selectionTop):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::nextRootBox):
        (WebCore::RootInlineBox::prevRootBox):
        (WebCore::RootInlineBox::lineTop):
        (WebCore::RootInlineBox::lineBottom):
        (WebCore::RootInlineBox::selectionBottom):
        (WebCore::RootInlineBox::selectionHeight):
        (WebCore::RootInlineBox::floats):
        (WebCore::RootInlineBox::floatsPtr):
        (WebCore::RootInlineBox::setLineTopBottomPositions):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutInlineBoxes):

2009-08-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28431
        <rdar://problem/7137610> Application Cache doesn't work with HTTP authentication

        Test: http/tests/appcache/auth.html

        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::shouldUseCredentialStorage): If appcache is enabled,
        always allow it to use stored credentials (we can't ask WebKit client, and maybe we
        shouldn't ask it, because it's not a document that's loading these resources).

2009-08-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan and David Hyatt.

        Fix <rdar://problem/7147996>

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setHasHorizontalScrollbar):
        (WebCore::ScrollView::setHasVerticalScrollbar):
        Update the style of the scroll bars.
        
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::RenderScrollbar):
        Calculate the size of the scrollbar and set it as the frame size.

2009-08-18  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        HTMLMediaElement should fire 'progress' event before 'load'
        https://bugs.webkit.org/show_bug.cgi?id=28314

        Test: media/progress-event-at-least-one.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setNetworkState):
            Schedule 'progress' event before 'load'.

2009-08-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28415
        Set svn:eol-style CRLF on all .sln and .vcproj files that don't already
        have it.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCoreGenerated.vcproj:

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by Eric Seidel.

        Need to extend DumpRenderTree to expose number of worker threads
        https://bugs.webkit.org/show_bug.cgi?id=28292

        Expose WorkerThread::workerThreadCount() for DumpRenderTree so we can write worker lifecycle tests.

        Tests: fast/workers/shared-worker-lifecycle.html-disabled
               fast/workers/worker-lifecycle.html

        * WebCore.base.exp:
        Exported WorkerThread::workerThreadCount().
        * WebCore.xcodeproj/project.pbxproj:
        * workers/WorkerThread.cpp:
        Added tracking of the number of worker threads.
        (WebCore::threadCountMutex):
        (WebCore::WorkerThread::workerThreadCount):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::~WorkerThread):
        * workers/WorkerThread.h:

2009-08-18  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreviewed, build fix.

        [Qt] Add new files I forgot to add in r47424.

2009-08-18  Markus Goetz <Markus.Goetz@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Implement prefetchDNS() function.

        * WebCore.pro:
        * platform/qt/TemporaryLinkStubs.cpp:

2009-08-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Support for parsing <datalist> element and generating HTMLDataListElement nodes.
        https://bugs.webkit.org/show_bug.cgi?id=26915

        Tests: fast/forms/datalist-nonoption-child.html
               fast/forms/datalist.html

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/html.css:
        * html/CollectionType.h:
        (WebCore::):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::itemAfter):
        * html/HTMLDataListElement.cpp: Added.
        (WebCore::HTMLDataListElement::HTMLDataListElement):
        (WebCore::HTMLDataListElement::~HTMLDataListElement):
        (WebCore::HTMLDataListElement::checkDTD):
        (WebCore::HTMLDataListElement::options):
        * html/HTMLDataListElement.h: Added.
        * html/HTMLDataListElement.idl: Added.
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::isAffectedByResidualStyle):
        * html/HTMLTagNames.in:

2009-08-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        -webkit-box-orient:horizontal doesn't work on <button> tag
        https://bugs.webkit.org/show_bug.cgi?id=34445

        Make a flexible button's anonymous child flexible and pass the
        parent's box-orient to the anonymous child.

        Also, added a renderName for anonymous flexible boxes.

        Test: fast/flexbox/box-orient-button.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createAnonymousBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::addChild):
        (WebCore::RenderButton::setupInnerStyle):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::renderName):

2009-08-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.
        
        Render -webkit-mask via compositing layers when possible
        https://bugs.webkit.org/show_bug.cgi?id=28414
        
        Implement accelerated compositing of -webkit-mask, when combined
        with already-composited content.
        
        RenderLayerBacking now creates an additional GraphicsLayer for the mask contents,
        and sets this as the mask on another GraphicsLayer via the setMaskLayer() method.
        GraphicsLayerCA then applies the mask using -[CALayer setMask:].
        
        The enum values for GraphicsLayerPaintingPhase were renamed to avoid the
        confusion with "mask", and a new value, GraphicsLayerPaintMask, was added which
        indicates that just the mask is painting.
        
        When painting the composited mask, we need to paint with the normal compositing
        mode rather than CompositeDestinationIn, so InlineFlowBox and RenderBox now consult
        layer()->hasCompositedMask() to pick the mode. If the mask is composited, they no longer
        need to make transparency layers.
        
        We no longer have to throw video rendering into software because of masks.
        
        When a masked element has composited descendants, that element needs to
        become composited so that the mask can be applied via compositing.

        Tests: compositing/masks/masked-ancestor.html
               compositing/masks/simple-composited-mask.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::maskLayer):
        (WebCore::GraphicsLayer::setMaskLayer):
        (WebCore::GraphicsLayer::paintingPhase):
        (WebCore::GraphicsLayer::setPaintingPhase):
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::):
        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setMaskLayer):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::commitLayerChanges):
        (WebCore::GraphicsLayerCA::updateMaskLayer):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintMask):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMaskImages):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasCompositedMask):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::hasCompositedMask):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::RenderLayerBacking::destroyGraphicsLayer):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        (WebCore::RenderLayerBacking::updateMaskLayer):
        (WebCore::RenderLayerBacking::paintingPhaseForPrimaryLayer):
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::hasMaskLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::canAccelerateVideoRendering):
        (WebCore::RenderLayerCompositor::requiresCompositingWhenDescendantsAreCompositing):
        * rendering/RenderLayerCompositor.h:

2009-08-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Layer content misplaced with compositing, z-index and overflow
        https://bugs.webkit.org/show_bug.cgi?id=28361
        
        The foreground GraphicsLayer (used to render element foreground when the element has 
        negative z-order children) was misplaced when there is a clipping layer (which clips
        children). The foreground layer is parented under the clipping layer so that the foreground
        depth-sorts with the layer's children, so its geometry needs to be computed relative to
        that clipping layer.
        
        Also clarified some FIXME comments, and corrected a debug-only layer name.

        Test: compositing/geometry/clipping-foreground.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::updateSublayerList):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):

2009-08-17  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Fix leaks of SVGElementInstance seen during regression tests.

        r47313 made TreeShared types start with a ref-count of 1, but SVGElementInstance was mistakenly
        not updated to have a create method that adopted the initial reference.  This lead to the instances
        of SVGElementInstance allocated by SVGUseElement being leaked.

        * svg/SVGElementInstance.h:
        (WebCore::SVGElementInstance::create):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::buildPendingResource):
        (WebCore::SVGUseElement::buildInstanceTree):
        (WebCore::SVGUseElement::handleDeepUseReferencing):

2009-08-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Some cleanup towards https://bugs.webkit.org/show_bug.cgi?id=13631
        Page Cache should support pages with frames.

        - Re-factor all remaining page cache code out of DocumentLoader, as CachedPage/CacheFrame loads
          are solely the responsibility of FrameLoader.
        - Enhance some page cache related Logging to help development.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::identifierForInitialRequest):

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::isLoadingFromCachedPage):

2009-08-17  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        Moved implementation of isAfterContent to RenderObject
        (as inline method to avoid potential performance regressions).

        BUG 28376 -  [Cleanup] isAfterContent() implemented twice, should be member of RenderObject
        (https://bugs.webkit.org/show_bug.cgi?id=28376)

        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAfterContent):

2009-08-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Assertion failure in WebCore::RenderHTMLCanvas::layout
        https://bugs.webkit.org/show_bug.cgi?id=12052

        Don't handle run-in if the element is not a block element.

        Test: fast/runin/nonblock-runin.html

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

2009-08-17  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Darin Adler.

        Fix createImageData to raise the NOT_SUPPORTED_ERR exception when
        either of the arguments are not finite.

        According to
        http://www.whatwg.org/specs/web-apps/current-work/#pixel-manipulation:
        "If any of the arguments to createImageData() or getImageData() are
        infinite or NaN, or if the createImageData()  method is invoked with
        only one argument but that argument is null, the method must instead
        raise a NOT_SUPPORTED_ERR  exception."

        Test: http://philip.html5.org/tests/canvas/suite/tests/2d.imageData.create.nonfinite.html

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

2009-08-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Add a way to release the storage lock
        https://bugs.webkit.org/show_bug.cgi?id=28411

        Two scripts within the same origin that are accessing LocalStorage must not do
        it simultaneously, according to the spec.  There are some cases, however, where
        a script might want to override this behavior.  navigator.getStorageUpdates()
        was added for this reason:
        http://dev.w3.org/html5/spec/Overview.html#manually-releasing-the-storage-mutex

        Add this function to navigator and hook it up to DOM Storage.

        * page/Navigator.cpp:
        (WebCore::Navigator::getStorageUpdates):
        * page/Navigator.h:
        * page/Navigator.idl:
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::unlock):
        * storage/StorageNamespaceImpl.h:

2009-08-17  Mark Rowe  <mrowe@apple.com>

        Build fix.

        CFNetwork isn't present in the framework search path on Mac OS X so we can't directly include its headers.
        We include CoreServices.h, the umbrella framework that contains CFNetwork, from the prefix header which
        results in the CFNetwork headers being included on Mac OS X.  CoreServices.h doesn't include CFNetwork.h on
        Windows though so we explicitly include this header from the prefix header when on Windows.

        * WebCorePrefix.h:
        * platform/network/cf/DNSCFNet.cpp: Remove #include that is no longer needed.

2009-08-17  Alexey Proskuryakov  <ap@apple.com>

        Trying a better build fix (the previous one broke Leopard bots, although it did build for me).

        * platform/network/cf/DNSCFNet.cpp: Include CFNetwork/CFNetwork.h instead.

2009-08-17  Alexey Proskuryakov  <ap@apple.com>

        Trying to fix Windows build.

        * platform/network/cf/DNSCFNet.cpp: Include CFNetwork/CFHost.h.

2009-08-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

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

2009-08-17  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=28401
        Add support for DNS prefetching with CFNetwork

        This is just an optimization, no behavior change, so no tests.

        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::clientCallback):
        (WebCore::prefetchDNS):
        Use async CFHostStartInfoResolution() for implementation.

2009-08-17  Aaron Boodman  <aa@chromium.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=28313: Combine ThreadableLoaderOptions::crossOriginRequestPolicy and
        ThreadableLoaderOptions::crossOriginRedirectPolicy since they are always set the same way.

        Also, tightened up behavior of XMLHttpRequest with cross-origin redirects and access control. We have not implemented
        redirects access control, so we should never redirect across origins. But in two edge cases, we were:

        * Asynchronous XHR: Script on origin A requests resource from origin B. Server redirects (without sending access control
          authorization headers) to a resource on origin A.
        * Synchronous XHR: Script on origin A requests resource from origin B. Server redirects (without sending access control
          authorization headers) to another resource on origin B (this time sending access control authorization headers).

        Test: http/tests/xmlhttprequest/access-control-and-redirects.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::willSendRequest): Refactor redirect checking code into shared location.
        (WebCore::DocumentThreadableLoader::loadRequest): Ditto.
        (WebCore::DocumentThreadableLoader::isAllowedRedirect): Ditto.
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.h:
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions): Remove ThreadableLoaderOptions::crossOriginRedirectPolicy.
        * page/EventSource.cpp:
        (WebCore::EventSource::connect): Ditto.
        * workers/Worker.cpp: Ditto.
        (WebCore::Worker::Worker): Ditto.
        * workers/WorkerContext.cpp: Ditto.
        (WebCore::WorkerContext::importScripts): Ditto.
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously): Ditto.
        (WebCore::WorkerScriptLoader::loadAsynchronously): Ditto.
        * workers/WorkerScriptLoader.h: 
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest): Ditto.

2009-08-17  Adam Langley  <agl@google.com>

        Reviewed by Dan Bernstein (relanding of r47157).

        Fix a typo in platform/graphics/skia/PlatformContextSkia.cpp

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

        This was originally fixed in r47157, however it triggered a bug in
        Skia which caused Chromium Linux to fail layout tests in debug mode.
        It was reverted in r47189 while we sorted it out.

        The Skia bug was fixed in Skia's r321 [1] and rolled into Chromium in
        Chromium's r23523. This is a reland of the original patch.

        No new tests because it's a just typo fix.

        [1] http://code.google.com/p/skia/source/detail?r=321

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintCommon):

2009-08-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Protect ResourceHandle for g_file_query_info_async call, using the
        same technique we already use for HTTP requests that take the soup
        path.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::finishedCallback):
        (WebCore::):

2009-08-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r47255): MediaWiki's (including Wikipedia) navigation pane
        appears below the main content
        https://bugs.webkit.org/show_bug.cgi?id=28350

        A particular version of the MediaWiki software detects WebKit through
        user agent sniffing and imports a style sheet called KHTMLFixes.css,
        which contains a single rule that was meant to work around some KHTML
        bug, but currently has the sole effect of causing the float containing
        the main article content to extend all the way to the left and thus push
        down the left navigation pane.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet): If site specific hacks are
        enabled, check if the imported style sheet is the MediaWiki
        KHTMLFixes.css. If so, remove the offending rule.

2009-08-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Kevin Ollivier.

        Correct crash when processing local cancelled requests.

        No new tests. Existing fast/images/favicon-as-image.html
        displays the problem.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback): Add check for m_cancelled after
          performing local-file processing.
        (WebCore::ResourceHandleManager::downloadTimerCallback): Add
          check for m_cancelled after performing local-file processing.

2009-08-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Reverts 47371, since it breaks GTK+.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData):
        * platform/image-decoders/ImageDecoder.cpp: Removed.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::convertCMYKToRGBA):
        (WebCore::convertRGBToRGBA):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2009-08-17  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Treat.

        Allow image decoders to down-sample the image directly
        to scaled output buffer. This can be enabled/disabled by
        macro ENABLE(IMAGE_DECODER_DOWN_SAMPLING).
        Only JPEG and PNG decoders are modified to support it now.
        https://bugs.webkit.org/show_bug.cgi?id=28308

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData):
        * platform/image-decoders/ImageDecoder.cpp: Added.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder):
        (WebCore::ImageDecoder::setMaxNumPixels):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::convertCMYKToRGBA):
        (WebCore::convertRGBToRGBA):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::setSize):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2009-08-17  Simon Fraser  <simon.fraser@apple.com>

        Build fix: fix float literals to avoid casting warnings.

        * rendering/MediaControlElements.cpp:

2009-08-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        Use OwnPtrs for GraphicsLayers
        https://bugs.webkit.org/show_bug.cgi?id=28399

        Convert RenderLayerBacking and RenderLayerCompositor to use OwnPtrs
        for their references to GraphicsLayers.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayer::create):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        (WebCore::RenderLayerBacking::destroyGraphicsLayer):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::updateInternalHierarchy):
        (WebCore::RenderLayerBacking::updateClippingLayers):
        (WebCore::RenderLayerBacking::updateForegroundLayer):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::graphicsLayer):
        (WebCore::RenderLayerBacking::clippingLayer):
        (WebCore::RenderLayerBacking::ancestorClippingLayer):
        (WebCore::RenderLayerBacking::foregroundLayer):
        (WebCore::RenderLayerBacking::parentForSublayers):
        (WebCore::RenderLayerBacking::childForSuperlayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::~RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::rootPlatformLayer):
        (WebCore::RenderLayerCompositor::didMoveOnscreen):
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer):
        * rendering/RenderLayerCompositor.h:

2009-08-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Reset InjectedScript styles cache on document change.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::resetInjectedScript):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDocument):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/InjectedScript.js:
        (InjectedScript._reset):

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        * rendering/MediaControlElements.cpp: Removed unneeded include of CString.h,
        resorted includes, renamed "doc" to "document" and fixed formatting.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Removed functions now unneeded due to use of Reflect to create
        language bindings.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityParentForImageMap):
        Get at usemap attribute directly.

        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        Get at id attribute directly.
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertHorizontalRule): Ditto.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::dir): Get at dir attribute of body directly.
        (WebCore::HTMLDocument::setDir): Ditto.

        * html/HTMLElement.cpp: Deleted unused functions.
        * html/HTMLElement.h: Ditto.

        * html/HTMLImageElement.cpp: Deleted unused functions.
        (WebCore::HTMLImageElement::alt): Changed to return const AtomicString&.
        (WebCore::HTMLImageElement::addSubresourceAttributeURLs): Changed to
        get at usemap attribute directly, but added a FIXME because although
        it is what the old code did, it looks to not be entirely correct.

        * html/HTMLImageElement.h: Deleted unused functions.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString): Get at alt attribute directly.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageMap): Get at usemap attribute directly.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer): Get at id attribute
        directly.
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): Removed
        explicit HTMLNames namespace qualification.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode): Removed unneeded calls
        to RefPtr::get.

2009-08-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Discard DOM Node bindings on any document change.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDocument):

2009-08-13  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Improve Cookie DataGrid to Show Hidden Data
        https://bugs.webkit.org/show_bug.cgi?id=28269

        * English.lproj/localizedStrings.js: DataGrid Headers "Name", "Value", "Size", ...
        * WebCore.gypi: added missing files

          Implemented Bindings for InspectorController.deleteCookie(name)

        * inspector/InspectorBackend.idl:
        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::cookies):
        (WebCore::JSInspectorBackend::deleteCookie):

          v8 Bindings Stubs

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

          Removed WebInspector.Cookie

        * inspector/front-end/Cookie.js: Removed.
        * inspector/front-end/inspector.html:
        * inspector/front-end/WebKit.qrc:

          Improved DataGrid and Kept Fallback Behavior for Platforms that don't
          yet provide access to raw cookies.

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.get statusBarItems):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype.buildCookies):
        (WebInspector.CookieItemsView.prototype.dataGridForCookies):
        (WebInspector.CookieItemsView.prototype.fallbackUpdate.callback):
        (WebInspector.CookieItemsView.prototype.fallbackUpdate):
        (WebInspector.CookieItemsView.prototype.fallbackBuildCookiesFromString):
        (WebInspector.CookieItemsView.prototype.fallbackDataGridForCookies):
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked):

          Interaction with the page through Injected Script (for fallback behavior)

        * inspector/front-end/DOMAgent.js:
        (InspectorController.getCookies):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.setStyleProperty): style fix
        (InjectedScript.getCookies):

          Allow alignment of text inside DataGrids.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGridNode.prototype.createCell):
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.dataGridForDOMStorage):
        * inspector/front-end/inspector.css:

          Added deleteCookie(., ., String name)
          Modified getRawCookies to return a bool to know if its implemented

        * platform/CookieJar.h:


          Implemented deleteCookie for Macs

        * platform/mac/CookieJar.mm:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):

          Stub Implementations for Other Platforms

        * platform/haiku/CookieJarHaiku.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):

2009-08-17  Adam Treat  <adam.treat@torchmobile.com>

        Blind build fix for Leopard.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::adjustLineToPixelBoundaries):

2009-08-13  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Style fixes based on cpp_style.py and WebKit Style guide for
        GraphicsContextCG.cpp

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

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::imageInterpolationQuality):
        (WebCore::GraphicsContext::setPlatformTextDrawingMode):
        (WebCore::GraphicsContext::setCompositeOperation):

2009-08-13  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Style fixes based on cpp_style.py and WebKit Style guide for
        GraphicsContext.cpp/h, GraphicsContextCairo.cpp and GraphicsContextQt.cpp.

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

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::save):
        (WebCore::GraphicsContext::restore):
        (GraphicsContext::drawText):
        (GraphicsContext::initFocusRing):
        (GraphicsContext::focusRingBoundingRect):
        (GraphicsContext::drawImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::toCairoOperator):
        * platform/graphics/qt/GraphicsContextQt.cpp:

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Change HTMLAreaElement to use OwnArrayPtr
        https://bugs.webkit.org/show_bug.cgi?id=28386

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::HTMLAreaElement): Removed unneeded initializer.
        (WebCore::HTMLAreaElement::~HTMLAreaElement): Removed unneeded delete call.
        (WebCore::HTMLAreaElement::parseMappedAttribute): Use the set function
        instead of deletion followed by assignment.
        * html/HTMLAreaElement.h: Use OwnArrayPtr.

2009-08-17  Darin Adler  <darin@apple.com>

        Fix Windows build.

        * dom/make_names.pl: Add back cast to (void*) needed on Windows.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Move noResize from HTMLFrameElementBase to HTMLFrameElement
        https://bugs.webkit.org/show_bug.cgi?id=28384

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::HTMLFrameElement): Initialize m_noResize.
        (WebCore::HTMLFrameElement::parseMappedAttribute): Set m_noResize to true
        here if noresizeAttr is changed. This code was moved here from
        HTMLFrameElementBase, but I added some FIXME comments.
        (WebCore::HTMLFrameElement::setNoResize): Set the attribute based on
        boolean argument. Moved here from HTMLFrameElementBase.

        * html/HTMLFrameElement.h: Moved noResize, setNoResize, and m_noResize
        here from HTMLFrameElementBase.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase): Removed m_noResize.
        (WebCore::HTMLFrameElementBase::parseMappedAttribute): Removed code to parse
        noresizeAttr.

        * html/HTMLFrameElementBase.h: Removed noResize, setNoResize, and m_noResize.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Tweak HTMLFrameElementBase so that m_URL can be private
        https://bugs.webkit.org/show_bug.cgi?id=28385

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::rendererIsNeeded): Removed m_URL argument.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed): Use m_URL instead of
        taking an argument.
        (WebCore::HTMLFrameElementBase::openURL): Removed m_URL argument.
        * html/HTMLFrameElementBase.h: Removed argument from isURLAllowed function.
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::rendererIsNeeded): Removed m_URL argument.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        HTMLViewSourceDocument should use smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=28378

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument): Don't initialize
        pointers any more since RefPtr starts 0 by default.
        (WebCore::HTMLViewSourceDocument::createContainingTable): Use more specific
        types for local variables.
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName): Return a PassRefPtr,
        and use a RefPtr of a more specific type for a local variable.
        (WebCore::HTMLViewSourceDocument::addLine): Use more specific types for local
        variables, and use RefPtr as well.
        (WebCore::HTMLViewSourceDocument::addLink): Return a PassRefPtr, and use a
        RefPtr of a more specific type for a local variable.

        * html/HTMLViewSourceDocument.h: Change return types to PassRefPtr and
        data member types to RefPtr.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        DOM attribute getter/setter functions should use const AtomicString& type
        https://bugs.webkit.org/show_bug.cgi?id=25425

        Convert 4 more classes. These are classes I am going to make other changes
        to soon, so it's good to have this use of Reflect in the IDL out of the way.

        * html/HTMLEmbedElement.idl: Use Reflect for many attributes.
        * html/HTMLFrameElement.idl: Ditto.
        * html/HTMLIFrameElement.idl: Ditto.
        * html/HTMLObjectElement.idl: Ditto.

2009-08-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Script to create element factory needs changes to accommodate calling create
        https://bugs.webkit.org/show_bug.cgi?id=28379

        * dom/make_names.pl: Tweak formatting. Remove lots of unneeded quotes
        around names used inside {}. Added new createWithNew property for tags
        that makes the factory use a create function instead of calling new.
        Renamed functions with initialize in their name to have default in their
        name, since they return an array full of default values and don't themselves
        initialize anything.

2009-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        StyledElement should use ASCIICType instead of having its own toHex function
        https://bugs.webkit.org/show_bug.cgi?id=28377

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSColor): Use isASCIIHexDigit and toASCIIHexValue.

2009-08-16  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        execCommand("InsertHorizontalRule") inserts a broken <hr> element
        https://bugs.webkit.org/show_bug.cgi?id=28375

        * editing/EditorCommand.cpp:
        (WebCore::executeInsertHorizontalRule): Create an HTMLHRElement
        instead of just an HTMLElement.

2009-08-16  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] <option> element & 'onpick' events - history navigation is broken
        https://bugs.webkit.org/show_bug.cgi?id=28371

        After selecting an option element with an 'onpick' event associated with a 'go' task,
        the navigation is executed. When going back in history, the same 'onpick' event is fired
        again. Fix that problem, add wml/option-element-onpick-recursion.html covering the bug.

        Test: wml/option-element-onpick-recursion.html

        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::handleIntrinsicEventIfNeeded):
        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::WMLSelectElement):
        (WebCore::WMLSelectElement::selectInitialOptions):
        * wml/WMLSelectElement.h:
        (WebCore::WMLSelectElement::initialized):

2009-08-16  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector Resource filtering: keyboard Navigation always uses ALL resources
        https://bugs.webkit.org/show_bug.cgi?id=28231
        
        Determine if a resource is selectable on user action.
        
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.get selectable):

2009-08-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/28355> Replace MAX()/MIN() macros with type-safe std::max()/min() templates

        Reviewed by Dan Bernstein.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetSpelling): Changed MIN() to min().
        * platform/graphics/mac/FontMacATSUI.mm:
        (WebCore::Font::selectionRectForComplexText): Changed MAX() to
        max() and MIN() to min().
        (WebCore::Font::floatWidthForComplexText): Ditto.
        * platform/graphics/mac/SimpleFontDataMac.mm: Added using
        std::max statement.
        (WebCore::SimpleFontData::platformInit): Changed MAX() to max().
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode): Changed MIN() to min().

2009-08-16  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Cleanup WMLIntrinsicEventHandling code
        https://bugs.webkit.org/show_bug.cgi?id=28358

        Remove superflous "Event* evt" parameter from executeTask() methods. It's a leftover from the initial WML merge.

        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::defaultEventHandler):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::defaultEventHandler):
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::executeTask):
        * wml/WMLGoElement.h:
        * wml/WMLIntrinsicEventHandler.cpp:
        (WebCore::WMLIntrinsicEventHandler::triggerIntrinsicEvent):
        * wml/WMLPrevElement.cpp:
        (WebCore::WMLPrevElement::executeTask):
        * wml/WMLPrevElement.h:
        * wml/WMLRefreshElement.cpp:
        (WebCore::WMLRefreshElement::executeTask):
        * wml/WMLRefreshElement.h:
        * wml/WMLTaskElement.h:

2009-08-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: A handful of DOMAgent-related fixes and cleanups.

        - renamed elementId to nodeId in operations on nodes.
        - added load listeners to frame owners in InspectorDOMAgent.
        - removed InspectorController::inspectedWindowScriptObjectCleared event.
        - preserved isViaInspector flag for 'via inspector' marker to survive styles update.
        - removed contentDocument-related logic from ElementsPanel since it is handled in
            the InspectorDOMAgent.
        - removed DOM listeners unregistration and corresponding events from InspectorController.
        - made this.styles 'private' in ElementsPanel.
        - added TODO for the handleCopy processing.

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

        * WebCore.order:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getChildNodes):
        (WebCore::InspectorBackend::setTextNodeValue):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::startListening):
        (WebCore::InspectorDOMAgent::stopListening):
        (WebCore::InspectorDOMAgent::handleEvent):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::getChildNodes):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::setTextNodeValue):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::innerParentNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMDocument.prototype.addEventListener):
        (WebInspector.DOMDocument.prototype.removeEventListener):
        (WebInspector.DOMDocument.prototype._fireDomEvent):
        (WebInspector.DOMAgent.prototype.getChildNodesAsync.mycallback):
        (WebInspector.DOMAgent.prototype.getChildNodesAsync):
        (WebInspector.DOMAgent.prototype._setChildNodes):
        (WebInspector.CSSStyleDeclaration.parseRule):
        (WebInspector.childNodeInserted):
        (WebInspector.childNodeRemoved):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype.addStyleChange):
        (WebInspector.ElementsPanel.prototype.removeStyleChange):
        (WebInspector.ElementsPanel.prototype._updateModifiedNodes):
        (WebInspector.ElementsPanel.prototype.updateBreadcrumb):
        (WebInspector.ElementsPanel.prototype.handleCopyEvent):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set rootDOMNode):
        (WebInspector.ElementsTreeOutline.prototype.findTreeElement):
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype._updateChildren.updateChildrenOfNode):
        (WebInspector.ElementsTreeElement.prototype._updateChildren):
        (WebInspector.ElementsTreeElement.prototype.onexpand):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.addStyleSelector):
        (InjectedScript._serializeRule):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        * inspector/front-end/inspector.js:
        (WebInspector.set hoveredDOMNode):
        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype.findTreeElement):
        * inspector/front-end/utilities.js:
        (Node.prototype.enclosingNodeOrSelfWithNodeNameInArray):
        (Node.prototype.enclosingNodeOrSelfWithClass):
        (isAncestorNode):
        (firstCommonNodeAncestor):
        (traverseNextNode):
        (traversePreviousNode):
        ():
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchWindowObjectAvailable):
        * page/android/InspectorControllerAndroid.cpp:

2009-08-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Optimize updateFillImages() to not add/remove clients every time
        https://bugs.webkit.org/show_bug.cgi?id=28334

        Optimize the case where old and new just have a single layer pointing to the same (or no)
        image.

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

2009-08-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Implement animations of multiple text-shadows and -webkit-box-shadows.
        https://bugs.webkit.org/show_bug.cgi?id=28266
        
        Test: transitions/multiple-shadow-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::PropertyWrapperShadow::equals):
        (WebCore::PropertyWrapperShadow::blend):

2009-08-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Make transitions work for position and size of multiple backgrounds and masks.
        https://bugs.webkit.org/show_bug.cgi?id=28266
        
        Make background-position, background-size, -webkit-mask-position and -webkit-mask-size
        properties animatable with multiple backgrounds, rather than just animating the first one.

        Tests: transitions/multiple-background-size-transitions.html
               transitions/multiple-background-transitions.html
               transitions/multiple-mask-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::FillLayerPropertyWrapperBase::FillLayerPropertyWrapperBase):
        (WebCore::FillLayerPropertyWrapperBase::~FillLayerPropertyWrapperBase):
        (WebCore::FillLayerPropertyWrapperGetter::FillLayerPropertyWrapperGetter):
        (WebCore::FillLayerPropertyWrapperGetter::equals):
        (WebCore::FillLayerPropertyWrapper::FillLayerPropertyWrapper):
        (WebCore::FillLayerPropertyWrapper::blend):
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::FillLayersPropertyWrapper::equals):
        (WebCore::FillLayersPropertyWrapper::blend):
        (WebCore::ensurePropertyMap):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::setXPosition):
        (WebCore::FillLayer::setYPosition):
        (WebCore::FillLayer::setSize):

2009-08-15  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Jan Alonzo.

        Don't crash in fieldset code when WML is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=28012

        Test: fast/wml/html-fieldset-crash.html

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::findLegend): ++brackets

2009-08-15  Sam Weinig  <sam@webkit.org>

        Try and enable EventSource on Windows.

        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

2009-08-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Setting attribute event listeners to the body does not set them on the window
        https://bugs.webkit.org/show_bug.cgi?id=28343

        Tests: fast/dom/Window/HTMLBodyElement-window-eventListener-attributes.html
               fast/dom/Window/HTMLFrameSetElement-window-eventListener-attributes.html

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::setOnblur): Use setWindowAttributeEventListener instead of setAttributeEventListener.
        (WebCore::HTMLBodyElement::setOnerror): Ditto.
        (WebCore::HTMLBodyElement::setOnfocus): Ditto.
        (WebCore::HTMLBodyElement::setOnload): Ditto.
        (WebCore::HTMLBodyElement::setOnbeforeunload): Ditto.
        (WebCore::HTMLBodyElement::setOnmessage): Ditto.
        (WebCore::HTMLBodyElement::setOnoffline): Ditto.
        (WebCore::HTMLBodyElement::setOnonline): Ditto.
        (WebCore::HTMLBodyElement::setOnresize): Ditto.
        (WebCore::HTMLBodyElement::setOnstorage): Ditto.
        (WebCore::HTMLBodyElement::setOnunload): Ditto.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::setOnblur): Ditto.
        (WebCore::HTMLFrameSetElement::setOnerror): Ditto.
        (WebCore::HTMLFrameSetElement::setOnfocus): Ditto.
        (WebCore::HTMLFrameSetElement::setOnload): Ditto.
        (WebCore::HTMLFrameSetElement::setOnbeforeunload): Ditto.
        (WebCore::HTMLFrameSetElement::setOnmessage): Ditto.
        (WebCore::HTMLFrameSetElement::setOnoffline): Ditto.
        (WebCore::HTMLFrameSetElement::setOnonline): Ditto.
        (WebCore::HTMLFrameSetElement::setOnresize): Ditto.
        (WebCore::HTMLFrameSetElement::setOnstorage): Ditto.
        (WebCore::HTMLFrameSetElement::setOnunload): Ditto.

2009-08-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix up some IDL comments.

        * html/HTMLBodyElement.idl:
        * html/HTMLFrameSetElement.idl:

2009-08-15  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Sam Weinig.

        Added implementation of the EventSource object that enables
        server-sent events from HTML5.
        http://dev.w3.org/html5/eventsource/
        https://bugs.webkit.org/show_bug.cgi?id=14997

        Tests: fast/eventsource/eventsource-attribute-listeners.html
               fast/eventsource/eventsource-constructor.html
               http/tests/eventsource/eventsource-bad-mime-type.html
               http/tests/eventsource/eventsource-parse-event-stream.html
               http/tests/eventsource/eventsource-reconnect.html
               http/tests/eventsource/eventsource-status-code-states.html
               http/tests/eventsource/workers/eventsource-simple.html

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::eventSource):
        * bindings/js/JSEventSourceConstructor.cpp: Added.
        (WebCore::):
        (WebCore::JSEventSourceConstructor::JSEventSourceConstructor):
        (WebCore::constructEventSource):
        (WebCore::JSEventSourceConstructor::getConstructData):
        * bindings/js/JSEventSourceConstructor.h: Added.
        (WebCore::JSEventSourceConstructor::classInfo):
        * bindings/js/JSEventSourceCustom.cpp: Added.
        (WebCore::JSEventSource::markChildren):
        (WebCore::JSEventSource::addEventListener):
        (WebCore::JSEventSource::removeEventListener):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::eventSource):
        * dom/EventNames.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toEventSource):
        * dom/EventTarget.h:
        * page/DOMWindow.idl:
        * page/EventSource.cpp: Added.
        (WebCore::EventSource::EventSource):
        (WebCore::EventSource::~EventSource):
        (WebCore::EventSource::connect):
        (WebCore::EventSource::endRequest):
        (WebCore::EventSource::scheduleReconnect):
        (WebCore::EventSource::reconnectTimerFired):
        (WebCore::EventSource::url):
        (WebCore::EventSource::readyState):
        (WebCore::EventSource::close):
        (WebCore::EventSource::scriptExecutionContext):
        (WebCore::EventSource::addEventListener):
        (WebCore::EventSource::removeEventListener):
        (WebCore::EventSource::dispatchEvent):
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::didReceiveData):
        (WebCore::EventSource::didFinishLoading):
        (WebCore::EventSource::didFail):
        (WebCore::EventSource::didFailRedirectCheck):
        (WebCore::EventSource::parseEventStream):
        (WebCore::EventSource::parseEventStreamLine):
        (WebCore::EventSource::dispatchGenericEvent):
        (WebCore::EventSource::dispatchMessageEvent):
        (WebCore::EventSource::stop):
        * page/EventSource.h: Added.
        (WebCore::EventSource::create):
        (WebCore::EventSource::):
        (WebCore::EventSource::setOnopen):
        (WebCore::EventSource::onopen):
        (WebCore::EventSource::setOnmessage):
        (WebCore::EventSource::onmessage):
        (WebCore::EventSource::setOnerror):
        (WebCore::EventSource::onerror):
        (WebCore::EventSource::toEventSource):
        (WebCore::EventSource::eventListeners):
        (WebCore::EventSource::refEventTarget):
        (WebCore::EventSource::derefEventTarget):
        * page/EventSource.idl: Added.
        * workers/WorkerContext.idl:

2009-08-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Minor DOMAgent bugfixes.

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

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::nodeForId):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):

2009-08-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Evaluating objects while on a breakpoint dumps string
        representation instead of live object. 

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

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.completions.this._evalInInspectedWindow):
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype._reportCompletions):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame.delayedEvaluation):
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        (WebInspector.ScriptsPanel.prototype.variablesInSelectedCallFrame):

2009-08-15  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding two new files to WebCore/platform/haiku:
        LocalizedStringsHaiku.cpp and LoggingHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28129

        * platform/haiku/LocalizedStringsHaiku.cpp: Added.
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultLanguage):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::unknownFileSizeText):
        (WebCore::AXWebAreaText):
        (WebCore::AXLinkText):
        (WebCore::AXListMarkerText):
        (WebCore::AXImageMapText):
        (WebCore::AXHeadingText):
        (WebCore::imageTitle):
        (WebCore::contextMenuItemTagTextDirectionMenu):
        (WebCore::AXButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::AXDefinitionListTermText):
        (WebCore::AXDefinitionListDefinitionText):
        * platform/haiku/LoggingHaiku.cpp: Added.
        (WebCore::InitializeLoggingChannelsIfNecessary):

2009-08-15  Darin Adler  <darin@apple.com>

        Fix GTK build.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (fallbackObject): Pass 0 for document. Should be OK at least for now.

2009-08-15  Darin Adler  <darin@apple.com>

        Fix Qt build.

        * dom/XMLTokenizerQt.cpp: Use create functions instead of calling new
        directly to make CDATASection and Comment nodes.

2009-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Make DOM classes start with a reference count of 1, like all other RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=28068

        First half, everything except for element classes.

        * GNUmakefile.am: Removed DocPtr.h.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * dom/Attr.cpp:
        (WebCore::Attr::Attr): Added a call to createTextChild here so callers don't
        have to call it explicitly.
        (WebCore::Attr::create): Added.
        (WebCore::Attr::setValue): Changed to take AtomicString.
        (WebCore::Attr::cloneNode): Use create.

        * dom/Attr.h: Added a create function. Made the constructor private,
        and a lot of other functions private as well.

        * dom/Attribute.cpp:
        (WebCore::Attribute::createAttrIfNeeded): Use Attr::create.

        * dom/CDATASection.cpp:
        (WebCore::CDATASection::create): Added.
        (WebCore::CDATASection::cloneNode): Use create.
        (WebCore::CDATASection::virtualCreate): Ditto.

        * dom/CDATASection.h: Added a create function. Made everything private.
        Removed unneeded destructor declaration.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::CharacterData): Replaced the multiple constructors
        with a single one that takes ConstructionType.

        * dom/CharacterData.h: Made more functions be protected and private.
        Made m_data be private.

        * dom/Comment.cpp:
        (WebCore::Comment::Comment): Got rid of an extra constructor.
        (WebCore::Comment::create): Added.
        (WebCore::Comment::cloneNode): Call create.

        * dom/Comment.h: Added a create function. Made everything private.

        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents): Use RefPtr instead of DocPtr.
        (WebCore::dispatchChildRemovalEvents): Ditto.

        * dom/ContainerNode.h: Made the constructor protected and passed
        ConstructionType instead of an isElement boolean.

        * dom/DocPtr.h: Removed.

        * dom/Document.cpp:
        (WebCore::Document::Document): Simplified the code that sets m_document
        since it's no longer a smart pointer.
        (WebCore::Document::removedLastRef): Use explicit calls to selfOnlyRef
        and selfOnlyDeref instead of a DocPtr in here.
        (WebCore::Document::~Document): Simplified the code that sets m_document
        since it's no longer a smart pointer.
        (WebCore::Document::createDocumentFragment): Call create.
        (WebCore::Document::createTextNode): Ditto.
        (WebCore::Document::createComment): Ditto.
        (WebCore::Document::createCDATASection): Ditto.
        (WebCore::Document::createProcessingInstruction): Ditto.
        (WebCore::Document::createEntityReference): Ditto.
        (WebCore::Document::createEditingTextNode): Ditto.
        (WebCore::Document::importNode): Call Attr::create.
        (WebCore::Document::createAttributeNS): Ditto.

        * dom/Document.h: Call adoptRef. Made a lot of functions private and
        protected and sorted them so public functions come first.

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::create): Added.
        (WebCore::DocumentFragment::cloneNode): Call create.
        * dom/DocumentFragment.h: Added create.

        * dom/DocumentType.cpp:
        (WebCore::DocumentType::DocumentType): Pass type to Node constructor.
        (WebCore::DocumentType::cloneNode): Use create.
        * dom/DocumentType.h:
        (WebCore::DocumentType::create): Call adoptRef.

        * dom/EditingText.cpp:
        (WebCore::EditingText::create): Added.
        * dom/EditingText.h: Added a create function. Made everything private.

        * dom/Element.cpp:
        (WebCore::Element::Element): Pass CreateElementZeroRefCount to preserve
        the zero reference count behavior for classes derived from Element.

        * dom/EntityReference.cpp:
        (WebCore::EntityReference::create): Added.
        (WebCore::EntityReference::cloneNode): Call create.
        * dom/EntityReference.h: Added create. Made everything private.

        * dom/Node.cpp:
        (WebCore::Node::initialRefCount): Added. Inline helper function for
        the constructor.
        (WebCore::Node::isContainer): Ditto.
        (WebCore::Node::isElement): Ditto.
        (WebCore::Node::isText): Ditto.
        (WebCore::Node::Node): Changed to take a construction type argument.
        Since m_document is now a normal pointer, added a call to selfOnlyRef.
        (WebCore::Node::~Node): Ditto, but selfOnlyDeref.
        (WebCore::Node::setDocument): Added selfOnlyRef/Deref calls.
        (WebCore::Node::appendTextContent): Use the data function instead of
        calling nodeValue functions, which do the same thing in a roundabout way.

        * dom/Node.h: Made the constructor protected and replaced the multiple
        arguments iwth a single ConstructionType argument. Sorted the public
        things first.

        * dom/Notation.h: Made most things private.
        * dom/Notation.cpp: Removed extra constructor.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::create): Added.
        (WebCore::ProcessingInstruction::cloneNode): Call create.
        * dom/ProcessingInstruction.h: Added create function. Made many other
        members private.

        * dom/Range.cpp:
        (WebCore::Range::processContents): Use DocumentFragment::create.

        * dom/Text.cpp:
        (WebCore::Text::Text): Updated for base class change.
        (WebCore::Text::create): Added.
        (WebCore::Text::splitText): Changed to not require access to m_data.
        (WebCore::Text::cloneNode): Call create.
        (WebCore::Text::createRenderer): Call dataImpl.
        (WebCore::Text::attach): Call data.
        (WebCore::Text::recalcStyle): Call dataImpl.
        (WebCore::Text::virtualCreate): Call create.
        (WebCore::Text::createWithLengthLimit): Call create.
        (WebCore::Text::formatForDebugger): Call data.

        * dom/Text.h: Added a create function. Made many other members private.
        Renamed createNew to virtualCreate.

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::enterText): Call Text::create.

        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::cdataBlock): Call CDATASection::create.
        (WebCore::XMLTokenizer::comment): Call Comment::create.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        Call data instead of string.

        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply): Call Text::create.

        * editing/EditorCommand.cpp:
        (WebCore::executeInsertNode): Call DocumentFragment::create.

        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply): Call Text::create.

        * editing/markup.cpp:
        (WebCore::appendStartMarkup): Call data instead of nodeValue.

        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create): Call adoptRef.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createContextualFragment): Call DocumentFragment::create.
        (WebCore::replaceChildrenWithFragment): Call data instead of string.
        (WebCore::replaceChildrenWithText): Call Text::create.
        (WebCore::HTMLElement::setInnerText): Call DocumentFragment::create and
        Text::create.
        (WebCore::HTMLElement::setOuterText): Call Text::create.

        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement): Call Text::create.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::setText): Call Text::create.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::textCreateErrorCheck): Call Text::create.
        (WebCore::HTMLParser::commentCreateErrorCheck): Call Comment::create.
        (WebCore::HTMLParser::handleIsindex): Call Text::create.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addText): Call Text::create.

        * html/HTMLViewSourceDocument.h:
        (WebCore::HTMLViewSourceDocument::create): Call adoptRef.

        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::appendEntry): Call Text::create.
        (WebCore::FTPDirectoryTokenizer::createTDForFilename): Call Text::create.

        * loader/FTPDirectoryDocument.h:
        (WebCore::FTPDirectoryDocument::create): Call adoptRef.
        * loader/ImageDocument.h:
        (WebCore::ImageDocument::create): Ditto.
        * loader/MediaDocument.h:
        (WebCore::MediaDocument::create): Ditto.
        * loader/PlaceholderDocument.h:
        (WebCore::PlaceholderDocument::create): Ditto.
        * loader/PluginDocument.h:
        (WebCore::PluginDocument::create): Ditto.
        * loader/TextDocument.h:
        (WebCore::TextDocument::create): Ditto.

        * loader/loader.cpp:
        (WebCore::Loader::Host::didFinishLoading): Use RefPtr instead of DocPtr.
        (WebCore::Loader::Host::didFail): Ditto.

        * platform/TreeShared.h:
        (WebCore::TreeShared::TreeShared): Added an initialRefCount argument,
        defaulting to 1. Node still sometimes initializes it to 0 instead for now.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::originalText): Use dataImpl instead of string.

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::originalText): Use dataImpl instead of string.
        (WebCore::RenderTextFragment::previousCharacter): Ditto.

        * svg/SVGDocument.h:
        (WebCore::SVGDocument::create): Use adoptRef.

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::SVGElementInstance): Updated to take a
        PassRefPtr.

        * svg/SVGElementInstance.h: Made everything private.

        * wml/WMLDocument.h:
        (WebCore::WMLDocument::create): Called adoptRef.

        * xml/XPathNamespace.cpp:
        (WebCore::XPathNamespace::XPathNamespace): Take AtomicString arguments.
        * xml/XPathNamespace.h: Made everything private.

        * xml/XSLTProcessor.cpp:
        (WebCore::createFragmentFromSource): Use DocumentFragment::create and
        Text::create.

2009-08-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Part of <rdar://problem/6218721> No MSAA focus events fired for Webkit
        nightly (20866)

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

        Reviewed by Oliver Hunt.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        Changed to take a pointer to its owner document. This is used by
        AXObjectCache::handleFocusedUIElementChanged().
        (WebCore::AXObjectCache::focusedUIElementForPage):
        Code moved from AccessibilityRenderObject::focusedUIElement(). Modified
        to be a static function and to take a pointer to a Page.
        (WebCore::AXObjectCache::platformGenerateAXID):
        Moved the code to generate the next AXID from getAXID() to here. Added
        a #if to make this non-WIN only, because Windows has its own
        implementation.
        (WebCore::AXObjectCache::getAXID):
        Ensure that we generate a positive AXID, ranging from 1 to LONG_MAX.

        * accessibility/AXObjectCache.h:
        Add a declaration for Document and Page. Removed the declaration of
        AccessibilityObject, because we include the header. Reordered the
        declaration of Node alphabetically. Moved the typedef for AXID to
        AccessibilityObject. Removed some trailing whitespace. Added a member
        variable to hold a pointer to the owner Document.
        (WebCore::AXObjectCache::AXObjectCache):
        Changed to take a pointer to its owner Document.
        (WebCore::AXObjectCache::focusedUIElementForPage):
        Added; code moved from AccessiblityRenderObject::focusedUIElement().
        Returns the focused element with respect to accessibility.
        (WebCore::AXObjectCache::platformGenerateAXID):
        Declare a function to generate an AXID.
        (WebCore::AXObjectCache::objectFromAXID):
        Return the AccessibilityObject with the given AXID.

        * accessibility/AccessibilityObject.h:
        Moved the typedef for AXID from AXObjectCache to here. Made the m_id
        member use the typedef.
        (WebCore::AccessibilityObject::axObjectID):
        Changed the return type to use the typedef.
        (WebCore::AccessibilityObject::setAXObjectID):
        Changed the argument type to use the typedef.

        * accessibility/AccessibilityRenderObject.cpp:
        Removed some unneeded #includes.
        (WebCore::AccessibilityRenderObject::focusedUIElement):
        Moved the code to AXObjectCache::focusedUIElementForPage(), which we now
        call.

        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::platformGenerateAXID):
        Ensure that we generate an AXID that is in the range 1 to LONG_MAX.
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        If the Document has no Page, return. If the Page has not focused
        element (respecting accessibility), return. Assert that the
        accessibility of the focused element is not ignored, and that the
        object's AXID will be negative and fit into a LONG when negated.
        Broadcast a focus event for the object.

        * dom/Document.cpp:
        (WebCore::Document::axObjectCache):
        Pass this when creating the AXObjectCache.
        (WebCore::Document::setFocusedNode):
        Call AXObjectCache::handleFocusedUIElementChanged() on Windows.

2009-08-14  Jiahua Huang  <jhuangjiahua@gmail.com>

        Reviewed by Jan Alonzo.

        [gtk] Pasteboard/GtkClipboard can't handle the "text/html" target.
        https://bugs.webkit.org/show_bug.cgi?id=27028

        Remove the improper set of enum WebKitWebViewTargetInfo
        by grabbing the target infos via m_helper.

        * manual-tests/gtk/copy-htmltext.html: Added.
        * platform/Pasteboard.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::clipboard_get_contents_cb):
        * platform/gtk/PasteboardHelper.h:

2009-08-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Fix an assertion when bringing up the Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=28318
        
        The fix for bug 28295 assumed that image clients count the number of times
        addClient/removeClient is called. That was true for CachedResource clients,
        but not StyleGeneratedImage clients, which pass the call onto CSSImageGeneratorValue.
        
        Fix by making CSSImageGeneratorValue count the number of times a client is
        added/removed.

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::canvasChanged):
        (WebCore::CSSCanvasValue::canvasResized):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::addClient):
        (WebCore::CSSImageGeneratorValue::removeClient):
        (WebCore::CSSImageGeneratorValue::getImage):
        * css/CSSImageGeneratorValue.h:

2009-08-14  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Kevin Ollivier.

        Correct libcurl crash when downloading local files.
        https://bugs.webkit.org/show_bug.cgi?id=28312

        No new tests. Test is covered by fast/encoding/char-encoding-mac.html.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::handleLocalReceiveResponse): New static function that
          performs the local setting of valid URL and firing didReceiveResponse.
          This code was moved from writeCallback.
        (WebCore::writeCallback): Move local file handling to static function
          (above) and use the function instead.
        (WebCore::readCallback): Add check
          for responseFired, and handle as a local file if it was not.

2009-08-14  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        [Haiku] Fix RenderThemeHaiku build.
        https://bugs.webkit.org/show_bug.cgi?id=28307

        * platform/haiku/RenderThemeHaiku.cpp: Included RenderThemeHaiku.h
        instead of RenderTheme.h.
        (WebCore::RenderThemeHaiku::paintCheckbox): Removed the wrong 'virtual'
        before the function.
        (WebCore::RenderThemeHaiku::paintRadio): Removed the wrong 'virtual'
        before the function.
        * platform/haiku/RenderThemeHaiku.h: Corrected wrong function definitions.

2009-08-14  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        [Haiku] Adding SharedBufferHaiku to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=28309

        * platform/haiku/SharedBufferHaiku.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/haiku/TemporaryLinkStubs.cpp: Removed unnecessary headers
        and functions.
        (WebCore::signedPublicKeyAndChallengeString):
        (WebCore::getSupportedKeySizes):

2009-08-14  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Ensure we're getting the right v8 context in the V8 DOMWindowEvent custom getter.

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

        This should fix Chromium failing LayoutTests/fast/events/set-event-in-another-frame.html.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_GETTER):

2009-08-14  Aaron Boodman  <aa@chromium.org>

        Reviewed by Alexey Proskuryakov.

        BUG 28134: Move the remaining parts of Access Control from XMLHttpRequest to ThreadableDocumentLoader.
        https://bugs.webkit.org/show_bug.cgi?id=28134

        No new tests added since Access Control was already well tested and this is a pure refactor.

        * loader/DocumentThreadableLoader.cpp: Move a lot of the access control code from XHR in, preserving its
        basic strategy. Also, modify the synchronous path to not be a special case, but reuse more of the async
        path.

        (WebCore::DocumentThreadableLoader::loadResourceSynchronously): Go through the async path and pass additional flags.
        (WebCore::DocumentThreadableLoader::create): Group enum params into an options struct.
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Ditto.
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): Brought mostly from XHR.
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequestWithPreflight): Ditto.
        (WebCore::DocumentThreadableLoader::willSendRequest): Handle preflight case.
        (WebCore::DocumentThreadableLoader::didReceiveResponse): Ditto.
        (WebCore::DocumentThreadableLoader::didFinishLoading): Ditto.
        (WebCore::DocumentThreadableLoader::getShouldUseCredentialStorage): Ditto.
        (WebCore::DocumentThreadableLoader::preflightSuccess): Preflight handling.
        (WebCore::DocumentThreadableLoader::preflightFailure): Ditto.
        (WebCore::DocumentThreadableLoader::loadRequest): Common request function that handles async/sync.
        * loader/DocumentThreadableLoader.h: Group enum params into an options struct.
        * loader/ThreadableLoader.cpp: Ditto.
        (WebCore::ThreadableLoader::create): Ditto.
        (WebCore::ThreadableLoader::loadResourceSynchronously): Ditto.
        * loader/ThreadableLoader.h: Ditto.
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions): Ditto.
        * loader/WorkerThreadableLoader.cpp: Ditto.
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):Ditto.
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously): Ditto.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): Ditto.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader): Ditto.
        * loader/WorkerThreadableLoader.h: Ditto.
        (WebCore::WorkerThreadableLoader::create): Ditto.
        * platform/CrossThreadCopier.h: Allow ThreadableLoaderOptions to be copied across threads.
        (WebCore::):
        * workers/WorkerScriptLoader.cpp: More enum->struct grouping.
        (WebCore::WorkerScriptLoader::loadSynchronously): More enum->struct grouping.
        (WebCore::WorkerScriptLoader::loadAsynchronously): More enum->struct grouping.
        * xml/XMLHttpRequest.cpp: Remove all the access control code and some supporting state.
        (WebCore::XMLHttpRequest::XMLHttpRequest): Ditto.
        (WebCore::XMLHttpRequest::createRequest): Ditto.
        (WebCore::XMLHttpRequest::didFinishLoading): Ditto.
        (WebCore::XMLHttpRequest::didReceiveResponse): Ditto.
        (WebCore::XMLHttpRequest::didReceiveData): Ditto.
        * xml/XMLHttpRequest.h: Ditto.

2009-08-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Rename the confusing isObject(<class>) to inherits(<class>).
        It still works on non-objects, returning false.

        * bindings/js/JSEventTarget.cpp:
        (WebCore::toEventTarget):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionCallback):
        (WebCore::createPositionErrorCallback):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::toNodeFilter):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessor::importStylesheet):
        (WebCore::JSXSLTProcessor::transformToFragment):
        (WebCore::JSXSLTProcessor::transformToDocument):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        Updated to new name, inherits, from old name, isObject.

2009-08-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Allow Qt API to list and to remove URL schemes that were registered as
        local URL schemes.
        [Qt] Allow applications to register their own local URL scheme.
        https://bugs.webkit.org/show_bug.cgi?id=28240

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::removeURLSchemeRegisteredAsLocal):
        (WebCore::SecurityOrigin::localURLSchemes):
        * page/SecurityOrigin.h:

2009-08-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Wrap console objects late (in the frontend) so that injected
        script was already in place.

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

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::setFrontendProxyObject):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::InspectorFrontend):
        (WebCore::InspectorFrontend::addMessageToConsole):
        * inspector/InspectorFrontend.h:

2009-08-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix logic in RenderObject::updateFillImages() that led to incorrect client
        counts if an image was used twice in the background-image property.
        https://bugs.webkit.org/show_bug.cgi?id=28295

        Test: fast/backgrounds/multiple-backgrounds-assert.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateFillImages):
        Simplify the logic to call addClient()/removeClient() for every background
        image, but go through the new layers first to avoid removing all the
        clients of an image.

2009-08-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Devirtualise marking
        https://bugs.webkit.org/show_bug.cgi?id=28294

        Make sure we override the JSObject createStructure method on those
        objects that have custom marking routines.

        * bindings/scripts/CodeGeneratorJS.pm:

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Follow-up to earlier work to remove dependencies on JavaScriptCore.

        * ForwardingHeaders/parser/Parser.h: Removed.
        * inspector/JavaScriptDebugServer.cpp: Removed now-unneeded includes
        of Parser.h.

2009-08-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Seidel.

        'box-orient: block-axis' behaves like 'box-orient: horizontal', causes
        an assertion failure in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=28279

        Test: fast/flexbox/block-axis.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator EBoxOrient): Map block-axis to
        vertical.

2009-08-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix crash when removing reflection on an absolutely-positioned image.
        https://bugs.webkit.org/show_bug.cgi?id=28289
        
        Make sure we clean up the reflection layer when removing the reflection,
        so that the RenderLayer tree does not contain pointers to deleted layers.

        Test: fast/reflections/reflected-img-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::styleChanged):
        (WebCore::RenderLayer::removeReflection):
        * rendering/RenderLayer.h:

2009-08-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        misalignment because of float:left of <div> tag
        https://bugs.webkit.org/show_bug.cgi?id=15869

        One section of http://edgar.sec.gov site draws to the right of the rest
        of the content
        <rdar://problem/7135951>

        Tests: fast/block/float/avoidance-percent-width-compat.html
               fast/block/float/avoidance-percent-width-strict.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getClearDelta): Changed to apply the same float
            avoidance logic in strict mode and in compatibility mode, which
            matches Firefox and IE. Changed to compute and use the computed
            width of the child, instead of ignoring non-fixed widths.

2009-08-13  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Geolocation PositionOptions does not use correct default values.
        https://bugs.webkit.org/show_bug.cgi?id=27254

        Sets the correct default values for the properties of the PositionOptions object
        passed to Geolocation methods. See http://www.w3.org/TR/geolocation-API/.

        Also adds checking to throw an exception if arguments of the incorrect type are
        passed to Geolocation methods. Adds a layout test to test this. This test should
        pass on all platforms where Geolocation is implemented.

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

        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionCallback): Added. Creates the callback.
        (WebCore::createPositionErrorCallback): Added. Creates the calback.
        (WebCore::createPositionOptions): Added. Creates the PositionOptions object, setting defaults where required.
        (WebCore::JSGeolocation::getCurrentPosition): Modified. Now uses above helper functions.
        (WebCore::JSGeolocation::watchPosition): Modified. Now uses above helper functions.
        * page/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::GeoNotifier): Modified. Asserts that PositionOptions object is present.
        (WebCore::Geolocation::GeoNotifier::startTimer): Modified. Only starts timer if timeout has been set.
        * page/PositionOptions.h:
        (WebCore::PositionOptions::create): Modified. Creates object with default values.
        (WebCore::PositionOptions::timeout): Modified. Uses correct type.
        (WebCore::PositionOptions::hasTimeout): Added. Determines whether a timeout has been set.
        (WebCore::PositionOptions::setTimeout): Modified. Uses correct type.
        (WebCore::PositionOptions::maximumAge): Modified. Uses correct type.
        (WebCore::PositionOptions::setMaximumAge): Modified. Uses correct type.
        (WebCore::PositionOptions::PositionOptions): Modified. Creates object with default values.

2009-08-13  David Levin  <levin@chromium.org>

        Unreviewed chromium build fix.

        [Chromium] Let CodeGeneratorV8.pm know that RGBColor is ref-counted.

        * bindings/scripts/CodeGeneratorV8.pm:

2009-08-13  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Merge error in SharedWorker code
        https://bugs.webkit.org/show_bug.cgi?id=28277

        Fixed merge error that prevents WebKit from compiling with SHARED_WORKERS enabled.
        No new tests needed.

        * workers/DefaultSharedWorkerRepository.cpp:
        Removed duplicated functions.

2009-08-13  Kyle Prete  <kylep@chromium.org>

        Reviewed by Dave Levin.

        Chromium: Show a "Playback Disabled" button on media error.
        https://bugs.webkit.org/show_bug.cgi?id=28196
        Use a disabled play button when the media file cannot be played.

        No new tests needed. Covered by LayoutTests/media/video-empty-source.html

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintMediaPlayButton):

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Try and fix the Qt build.

        * bridge/qt/qt_runtime.cpp:

2009-08-13  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Drag and drop support
        https://bugs.webkit.org/show_bug.cgi?id=23642

        Utilizes functions that are being called upon drag and drop actions.
        Uses different GTK clipboards that hold different types
        of drag data - images, HTML markup, text, URL, URL label.
        Also clears each clipboard before setting new data to it.

        No new tests - despite some implementations, no new functionality
        is added until implementations of the GTK drag and drop protocol
        in WebKit part.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::ClipboardGtk):
        (WebCore::ClipboardGtk::~ClipboardGtk):
        (WebCore::getCachedImage):
        (WebCore::ClipboardGtk::declareAndWriteDragImage):
        (WebCore::ClipboardGtk::writeURL):
        (WebCore::ClipboardGtk::writeRange):
        * platform/gtk/ClipboardGtk.h: ClipboardGdk -> ClipboardGtk

2009-08-13  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        JavaScriptCore tweaks to get ready for the parser arena
        https://bugs.webkit.org/show_bug.cgi?id=28243

        * ForwardingHeaders/runtime/CollectorHeapIterator.h: Removed.

        * WebCore.xcodeproj/project.pbxproj: Exposed a couple header
        files as Private that are now needed to compile Mac WebKit.

        * bindings/js/JSAudioConstructor.cpp:
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSHTMLInputElementCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSImageConstructor.cpp:
        * bindings/js/JSLazyEventListener.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSMessageChannelConstructor.cpp:
        * bindings/js/JSOptionConstructor.cpp:
        * bindings/js/JSWebSocketConstructor.cpp:
        * bindings/js/JSWebSocketCustom.cpp:
        * bindings/js/JSWorkerConstructor.cpp:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        * bridge/jni/jni_jsobject.mm:
        Updated includes.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::sourceParsed):
        Change to not assert if this is called with no listeners.
        I don't think this was guaranteed before, and we now use
        this code path when recompiling. Slightly less efficient,
        but this is a one-time cost when turning on the debugger.
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):
        Change to call Debugger::recompileAllJSFunctions.

2009-08-13  Brady Eidson  <beidson@apple.com>

        Reviewed by Eric Seidel.

        <rdar://problem/7138591> and https://bugs.webkit.org/show_bug.cgi?id=28260
        onhashchange property cannot be set from javascript.

        Test: fast/loader/onhashchange-attribute-listeners.html

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::onhashchange):
        (WebCore::HTMLBodyElement::setOnhashchange):
        * html/HTMLBodyElement.h:
        * html/HTMLBodyElement.idl:

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::onhashchange):
        (WebCore::HTMLFrameSetElement::setOnhashchange):
        * html/HTMLFrameSetElement.h:
        * html/HTMLFrameSetElement.idl:

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::onhashchange):
        (WebCore::DOMWindow::setOnhashchange):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        Fix leaks of RGBColor instances from below SVGColor::rgbColor.

        * svg/SVGColor.cpp:
        (WebCore::SVGColor::rgbColor): Return a PassRefPtr to ensure that the newly-allocated
        RGBColor is cleaned up by the caller.
        * svg/SVGColor.h:

2009-08-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Migrate to DOMAgent (serialized access to DOM).

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

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::highlightDOMNode):
        (WebCore::JSInspectorBackend::nodeForId):
        (WebCore::JSInspectorBackend::idForNode):
        (WebCore::JSInspectorBackend::wrapObject):
        (WebCore::JSInspectorBackend::unwrapObject):
        (WebCore::JSInspectorBackend::pushNodePathToFrontend):
        (WebCore::JSInspectorBackend::selectDatabase):
        (WebCore::JSInspectorBackend::selectDOMStorage):
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/js/ScriptObjectQuarantine.h:
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::isObject):
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/ScriptObjectQuarantine.h:
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::isObject):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::clearMessages):
        (WebCore::InspectorBackend::loaded):
        (WebCore::InspectorBackend::highlight):
        (WebCore::InspectorBackend::nodeForId):
        (WebCore::InspectorBackend::idForNode):
        (WebCore::InspectorBackend::wrapObject):
        (WebCore::InspectorBackend::unwrapObject):
        (WebCore::InspectorBackend::pushNodePathToFrontend):
        (WebCore::InspectorBackend::addNodesToSearchResult):
        (WebCore::InspectorBackend::selectDatabase):
        (WebCore::InspectorBackend::selectDOMStorage):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::scriptObjectReady):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::wrapObject):
        (WebCore::InspectorController::unwrapObject):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::handleEvent):
        (WebCore::InspectorDOMAgent::pushDocumentToFrontend):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::nodeForId):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::innerParentElement):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::clearConsoleMessages):
        (WebCore::InspectorFrontend::updateFocusedNode):
        (WebCore::InspectorFrontend::setDocument):
        (WebCore::InspectorFrontend::selectDatabase):
        (WebCore::InspectorFrontend::selectDOMStorage):
        (WebCore::InspectorFrontend::addNodesToSearchResult):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.clearMessages):
        (WebInspector.ConsoleView.prototype.completions):
        (WebInspector.ConsoleView.prototype._reportCompletions):
        (WebInspector.ConsoleView.prototype._messagesClicked):
        (WebInspector.ConsoleView.prototype.doEvalInWindow.evalCallback):
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleView.prototype._format):
        (WebInspector.ConsoleView.prototype._formatfunction):
        (WebInspector.ConsoleView.prototype._formatdate):
        (WebInspector.ConsoleView.prototype._formatregexp):
        (WebInspector.ConsoleView.prototype._formatnode):
        (WebInspector.ConsoleView.prototype._formatobject):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype._renumber):
        (WebInspector.DOMDocument):
        (WebInspector.DOMAgent):
        (WebInspector.DOMAgent.prototype.getChildNodesAsync):
        (WebInspector.DOMAgent.prototype.setAttributeAsync):
        (WebInspector.DOMAgent.prototype.removeAttributeAsync):
        (WebInspector.DOMAgent.prototype.setTextNodeValueAsync):
        (WebInspector.DOMAgent.prototype.nodeForId):
        (WebInspector.DOMAgent.prototype._setDocument):
        (WebInspector.DOMAgent.prototype._setChildNodes):
        (WebInspector.DOMAgent.prototype._bindNodes):
        (WebInspector.DOMAgent.prototype._childNodeInserted):
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.parseRule):
        (WebInspector.setDocument):
        (InspectorController.getStyles):
        (InspectorController.getComputedStyle):
        (InspectorController.getInlineStyle):
        (InspectorController.applyStyleText):
        (InspectorController.setStyleText):
        (InspectorController.toggleStyleEnabled):
        (InspectorController.applyStyleRuleText):
        (InspectorController.addStyleSelector):
        (InspectorController.setStyleProperty):
        (InspectorController.getPrototypes):
        (InspectorController.getProperties):
        (InspectorController.setPropertyValue):
        (InspectorController.evaluate):
        (InspectorController.addInspectedNode):
        (InspectorController.performSearch):
        (InspectorController.searchCanceled):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype._updateMatchesCount):
        (WebInspector.ElementsPanel.prototype._updateMatchesCountSoon):
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set focusedDOMNode.restoreHighlightToHoveredNode):
        (WebInspector.ElementsTreeOutline.prototype.set focusedDOMNode):
        (WebInspector.ElementsTreeElement.prototype.updateChildren):
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.applyStyleRuleText):
        (InjectedScript.addStyleSelector):
        (InjectedScript._doesSelectorAffectNode):
        (InjectedScript._serializeRule):
        (InjectedScript._serializeStyle):
        (InjectedScript.getProperties):
        (InjectedScript.evaluate):
        (InjectedScript.addInspectedNode):
        (InjectedScript.performSearch.addNodesToResults):
        (InjectedScript.performSearch.matchExactItems):
        (InjectedScript.performSearch.matchExactId.addNodesToResults.call):
        (InjectedScript.performSearch.matchExactId):
        (InjectedScript.performSearch):
        (InjectedScript.performSearch.matchExactTagNames):
        (InjectedScript.performSearch.matchExactAttributeNames):
        (InjectedScript.performSearch.matchPartialTagNames):
        (InjectedScript.performSearch.matchStartOfTagNames):
        (InjectedScript.performSearch.matchPartialTagNamesAndAttributeValues):
        (InjectedScript.performSearch.matchPartialAttributeValues):
        (InjectedScript.performSearch.matchStyleSelector):
        (InjectedScript.performSearch.matchPlainText):
        (InjectedScript.performSearch.matchXPathQuery):
        (InjectedScript.performSearch.finishedSearching):
        (InjectedScript.performSearch.processChunk):
        (InjectedScript.searchCanceled):
        (InjectedScript._ensureCommandLineAPIInstalled.inspectObject):
        (InjectedScript._ensureCommandLineAPIInstalled):
        (InjectedScript._resolveObject):
        (InjectedScript._nodeForId):
        (InjectedScript._objectForId):
        (InjectedScript._createProxyObject):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/ObjectProxy.js:
        (WebInspector.ObjectProxy):
        (WebInspector.ObjectPropertyProxy):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update.callback):
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCancelled):
        (WebInspector.BlankStylePropertiesSection.prototype.editingCommitted.callback):
        (WebInspector.BlankStylePropertiesSection.prototype.editingCommitted):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.js:
        (WebInspector._updateHoverHighlight):
        (WebInspector.loaded):
        (WebInspector.clearConsoleMessages):
        (WebInspector.selectDatabase):
        (WebInspector.selectDOMStorage):
        (WebInspector.updateFocusedNode):
        (WebInspector.addNodesToSearchResult):
        * inspector/front-end/utilities.js:
        (Object.proxyType):
        * storage/Storage.h:
        (WebCore::Storage::frame):

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Geoff Garen.

        Fix leaks of RGBColor instances from below CSSPrimitiveValue::getRGBColorValue.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getRGBColorValue): Return a PassRefPtr to ensure that the
        newly-allocated RGBColor is cleaned up by the caller.
        * css/CSSPrimitiveValue.h:

2009-08-13  Eric Seidel  <eric@webkit.org>

        Reviewed by David Hyatt.

        wrong font size when css font-family includes monospace
        https://bugs.webkit.org/show_bug.cgi?id=19161

        Firefox only uses fixed-width default size for exactly "font-family: monospace;".
        WebKit has historically used fixed-width default size any time a
        font-family includes monospace in the fallback list.

        This patch corrects WebKit's behavior to match Firefox.
        I also had to fix a bug in WebKit's font-family fallback behavior where
        child elements would inherit parts of their parents fallback lists.

        This patch is mostly just replacing all cases where we used to check for:
        fontDescription.genericFontFamily() == MonospaceFamily
        with:
        fontDescription.useFixedDefaultSize()

        Tests: fast/css/getComputedStyle/computed-style-font-family-monospace.html
               fast/css/getComputedStyle/font-family-fallback-reset.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
           Deploy useFixedDefaultSize().  Also fix the bug where child
           FontDescriptions would carry part of the parent font-family fallback list.
        (WebCore::CSSStyleSelector::checkForGenericFamilyChange):
           It's no longer alright to just check genericFontFamily(),
           we have to check to make sure the changed style has a matching useFixedDefaultSize().
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::useFixedDefaultSize):
           Only use the fixed default size if we have one font family and it is "monospace".
           "-webkit-monospace" is the internal representation of the CSS identifier "monospace".

2009-08-13  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by Dimitri Glazkov.

        [v8] Fix atomic string externalization crash.
        Atomic string externalization assumes that all non-empty strings
        can be externalized which is untrue on 64-bit.  This change fixed
        that.

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

        This bug causes loads of test crashes, no need to add new tests
        specifically for this.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8StringToAtomicWebCoreString):

2009-08-13  George Staikos  <george.staikos@torchmobile.com>

        Rubberstamped by Darin Adler.

        Use ASSERT_UNUSED instead of UNUSED_PARAM

        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::deregisterTask):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::deregisterTask):

2009-08-13  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Fixes a couple of bugs in SecurityOrigin::createFromDatabaseIdentifier.
        https://bugs.webkit.org/show_bug.cgi?id=28262

        No new tests possible.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):

2009-08-13  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        [CAIRO] getImageData fails on a given rect bigger than the image rect

        The destination image and the source image was mixed up on creating the
        imageData.

        This is just a clean up and doesn't affect the current behavior. It's not
        possible to test this failure in a LayoutTest. Only canvas uses getImageData
        at the moment and returns before calling getImageData, if the image rect does
        not contain the requested rect.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):

2009-08-13  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding RenderTheme to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=28258

        * platform/haiku/RenderThemeHaiku.cpp: Added.
        (WebCore::RenderThemeHaiku::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeHaiku::RenderThemeHaiku):
        (WebCore::RenderThemeHaiku::~RenderThemeHaiku):
        (WebCore::supportsFocus):
        (WebCore::RenderThemeHaiku::supportsFocusRing):
        (WebCore::RenderThemeHaiku::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeHaiku::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeHaiku::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeHaiku::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeHaiku::platformTextSearchHighlightColor):
        (WebCore::RenderThemeHaiku::systemFont):
        (WebCore::RenderThemeHaiku::paintCheckbox):
        (WebCore::RenderThemeHaiku::setCheckboxSize):
        (WebCore::RenderThemeHaiku::paintRadio):
        (WebCore::RenderThemeHaiku::setRadioSize):
        (WebCore::RenderThemeHaiku::adjustMenuListStyle):
        (WebCore::RenderThemeHaiku::paintMenuList):
        * platform/haiku/RenderThemeHaiku.h: Added.
        (WebCore::RenderThemeHaiku::supportsHover):

2009-08-13  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Remove the "m_point" code from ContextMenuHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28256

        * platform/haiku/ContextMenuHaiku.cpp:
        (WebCore::ContextMenuReceiver::ContextMenuReceiver):
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::insertItem):

2009-08-13  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Darin Adler.

        Inspector: Show Hidden Cookie Data
        https://bugs.webkit.org/show_bug.cgi?id=28185

          Added new file Cookie.h to the WebCore XCode

        * WebCore.xcodeproj/project.pbxproj:

          InspectorController.cookies() binding

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::cookies):
        * inspector/InspectorBackend.idl:

          Struct for static Cookie information
          (name, value, path, domain, expires, httpOnly, secure, session)

        * platform/Cookie.h: Added.
        (WebCore::Cookie::Cookie):
        
          Getter for the a list of raw Cookies
          getRawCookies(., ., out Vector<Cookie>)
        
        * platform/CookieJar.h:

          Implementation of getRawCookies for the mac platform.

        * platform/mac/CookieJar.mm:
        (WebCore::getRawCookies):

          Stub other CookieJar implementations to satisfy the interface.

        * platform/haiku/CookieJarHaiku.cpp:
        (WebCore::getRawCookies):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::getRawCookies):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::getRawCookies):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::getRawCookies):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::getRawCookies):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::getRawCookies):

2009-08-13  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Add a new gesture in Web Inspector to remove breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=19131
        
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._documentMouseDown):

2009-08-13  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

        Symbian target components (library and executable files)
        require Unique Identifiers (i.e., UID3).
        These identifiers are defined in the respective project
        file, conditionally for "symbian" platform.

        * WebCore.pro:

2009-08-13  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        wrong calculation of overflow size for flexbox and table
        https://bugs.webkit.org/show_bug.cgi?id=28064

        RenderFlexibleBox and RenderTable were using the width of overflow
        to update height of overflow, so height became wrong value and
        width was not updated. As the corresponding code of RenderBlock
        was sane, I factored it out and used from RenderFlexibleBox and
        RenderTable.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateOverflowWithShadowAndReflection): created from code of layoutBlock
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp: use updateOverflowWithShadowAndReflection
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout): use updateOverflowWithShadowAndReflection

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Revert r47185, the fix for <https://bugs.webkit.org/show_bug.cgi?id=28185>, as it broke the
        Windows build in a non-obvious manner.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInspectorBackendCustom.cpp:
        * inspector/InspectorBackend.idl:
        * platform/Cookie.h: Removed.
        * platform/CookieJar.h:
        * platform/haiku/CookieJarHaiku.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        * platform/mac/CookieJar.mm:
        * platform/network/chromium/CookieJarChromium.cpp:
        * platform/network/curl/CookieJarCurl.cpp:
        * platform/network/soup/CookieJarSoup.cpp:
        * platform/network/win/CookieJarCFNetWin.cpp:
        * platform/network/win/CookieJarWin.cpp:
        * platform/qt/CookieJarQt.cpp:

2009-08-13  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Not reviewed: build fix (for r47192), adding new file from
        https://bugs.webkit.org/show_bug.cgi?id=28174

        * inspector/front-end/StatusBarButton.js: Added.

2009-08-13  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Introduced StatusBarButton class that encapsulates glyphs support.
        Views updated accordingly.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.get statusBarItems): Updated to retrieve DOM element from StatusBarButton instance (here and in similar getters below.)
        (WebInspector.CookieItemsView.prototype.hide):
        (WebInspector.CookieItemsView.prototype.update):
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView):
        (WebInspector.DOMStorageItemsView.prototype.get statusBarItems):
        (WebInspector.DOMStorageItemsView.prototype.hide):
        (WebInspector.DOMStorageItemsView.prototype.update):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.get statusBarItems):
        (WebInspector.ElementsPanel.prototype.hide):
        (WebInspector.ElementsPanel.prototype._nodeSearchButtonClicked):
        * inspector/front-end/Panel.js:
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView):
        (WebInspector.ProfileView.prototype.get statusBarItems):
        (WebInspector.ProfileView.prototype._updatePercentButton):
        (WebInspector.ProfileView.prototype._focusClicked):
        (WebInspector.ProfileView.prototype._excludeClicked):
        (WebInspector.ProfileView.prototype._resetClicked):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel.prototype.setRecordingProfile):
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.get statusBarItems):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.get statusBarItems):
        (WebInspector.ScriptsPanel.prototype._updatePauseOnExceptionsButton):
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons):
        * inspector/front-end/StatusBarButton.js: Added.
        (WebInspector.StatusBarButton):
        (WebInspector.StatusBarButton.prototype._clicked):
        (WebInspector.StatusBarButton.prototype.get disabled):
        (WebInspector.StatusBarButton.prototype.set disabled):
        (WebInspector.StatusBarButton.prototype.get title):
        (WebInspector.StatusBarButton.prototype.set title):
        (WebInspector.StatusBarButton.prototype.get toggled):
        (WebInspector.StatusBarButton.prototype.set toggled):
        (WebInspector.StatusBarButton.prototype.get visible):
        (WebInspector.StatusBarButton.prototype.set visible):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css: For uniformity, class names are always used to identify status bar buttons. Also, fixed "Reload" button style to use glyphs.
        * inspector/front-end/inspector.html:

2009-08-12  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add shadow support in GraphicsContext::fillRect().

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillRect): Paint shadow if necessary.
        (WebCore::GraphicsContext::setPlatformShadow): Inverse y offset.

2009-08-13  David Levin  <levin@chromium.org>

        Unreviewed build fix for Chromium Linux.

        Rollback r47157 as this broke debug tests of Chromium Linux.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintCommon):

2009-08-13  David Levin  <levin@chromium.org>

        Unreviewed build fix for chromium.

        The chromium build broke due to r47185 which added
        a cookies array to inspector/InspectorBackend.idl.

        * bindings/v8/custom/V8CustomBinding.h: Added the declaration for the cookies callback.
        * bindings/v8/custom/V8InspectorBackendCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL(InspectorBackendCookies)): Stubbed out an implementation
         for the cookies callback.

2009-08-12  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Show Hidden Cookie Data
        https://bugs.webkit.org/show_bug.cgi?id=28185

          Added new file Cookie.h to the WebCore XCode

        * WebCore.xcodeproj/project.pbxproj:

          InspectorController.cookies() binding

        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::cookies):
        * inspector/InspectorBackend.idl:

          Struct for static Cookie information
          (name, value, path, domain, expires, httpOnly, secure, session)

        * platform/Cookie.h: Added.
        (WebCore::Cookie::Cookie):
        
          Getter for the a list of raw Cookies
          getRawCookies(., ., out Vector<Cookie>)
        
        * platform/CookieJar.h:

          Implementation of getRawCookies for the mac platform.

        * platform/mac/CookieJar.mm:
        (WebCore::getRawCookies):

          Stub other CookieJar implementations to satisfy the interface.

        * platform/haiku/CookieJarHaiku.cpp:
        (WebCore::getRawCookies):
        * platform/network/chromium/CookieJarChromium.cpp:
        (WebCore::getRawCookies):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::getRawCookies):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):
        * platform/network/win/CookieJarCFNetWin.cpp:
        (WebCore::getRawCookies):
        * platform/network/win/CookieJarWin.cpp:
        (WebCore::getRawCookies):
        * platform/qt/CookieJarQt.cpp:
        (WebCore::getRawCookies):

2009-08-08  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Cookies in Storage Panel
        https://bugs.webkit.org/show_bug.cgi?id=27202

          Data Structure for a Cookie. Just Key/Value for Now:

        * inspector/front-end/Cookie.js: Added.
        (WebInspector.Cookie):
        (WebInspector.Cookie.prototype.get key):
        (WebInspector.Cookie.prototype.set key):
        (WebInspector.Cookie.prototype.get value):
        (WebInspector.Cookie.prototype.set value):

          A Storage View for Cookies.  Allows for Refresh/Delete:

        * inspector/front-end/CookieItemsView.js: Added.
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.get statusBarItems): refresh and delete buttons
        (WebInspector.CookieItemsView.prototype.show):
        (WebInspector.CookieItemsView.prototype.hide):
        (WebInspector.CookieItemsView.prototype.update):
        (WebInspector.CookieItemsView.prototype.buildCookies): parses the inspected window's document.cookie string
        (WebInspector.CookieItemsView.prototype.dataGridForCookies): creates a datagrid for cookies
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked): attempt at deleting the cookie (not flawless)
        (WebInspector.CookieItemsView.prototype._refreshButtonClicked): rebuild the datagrid

          Include a SidebarSection Section in the Databases Panel:

        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel):
        (WebInspector.DatabasesPanel.prototype.show): calls populateInterface
        (WebInspector.DatabasesPanel.prototype.populateInterface): adds cookies if they don't exist
        (WebInspector.DatabasesPanel.prototype.reset): remove cookie specific parts
        (WebInspector.DatabasesPanel.prototype.addCookies): add cookies sidebar tree element
        (WebInspector.DatabasesPanel.prototype.showCookies): sets the visible view to a CookiesItemView
        (WebInspector.CookieSidebarTreeElement):
        (WebInspector.CookieSidebarTreeElement.prototype.onselect):
        (WebInspector.CookieSidebarTreeElement.prototype.get mainTitle): just "Cookies" at the moment
        (WebInspector.CookieSidebarTreeElement.prototype.set mainTitle):
        (WebInspector.CookieSidebarTreeElement.prototype.get subtitle): no subtitle yet
        (WebInspector.CookieSidebarTreeElement.prototype.set subtitle):

          New "Cookies" Image for the Sidebar:

        * inspector/front-end/Images/cookie.png: Added.
        * inspector/front-end/inspector.css:

          Include the Added Files where appropriate:

        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2009-08-12  George Wright  <george.wright@torchmobile.com>

        Reviewed by George Staikos.

        Add SQLTransactionCoordinator.[h,cpp] to WebCore.pro.

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

        * WebCore.pro:

2009-08-12  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Adam Treat.

        Mark unused variables to avoid compile failures in -Werror.

        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::deregisterTask):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::deregisterTask):

2009-08-12  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by Niko Zimmermann.

        This is to add WCSS marquee support , which is defined by OMA and is an extension for CSS2, 
        It extends CSS display with "display:-wap-marquee;-wap-marquee-dir:xxx;-wap-marquee-speed:xxx;-wap-marquee-style:xxx"
        Minor fixes by Eric Seidel and George Staikos.
        https://bugs.webkit.org/show_bug.cgi?id=23727

        No new tests, the tests have already been landed at LayoutTests/fast/wcss/

        * WebCore.pro:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * css/WCSSPropertyNames.in: Added.
        * css/WCSSValueKeywords.in: Added.
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::start):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-08-12  George Wright  <george.wright@torchmobile.com>

        Reviewed by David Hyatt.

        Update the canvas renderer's intrinsic size with the zoomed
        lengths and ensure the intrinsic size is correct when setting
        an initial style.

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

        Test: fast/canvas/canvas-zoom.html

        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::canvasSizeChanged):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::styleDidChange):

2009-08-12  Alpha Lam  <hclam@chromium.org>

        Reviewed by Simon Fraser.

        Fix regression for dragging the media controller thumb.
        https://bugs.webkit.org/show_bug.cgi?id=28211

        Modified the conditions for rejecting events on the media controller
        to only rejecting mouse events not from the left button.

        Test: media/controls-drag-timebar.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):

2009-08-12  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Fixing a deadlock caused by two transactions that run on two
        different database handles for the same DB. Adding a per-DB thread
        transaction coordinator that allows the DB thread to run only one
        transaction per DB file at any given time.

        Adding a regression test for this bug.

        Test: storage/multiple-transactions-on-different-handles.html

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/Database.cpp:
        (WebCore::Database::transactionCoordinator):
        * storage/Database.h:
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::transactionCoordinator):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::debugStepName):
        (WebCore::SQLTransaction::performNextStep):
        (WebCore::SQLTransaction::aquireLock):
        (WebCore::SQLTransaction::lockAquired):
        (WebCore::SQLTransaction::cleanupAfterSuccessCallback):
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback):
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCoordinator.cpp: Added.
        * storage/SQLTransactionCoordinator.h: Added.

2009-08-12  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Custom properties on DOM objects are lost after GC (as demonstrated by the gc-9.html test)
        https://bugs.webkit.org/show_bug.cgi?id=28194

        * GNUmakefile.am: Added the two new source files.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.

        * bindings/js/JSCSSRuleListCustom.cpp: Added.
        (WebCore::JSCSSRuleList::markChildren): Call markDOMObjectWrapper
        on rules in the list.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::markChildren): Added. Call
        markDOMObjectWrapper on the CSSValue objects that are owned by the
        declaration as values of the properties.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::isObservableThroughDOM): Added code to handle some
        cases where nodes are observable because they own objects that
        in turn have custom properties.

        * bindings/js/JSDOMBinding.h: Fix a typo in the header.

        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren): Added call to markDOMObjectWrapper
        for implementation and styleSheets.

        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::markChildren): Added. Calls markDOMObjectWrapper
        for attributes and style.

        * bindings/js/JSHTMLCanvasElementCustom.cpp: Added.
        (WebCore::JSHTMLCanvasElement::markChildren): Call markDOMObjectWrapper
        on the rendering context.

        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::markChildren): Call markDOMObjectWrapper on
        items in the stylesheet.

        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::markChildren): Added. Calls
        markDOMObjectWrapper on stylesheets in the list.

        * css/CSSRuleList.idl: Added CustomMarkFunction.
        * css/CSSStyleDeclaration.idl: Ditto.
        * css/StyleSheetList.idl: Ditto.
        * dom/Element.idl: Ditto.
        * html/HTMLCanvasElement.idl: Ditto.

        * dom/Element.h: Made everything private that could be.
        Added access to the attributeMap that does returns
        the existing map without doing any of the lazy-updating work. This
        is needed to get at the existing attributes during garbage collection
        without having side effects.

        * html/HTMLCanvasElement.h: Cleaned up the header a bit, making
        members private. Added renderingContext2D function for use in
        JSHTMLCanvasElement::markChildren.

2009-08-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Eric Seidel.

        Fixes two bugs about Pan Scrolling - Scrolling with middle mouse button doesn't 
        work in Expanded view on reader.google.com, and Can enter auto scroll from a non-scrollable area.
        https://bugs.webkit.org/show_bug.cgi?id=28023
        https://bugs.webkit.org/show_bug.cgi?id=24794
        
        Added a new method to RenderBox seeing if the Box can be scrolled and actually has something to
        scroll, and use that for pan scrolling.

        Test: platform/win/fast/events/panScroll-nested-divs.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::updateAutoscrollRenderer):
        (WebCore::EventHandler::handleMousePressEvent):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::canBeScrolledAndHasScrollableArea):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollByRecursively):

2009-08-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <rdar://6728361> Mouse wheel scrolling on a page with expanded drop down 
        list detaches drop down.

        Added a function for Windows PopupMenu's to return their class name.

         * platform/PopupMenu.h:
         * platform/win/PopupMenuWin.cpp:
         (WebCore::PopupMenu::popupClassName):

2009-08-12  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Dan Bernstein.

        WINCE PORT: Color and Gradient
        https://bugs.webkit.org/show_bug.cgi?id=27511

        * platform/graphics/wince/ColorWince.cpp: Added.
        * platform/graphics/wince/GradientWince.cpp: Added.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        fix a typo in platform/graphics/skia/PlatformContextSkia.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28172

        No new tests because it's a just typo fix.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintCommon):

2009-08-12  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27458
        Support for the :default CSS pseudoclass, as per HTML5 spec.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#selector-default

        Tests: fast/css/pseudo-default-001.html
               fast/css/pseudo-default-002.html
               fast/css/pseudo-default-003.html
               fast/css/pseudo-default-004.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): pseudoDefault
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): sharing stuff is
        aware that only one default button can be present in a form
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): applies
        the :default CSS pseudoclass
        * dom/Element.h:
        (WebCore::Element::isDefaultButtonForForm): new method to determine
        whether a FormControl is a default button for a given form
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isDefaultButtonForForm): ditto
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::defaultButton): extracts the default button
        from the form
        * html/HTMLFormElement.h:

2009-08-12  David Levin  <levin@chromium.org>

        No review, rolling out r47106.
        https://bugs.webkit.org/show_bug.cgi?id=28215

        This patch relied on a new version of v8 which is not available
        in chromium yet.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8StringToAtomicWebCoreString):

2009-08-12  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        Bug 26993 : Geolocation::requestPermission()
        https://bugs.webkit.org/show_bug.cgi?id=26993

        Second patch to allow the Geolocation permission request to chrome to be asynchronous
        or synchronous. Fixes a bug where callbacks were called twice when permissions
        are granted synchronously.

        No new tests required.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::setIsAllowed): Modified. Calls makeSuccessCallbacks() rather than geolocationServicePositionChanged().
        (WebCore::Geolocation::geolocationServicePositionChanged): Modified. Updated logic to avoid repeated callbacks when permissions are granted synchronously.
        (WebCore::Geolocation::makeSuccessCallbacks): Added. Calls success callbacks.
        * page/Geolocation.h: Modified. Adds makeSuccessCallbacks().

2009-08-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6952336>
        CrashTracer: [USER] 3 crashes in Safari at com.apple.WebCore • WebCore::SecurityOrigin::canAccess const 27

        Make sure to set the security origin before calling dispatchWindowObjectAvailable.
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):

2009-08-12  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Eric Seidel.

        Fix [Chromium] drop down menu letter selection, skip selections
        https://bugs.webkit.org/show_bug.cgi?id=28205

        Not auto-testable since it is chromim platform specific code, and it involves sending a keyboard 
        event to the popup, which is not possible (eventSender sends the key
        events through webview, we want to go through the webwidget).

        * manual-tests/keyboard_select_elements_with_same_beginning.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::isCharacterTypeEvent): style change.
        (WebCore::PopupListBox::handleKeyEvent): typeAheadFind should be called only when the event is
        a character type event to avoid calling twice for English.
        (WebCore::PopupListBox::typeAheadFind): remove unnecessary checking of isCharacterTypeEvent() since the whole function is only called under that condition.

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding GraphicsContext to WebCore/platform/graphics/haiku.
        https://bugs.webkit.org/show_bug.cgi?id=28130

        * platform/graphics/haiku/GraphicsContextHaiku.cpp: Added.
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::platformContext):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipToImageBuffer):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::origin):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::setPlatformShouldAntialias):
        (WebCore::GraphicsContext::setImageInterpolationQuality):
        (WebCore::GraphicsContext::setURLForRect):
        (WebCore::GraphicsContext::setPlatformFont):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::getHaikuStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::clearPlatformShadow):
        (WebCore::GraphicsContext::setPlatformShadow):

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Modifying WebCore/platform/graphics files to allow Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=28128

        * platform/graphics/BitmapImage.h: Adding getBBitmap() function.
        * platform/graphics/Color.h: rgb_color is the Color struct in Haiku.
        * platform/graphics/FloatPoint.h: BPoint is the Point class in Haiku.
        * platform/graphics/FloatRect.h: BRect is the Rect class in Haiku.
        * platform/graphics/GraphicsContext.cpp: 
        * platform/graphics/GraphicsContext.h: BView is the PlatformGraphicsContext
        class for Haiku. Adding getHaikuStrokeStyle() function.
        * platform/graphics/Icon.h: Adding an empty Icon() constructor because
        this class isn't implemented for the moment.
        * platform/graphics/ImageSource.h: BBitmap is the native bitmap class 
        for Haiku.
        * platform/graphics/IntPoint.h: BPoint is the Point class in Haiku.
        * platform/graphics/IntRect.h: BRect is the Rect class in Haiku.
        * platform/graphics/IntSize.h: BSize is the Size class in Haiku.
        * platform/graphics/Path.h: BRegion is the Path class in Haiku.
        * platform/graphics/Pattern.h: Adding the GraphicsDef.h header and the 
        native pattern type.
        * platform/graphics/SimpleFontData.h: Adding Haiku's Font.h header.

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding modification to the WebCore/platform/ files to allow
        the Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=28128

        * platform/ContextMenuItem.h: BMenu is the PlatformMenuItemDescription
        class of Haiku.
        * platform/Cursor.h: BCursor is the Cursor class of Haiku.
        * platform/DragData.h: Use a BMessage as DragDataRef.
        * platform/DragImage.h: Use a BBitmap as DragImageRef.
        * platform/PlatformKeyboardEvent.h: Use BMessage as event vehicle.
        * platform/PlatformMenuDescription.h: BMenu is the 
        PlatformMenuDescription class of Haiku.
        * platform/PlatformMouseEvent.h: Use BMessage as event vehicle.
        * platform/PlatformWheelEvent.h: Use BMessage as event vehicle.
        * platform/PopupMenu.h: Adding a m_menu attribute for Haiku.
        * platform/Widget.h: BView is the PlatformWidget class of Haiku.

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Tiny modifications on WebCore files to allow Haiku port.
        https://bugs.webkit.org/show_bug.cgi?id=28128

        * bindings/js/ScriptControllerHaiku.cpp: Style cleanup.
        * loader/CachedFont.cpp: Haiku behaves like Qt, Gtk, or Chromium,
        so many PLATFORM(HAIKU) were added to these functions.
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::platformDataFromCustomData):
        (WebCore::CachedFont::allClientsRemoved):
        * page/EventHandler.cpp: Like the mac and Qt port, Haiku doesn't need the
        invertSenseOfTabsToLinks() function.
        * page/haiku/DragControllerHaiku.cpp: Style cleanup.
        * platform/image-decoders/ImageDecoder.h: For image decoding Haiku
        behaves like Cairo or Wx, (not like Skia).
        (WebCore::RGBA32Buffer::getAddr):
        * platform/text/PlatformString.h: Adding the String(BString&) and BString()
        methods specific to Haiku.
        * platform/text/UnicodeRange.h: Haiku needs to include stdint.h.
        * platform/text/haiku/TextBreakIteratorInternalICUHaiku.cpp:
        (WebCore::currentSearchLocaleID): Missing function.

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding the ScrollbarTheme files.
        https://bugs.webkit.org/show_bug.cgi?id=28125

        * platform/haiku/ScrollbarThemeHaiku.cpp: Added.
        (buttonWidth):
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::ScrollbarThemeHaiku::ScrollbarThemeHaiku):
        (WebCore::ScrollbarThemeHaiku::~ScrollbarThemeHaiku):
        (WebCore::ScrollbarThemeHaiku::scrollbarThickness):
        (WebCore::ScrollbarThemeHaiku::hasButtons):
        (WebCore::ScrollbarThemeHaiku::hasThumb):
        (WebCore::ScrollbarThemeHaiku::backButtonRect):
        (WebCore::ScrollbarThemeHaiku::forwardButtonRect):
        (WebCore::ScrollbarThemeHaiku::trackRect):
        (WebCore::ScrollbarThemeHaiku::paintScrollbarBackground):
        (WebCore::ScrollbarThemeHaiku::paintButton):
        (WebCore::ScrollbarThemeHaiku::paintThumb):
        * platform/haiku/ScrollbarThemeHaiku.h: Added.

2009-08-12  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Adding eight simple files to WebCore/platform/graphics/haiku.
        https://bugs.webkit.org/show_bug.cgi?id=28122

        * platform/graphics/haiku/ColorHaiku.cpp: Added.
        (WebCore::Color::Color):
        (WebCore::Color::operator rgb_color):
        (WebCore::focusRingColor):
        * platform/graphics/haiku/FloatPointHaiku.cpp: Added.
        (WebCore::FloatPoint::FloatPoint):
        (WebCore::FloatPoint::operator BPoint):
        * platform/graphics/haiku/FloatRectHaiku.cpp: Added.
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::operator BRect):
        * platform/graphics/haiku/GradientHaiku.cpp: Added.
        (WebCore::Gradient::platformDestroy):
        (WebCore::Gradient::platformGradient):
        (WebCore::Gradient::fill):
        * platform/graphics/haiku/IntPointHaiku.cpp: Added.
        (WebCore::IntPoint::IntPoint):
        (WebCore::IntPoint::operator BPoint):
        * platform/graphics/haiku/IntRectHaiku.cpp: Added.
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator BRect):
        * platform/graphics/haiku/IntSizeHaiku.cpp: Added.
        (WebCore::IntSize::IntSize):
        (WebCore::IntSize::operator BSize):
        * platform/graphics/haiku/PathHaiku.cpp: Added.
        (WebCore::Path::Path):
        (WebCore::Path::~Path):
        (WebCore::Path::operator=):
        (WebCore::Path::hasCurrentPoint):
        (WebCore::Path::contains):
        (WebCore::Path::translate):
        (WebCore::Path::boundingRect):
        (WebCore::Path::moveTo):
        (WebCore::Path::addLineTo):
        (WebCore::Path::addQuadCurveTo):
        (WebCore::Path::addBezierCurveTo):
        (WebCore::Path::addArcTo):
        (WebCore::Path::closeSubpath):
        (WebCore::Path::addArc):
        (WebCore::Path::addRect):
        (WebCore::Path::addEllipse):
        (WebCore::Path::clear):
        (WebCore::Path::isEmpty):
        (WebCore::Path::debugString):
        (WebCore::Path::apply):
        (WebCore::Path::transform):
        (WebCore::Path::strokeBoundingRect):

2009-08-12  Lyon Chen  <lyon.chen@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: Implement Keygen for WINCE
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/KeygenWince.cpp: Added.

2009-08-12  Brent Fulgham  <bfulgham@webkit.org>

        Rubber-stamped by Kevin Ollivier.

        Handle crash in wx due to null value passed to strlen in
        the CString constructor.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::certificatePath):  Check for null return from getenv
        and use default CString constructor instead.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        WINCE PORT: simple stubs to make it build for WINCE
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/DragDataWince.cpp: Added.
        * platform/wince/DragImageWince.cpp: Added.
        * platform/wince/EditorWince.cpp: Added.
        * platform/wince/KURLWince.cpp: Added.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCEPORT: FileSystem and FileChooser
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/FileChooserWince.cpp: Added.
        * platform/wince/FileSystemWince.cpp: Added.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        WINCE PORT: implement Cursor for WINCE. There's no real cursor on most
        WinMob devices. We pass the cursor info to application, which so that 
        can determine what to do.
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/CursorWince.cpp: Added.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: MIMETypeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/MIMETypeRegistryWince.cpp: Added.

2009-08-12  Joe Mason  <joe.mason@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: Pasteboard and SearchPopupMenu
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/PasteboardWince.cpp: Added.
        * platform/wince/SearchPopupMenuWince.cpp: Added.

2009-08-12  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: Add SharedTimerWince.cpp and SystemTimeWince.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27543

        * platform/wince/SharedTimerWince.cpp: Added.
        * platform/wince/SystemTimeWince.cpp: Added.

2009-08-12  Mark Mentovai  <mark@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28204
        Allow C+exceptions to be disabled in WebCore's V8 Mac build.

        * WebCorePrefix.h:
        Only undefine |try| and |catch| when building Objective-C[++],
        leaving the C+library definitions intact for C++.

2009-08-12  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Add a Custom Setter for DOMWindowEvent in the V8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=27719

        Tests: fast/events/set-event-in-another-frame.html
               fast/events/set-event-to-null.html

        * bindings/scripts/CodeGeneratorV8.pm: Clean up custom getter/setter code, 
            as it currently doesn't support a custom getter 
            and a v8-specific custom setter simultaneously.
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * page/DOMWindow.idl:

2009-08-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=27965
        Merge wx/ImageSourceWx.cpp into ImageSource.cpp.  No changes to
        ImageSource.cpp were needed, so this just deletes ImageSourceWx.cpp.

        * WebCore.gypi:
        * WebCoreSources.bkl:
        * platform/graphics/wx/ImageSourceWx.cpp: Removed.
        * webcore-wx.bkl:

2009-08-12  Peter Kasting  <pkasting@google.com>

        Reviewed by Dave Levin.

        https://bugs.webkit.org/show_bug.cgi?id=27933
        Build fix after r47099.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):

2009-08-08  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Treat.

        WINCE PORT: Implement Path for WINCE. Most code can be
        reused for other ports that don't have native path support
        https://bugs.webkit.org/show_bug.cgi?id=28188

        Written also by George Staikos (including quadCurve() and bezier())

        * platform/graphics/wince/PathWince.cpp: Added.
        * platform/graphics/wince/PlatformPathWince.cpp: Added.
        * platform/graphics/wince/PlatformPathWince.h: Added.
        * platform/graphics/wince/WinceGraphicsExtras.h: Added.

2009-08-12  Joseph Pecoraro  <joepeck02@gmail.com>

        "Double-click to add" new style button does not always show up [quick fix]
        https://bugs.webkit.org/show_bug.cgi?id=28187

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

2009-08-12  Crystal Zhang <crystal.zhang@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: MediaPlayerProxy and MediaPlayerPrivate
        https://bugs.webkit.org/show_bug.cgi?id=28178

        * platform/graphics/wince/MediaPlayerPrivateWince.h: Added.
        * platform/graphics/wince/MediaPlayerProxy.cpp: Added.
        * platform/graphics/wince/MediaPlayerProxy.h: Added.

2009-08-12  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        HTML 5 database and LocalStorage is not persistent on the Symbian port of QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=28175

        Call QDir::toNativeSeparators() before the path is passed to the OS.

        Based on work by David Leong.
        
        * platform/qt/FileSystemQt.cpp:
        (WebCore::pathByAppendingComponent):

2009-08-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Ariya Hidayat.

        Minor build-fix for SVG Filter. Use getUnmultipliedImageData instead
        of getImageData. This changed since r47099.

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):

2009-08-12  Viet-Trung Luu  <viettrungluu@gmail.com>

        Reviewed by Dimitri Glazkov.

        Explicitly set control tints for Chromium/Mac, since the controls'
        NSCell(s) lack an NSView and hence their tint isn't updated
        automatically when the application is activated/deactivated.
        https://bugs.webkit.org/show_bug.cgi?id=28108
        http://crbug.com/18199

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::updateNSCellControlTint):
        (WebCore::RenderThemeChromiumMac::paintCheckbox):
        (WebCore::RenderThemeChromiumMac::paintRadio):
        (WebCore::RenderThemeChromiumMac::paintButton):
        (WebCore::RenderThemeChromiumMac::paintMenuList):
        (WebCore::RenderThemeChromiumMac::paintSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintSearchField):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumMac::paintSearchFieldResultsButton):

2009-08-12  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by Dimitri Glazkov.

        [V8] Fix atomic string externalization crash.
        Atomic string externalization assumes that all non-empty strings
        can be externalized which is untrue on 64-bit.  This change fixed
        that.

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

        This bug causes loads of test crashes, no need to add new tests
        specifically for this.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8StringToAtomicWebCoreString):

2009-08-12  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] Fix box-shadow painting in r47103. The edge should not be blurry.
        Also optimize by not having to save and restore painter state.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::fillRect):

2009-08-12  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Adam Treat.

        [Qt] Fix coding style in GraphicsContextQt.cpp

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQtCompositionMode):
        (WebCore::toQtLineCap):
        (WebCore::toQtLineJoin):
        (WebCore::GraphicsContextPlatformPrivate::p):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::pen):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::endTransparencyLayer):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::setLineCap):
        (WebCore::GraphicsContext::setLineJoin):
        (WebCore::GraphicsContext::setMiterLimit):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::setPlatformStrokeColor):
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        (WebCore::GraphicsContext::setPlatformStrokeThickness):

2009-08-12  Szabo Carol  <carol.szabo@nokia.com>

        Reviewed by Simon Hausmann and Ariya Hidayat.

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

        [Qt] Partial support for -webkit-box-shadow. Blur is not support and
        the shadow still does not go well with border radius.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::fillRect):

2009-08-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Use AM_V_GEN in a few more places, for less noisy builds.

        * GNUmakefile.am:

2009-08-12  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        SVG Filter premultiplied color support for getImageDate/putImageData
        [https://bugs.webkit.org/show_bug.cgi?id=27933]

        Some SVG Filters need premultiplied ImageData for the calculation. Therefore getImageData
        and putImageData of ImageBuffer need support for premultiplied colors.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData):
        (WebCore::CanvasRenderingContext2D::putImageData):
        * platform/graphics/ImageBuffer.h:
        (WebCore::):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::putImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        (WebCore::ImageBuffer::putUnmultipliedImageData):
        (WebCore::ImageBuffer::putPremultipliedImageData):
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::applyMask):

2009-08-12  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Changed Number.bytesToString to support low-resolution output.

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

        * inspector/front-end/utilities.js:
        (Number.bytesToString):

2009-08-12  Prasanth Ullattil  <prasanth.ullattil@nokia.com>

        Reviewed by Simon Hausmann.

        Add support for hooking BeginPaint/EndPaint on 64Bit Windows

        Webkit uses the runtime patching trick explained by "Feng Yuan" for
        hooking these paint functions. It currently supports only 32bit assembly
        code. This patch adds support for 64Bit version. Since inline-assemblies
        are not supported for 64Bit, we have use a seperate .asm file.

        * WebCore.pro:
        * plugins/win/PaintHooks.asm: Added.
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::hookedBeginPaint):
        (WebCore::PluginView::hookedEndPaint):
        (WebCore::hook):

2009-08-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make it harder to misuse try* allocation routines
        https://bugs.webkit.org/show_bug.cgi?id=27469

        Add forwarding header for PossiblyNull type, and add missing null check
        to ImageBuffer creation.

        * ForwardingHeaders/wtf/PossiblyNull.h: Added.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2009-08-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Restrict use of FuncDeclNode & FuncExprNode to the parser.
        https://bugs.webkit.org/show_bug.cgi?id=28209

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):
            Function signature change.

2009-08-11  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=27965
        Merge skia/ImageSourceSkia.cpp into ImageSource.cpp.

        * WebCore.gypi: Remove deleted file, plus a file that was deleted a while back.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData): Use slightly shorter syntax.
        (WebCore::ImageSource::filenameExtension): Use shorter syntax.
        (WebCore::ImageSource::createFrameAtIndex): Remove redundant call, clarify comments, reject all empty images.
        (WebCore::ImageSource::frameHasAlphaAtIndex): Clarify comments, use shorter syntax.
        * platform/graphics/skia/ImageSourceSkia.cpp: Removed.

2009-08-11  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        SharedWorkers do not exit when the last parent document exits
        https://bugs.webkit.org/show_bug.cgi?id=28170

        Prevents Documents from being suspended/placed in the page cache if they are associated with shared workers.

        Added vector cache instead of nested hash tables for SharedWorker repository.

        Added SharedWorkerRepository::documentDetached API.

        * dom/Document.cpp:
        (WebCore::Document::detach):
        Notifies SharedWorkerRepository when the document is closing.
        * loader/FrameLoader.cpp:
        Updated FrameLoader to not cache the Document if it is associated with a SharedWorker (since we can't suspend workers yet, we need to shut them down).
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::create):
        (WebCore::SharedWorkerProxy::isClosing):
        Renamed from closing().
        (WebCore::SharedWorkerProxy::matches):
        Added manual equality function to replace old hash lookup.
        (WebCore::SharedWorkerProxy::isDocumentInWorkerDocuments):
        Checks to see if a document is in the worker's list of documents. Used to determine if page is suspendable.
        (WebCore::SharedWorkerProxy::SharedWorkerProxy):
        (WebCore::SharedWorkerProxy::addToWorkerDocuments):
        Added tracking of the worker's list of documents for lifecycle purposes.
        (WebCore::SharedWorkerProxy::documentDetached):
        Shuts down the proxy when the last associated document is detached.
        (WebCore::SharedWorkerProxy::close):
        Marks the proxy as closed so it is no longer shared with new instances.
        (WebCore::SharedWorkerProxy::workerContextDestroyed):
        Removes the proxy from the repository/frees the proxy when the associated SharedWorkerContext is destroyed.
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        closing()->isClosing()
        (WebCore::SharedWorkerRepository::documentDetached):
        (WebCore::SharedWorkerRepository::hasSharedWorkers):
        Used by FrameLoader to determine if a page has shared workers and so cannot be suspended/cached.
        (WebCore::DefaultSharedWorkerRepository::hasSharedWorkers):
        (WebCore::DefaultSharedWorkerRepository::removeProxy):
        Invoked by workerContextDestroyed() to remove a SharedWorkerProxy from the repository.
        (WebCore::DefaultSharedWorkerRepository::documentDetached):
        (WebCore::DefaultSharedWorkerRepository::connectToWorker):
        (WebCore::DefaultSharedWorkerRepository::getProxy):
        * workers/DefaultSharedWorkerRepository.h:
        * workers/SharedWorkerRepository.h:

2009-08-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 28200 - ListMarker should be included as part of the text value to parse
        https://bugs.webkit.org/show_bug.cgi?id=28200

        When returning text through the marker range attributes, the list marker text should
        also be included. It isn't included by default because a TextIterator is used which
        only looks at Nodes for text. A list marker does not have a corresponding node,
        so its text is not returned through accessibility. That is, until now.

        Test: platform/mac/accessibility/string-range-contains-listmarker.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::listMarkerTextForRange):
        (WebCore::AccessibilityObject::stringForVisiblePositionRange):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        * rendering/RenderListItem.h:

        Make markerText() public so that accessibility code can access it.

2009-08-11  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=27965
        Move cairo/ImageSourceCairo.cpp to ImageSource.cpp in preparation for
        merging most of the other ImageSource*.cpp files with it.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/ImageSource.cpp: Copied from WebCore/platform/graphics/cairo/ImageSourceCairo.cpp.
        * platform/graphics/cairo/ImageSourceCairo.cpp: Removed.

2009-08-10  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Cairo-based Windows port does not handle the https protocol.
        https://bugs.webkit.org/show_bug.cgi?id=28171.

        No new tests needed.  Existing https tests show this failure
        for WinCairo builds.

        * WebCore.vcproj/WebCoreCURL.vsprops: Add a few preprocessor
          definitions for SSL support in cURL.
        * platform/network/curl/ResourceHandleManager.h: Add new
          certificate path member variable.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::certificateBundlePath): New method to retrieve the
          proper certificate resource bundle path.
        (WebCore::ResourceHandleManager::initializeHandle): Check for
          the resource bundle and use if available to activate SSL
          support.

2009-08-11  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        [Haiku] Use Clipboard::create() instead of the constructor of Clipboard.
        https://bugs.webkit.org/show_bug.cgi?id=28127

        * editing/haiku/EditorHaiku.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * page/haiku/EventHandlerHaiku.cpp:
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/haiku/ClipboardHaiku.cpp: Style cleanup. There were many whitespace end of lines.
        (WebCore::ClipboardHaiku::ClipboardHaiku):
        (WebCore::ClipboardHaiku::clearAllData):
        (WebCore::ClipboardHaiku::getData):
        (WebCore::ClipboardHaiku::setData):
        (WebCore::ClipboardHaiku::types):
        (WebCore::ClipboardHaiku::dragLocation):
        (WebCore::ClipboardHaiku::dragImage):
        (WebCore::ClipboardHaiku::setDragImage):
        (WebCore::ClipboardHaiku::dragImageElement):
        (WebCore::ClipboardHaiku::createDragImage):
        (WebCore::ClipboardHaiku::declareAndWriteDragImage):
        (WebCore::ClipboardHaiku::writeURL):
        (WebCore::ClipboardHaiku::writeRange):
        (WebCore::ClipboardHaiku::hasData):
        * platform/haiku/DragDataHaiku.cpp:
        (WebCore::DragData::createClipboard):

2009-08-11  Drew Wilson  <atwilson@google.com>

        Reviewed by NOBODY (build break).

        Speculative GTK build fix

        * GNUmakefile.am:
        Added missing .idl file, and added notifications directory to IDL_PATH.

2009-08-11  Drew Wilson  <atwilson@google.com>

        Reviewed by NOBODY (build break).

        Speculative Windows build fix

        * WebCore.vcproj/WebCore.vcproj:
        Added missing build steps for non-debug targets.

2009-08-11  Drew Wilson <atwilson@google.com>

        Reviewed by NOBODY (build break)

        Speculative build fix for Qt build.

        * WebCore.pro: Added /notifications to include path

2009-08-11  John Gregg  <johnnyg@google.com>

        Reviewed by Maciej Stachowiak.

        Desktop Notifications API
        https://bugs.webkit.org/show_bug.cgi?id=25463

        Adds an implementation of desktop notifications, behind the compile-time
        flag ENABLE(NOTIFICATIONS).  This code simply relays calls on the JavaScript
        API through a NotificationProvider interface, which must provide the services
        to actually notify the user and manage the desktop.  This provider is injected
        into WebKit through the ChromeClient for normal page contexts and through the
        WorkerThread for worker contexts.

        A permissions API is defined on a per-origin basis, which allows a web page
        to check if its origin is allowed to show desktop notifications, and to request
        permission for its origin.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDesktopNotificationsCustom.cpp: Added.
        (WebCore::JSNotificationCenter::requestPermission):
        (WebCore::JSNotification::addEventListener):
        (WebCore::JSNotification::removeEventListener):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toNotification):
        * dom/EventTarget.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::notificationPresenter):
        * notifications: Added.
        * notifications/Notification.cpp: Added.
        (WebCore::Notification::Notification):
        (WebCore::Notification::~Notification):
        (WebCore::Notification::show):
        (WebCore::Notification::cancel):
        (WebCore::Notification::ondisplay):
        (WebCore::Notification::setOndisplay):
        (WebCore::Notification::onerror):
        (WebCore::Notification::setOnerror):
        (WebCore::Notification::onclose):
        (WebCore::Notification::setOnclose):
        (WebCore::Notification::getAttributeEventListener):
        (WebCore::Notification::setAttributeEventListener):
        (WebCore::Notification::clearAttributeEventListener):
        (WebCore::Notification::dispatchDisplayEvent):
        (WebCore::Notification::dispatchErrorEvent):
        (WebCore::Notification::dispatchCloseEvent):
        (WebCore::Notification::addEventListener):
        (WebCore::Notification::removeEventListener):
        (WebCore::Notification::handleEvent):
        (WebCore::Notification::dispatchEvent):
        * notifications/Notification.h: Added.
        (WebCore::Notification::create):
        (WebCore::Notification::isHTML):
        (WebCore::Notification::url):
        (WebCore::Notification::contents):
        (WebCore::Notification::scriptExecutionContext):
        (WebCore::Notification::toNotification):
        (WebCore::Notification::refEventTarget):
        (WebCore::Notification::derefEventTarget):
        * notifications/Notification.idl: Added.
        * notifications/NotificationCenter.cpp: Added.
        (WebCore::NotificationCenter::NotificationCenter):
        (WebCore::NotificationCenter::checkPermission):
        (WebCore::NotificationCenter::requestPermission):
        * notifications/NotificationCenter.h: Added.
        (WebCore::NotificationCenter::create):
        (WebCore::NotificationCenter::createHTMLNotification):
        (WebCore::NotificationCenter::createNotification):
        (WebCore::NotificationCenter::context):
        (WebCore::NotificationCenter::presenter):
        * notifications/NotificationCenter.idl: Added.
        * notifications/NotificationContents.h: Added.
        (WebCore::NotificationContents::NotificationContents):
        (WebCore::NotificationContents::icon):
        (WebCore::NotificationContents::title):
        (WebCore::NotificationContents::body):
        * notifications/NotificationPresenter.h: Added.
        (WebCore::NotificationPresenter::):
        (WebCore::NotificationPresenter::~NotificationPresenter):
        * page/Chrome.cpp:
        (WebCore::Chrome::notificationPresenter):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::webkitNotifications):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Page.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        (WebCore::WorkerContext::webkitNotifications):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::getNotificationPresenter):
        (WebCore::WorkerThread::setNotificationPresenter):

2009-08-11  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Console Drawer is Toggling instead of Staying Open
        https://bugs.webkit.org/show_bug.cgi?id=28115

        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer.prototype.showView): ensures the drawer will be open and showing the provided view
        * inspector/front-end/inspector.js:
        (WebInspector.showConsole): usees the new showView to guarantee the Drawer will be open
        (WebInspector.showChanges): uses the new showView guarantee the Drawer will be open

2009-08-11  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] WMLPageState is not allowed to store the active card, it needs to be done per document
        https://bugs.webkit.org/show_bug.cgi?id=28180

        Don't store the active WMLCardElement in WMLPageState, but in WMLDocument.
        Otherwhise this may lead to crashes related to intrinsic event exeuction.

        Unfortunately select elements aren't testable by the layout tests, so adding
        a new manual test reproducing the crash.

        * manual-tests/wml/select-onpick-event-crash.wml: Added.
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::determineActiveCard):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::defaultEventHandler):
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing):
        * wml/WMLDocument.h:
        (WebCore::WMLDocument::activeCard):
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::executeTask):
        * wml/WMLPageState.cpp:
        (WebCore::WMLPageState::WMLPageState):
        * wml/WMLPageState.h:
        * wml/WMLPrevElement.cpp:
        (WebCore::WMLPrevElement::executeTask):
        * wml/WMLRefreshElement.cpp:
        (WebCore::WMLRefreshElement::executeTask):

2009-08-07  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28073
        Treat icons with no bit count and no color count as 256-color for
        purposes of quality ranking.  Also fix a couple cases of a style
        violation.

        Test: fast/images/icon-0colors.html

        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::processDirectory):
        (WebCore::ICOImageDecoder::readDirectoryEntry):

2009-08-11  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Need to refactor WorkerObjectProxy.
        https://bugs.webkit.org/show_bug.cgi?id=28136

        Added WorkerReportingProxy for reporting worker state (exceptions, console messages, thread exited) to the parent.

        Existing tests are sufficient, as this is only a refactoring.

        * GNUmakefile.am:
        Added WorkerReportingProxy.h to build.
        * WebCore.gypi:
        Added WorkerReportingProxy.h to build.
        * WebCore.vcproj/WebCore.vcproj:
        Added WorkerReportingProxy.h to build.
        * WebCore.xcodeproj/project.pbxproj:
        Added WorkerReportingProxy.h to build.
        * workers/DedicatedWorkerContext.cpp:
        * workers/DedicatedWorkerContext.h:
        Removed addMessage/forwardException() APIs - now handled by WorkerReportingProxy.
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        Changed constructor to pass WorkerReportingProxy to base class.
        * workers/DefaultSharedWorkerRepository.cpp:
        Updated SharedWorkerProxy to implement WorkerReportingProxy interface.
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        (WebCore::SharedWorkerProxy::workerContextClosed):
        (WebCore::SharedWorkerProxy::workerContextDestroyed):
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        Now passes in WorkerReportingProxy when creating SharedWorkerThread.
        * workers/SharedWorkerContext.cpp:
        * workers/SharedWorkerContext.h:
        Removed addMessage/forwardException() APIs - now handled by WorkerReportingProxy.
        * workers/SharedWorkerThread.cpp:
        (WebCore::SharedWorkerThread::create):
        (WebCore::SharedWorkerThread::SharedWorkerThread):
        Passes WorkerReportingProxy to base class constructor.
        * workers/SharedWorkerThread.h:
        Constructor now takes a WorkerReportingProxy.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        Moved code that calls workerContextDestroyed() into base class so shared workers share this functionality.
        (WebCore::WorkerContext::close):
        Now notifies WorkerReportingProxy when the thread is closing.
        (WebCore::WorkerContext::reportException):
        Reports exceptions via WorkerReportingProxy.
        (WebCore::WorkerContext::addMessage):
        Reports console messages via WorkerReportingProxy.
        * workers/WorkerContext.h:
        * workers/WorkerObjectProxy.h:
        (WebCore::WorkerObjectProxy::workerContextClosed):
        Default empty implementation for dedicated workers.
        * workers/WorkerReportingProxy.h: Added.
        Base interface that contains APIs moved from WorkerObjectProxy.
        (WebCore::WorkerReportingProxy::~WorkerReportingProxy):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        Updated constructor to accept a WorkerReportingProxy.
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::workerReportingProxy):

2009-08-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by NOBODY (build fix).

        Fix the Qt build after r47022.

        Use the new markChildren() pattern for marking aggregate/child objects.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::markChildren):
        (JSC::Bindings::QtInstance::markAggregate):
        * bridge/qt/qt_instance.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::markChildren):
        * bridge/qt/qt_runtime.h:

2009-08-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Fix the build on the Qt build bot by making the generated JS bindings
        files depend on the code generator itself.

        * WebCore.pro:

2009-08-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig

        Stack overflow crash in JavaScript garbage collector mark pass
        https://bugs.webkit.org/show_bug.cgi?id=12216

        Make WebCore use the new iterative marking logic.

        Tests: fast/js/nested-object-gc.html

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::markChildren):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::markChildren):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markDOMNodesForDocument):
        (WebCore::markActiveObjectsForContext):
        (WebCore::markDOMObjectWrapper):
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::markChildren):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::markChildren):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::markChildren):
        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::markChildren):
        * bindings/js/JSDOMWindowShell.h:
        * bindings/js/JSDedicatedWorkerContextCustom.cpp:
        (WebCore::JSDedicatedWorkerContext::markChildren):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::markChildren):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::markJSFunction):
        * bindings/js/JSEventListener.h:
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::markChildren):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::markChildren):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::markChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::markAggregate):
        * bindings/js/JSNodeFilterCondition.h:
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::markChildren):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::markChildren):
        * bindings/js/JSQuarantinedObjectWrapper.cpp:
        (WebCore::JSQuarantinedObjectWrapper::markChildren):
        * bindings/js/JSQuarantinedObjectWrapper.h:
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::markChildren):
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorker::markChildren):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::JSStyleSheet::markChildren):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::markChildren):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::markChildren):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::markChildren):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::markChildren):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        * bindings/js/JSXMLHttpRequestUploadCustom.cpp:
        (WebCore::JSXMLHttpRequestUpload::markChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/EventListener.h:
        (WebCore::EventListener::markJSFunction):
        (WebCore::markIfNotNull):
        * dom/NodeFilter.h:
        (WebCore::NodeFilter::markAggregate):
        * dom/NodeFilterCondition.h:
        (WebCore::NodeFilterCondition::markAggregate):
        * dom/RegisteredEventListener.h:
        (WebCore::markEventListeners):
        * page/DOMWindow.h:
        * workers/WorkerContext.h:

2009-08-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Eric Seidel.

        Renamed all V8 NPN_ functions to _NPN_ to match JSC and make them "private".
        https://bugs.webkit.org/show_bug.cgi?id=28089

        Rename all the NPN_foo functions to _NPN_foo so that they can't directly be
        called by mistake.  This roughly matches the way JSC does it, which is an
        additional advantage.

        * bindings/v8/NPV8Object.cpp:
        (npCreateV8ScriptObject):
        (_NPN_Invoke):
        (_NPN_InvokeDefault):
        (_NPN_Evaluate):
        (_NPN_EvaluateHelper):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_SetException):
        (_NPN_Enumerate):
        (_NPN_Construct):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::clearScriptObjects):
        (WebCore::ScriptController::createScriptInstanceForWidget):
        (WebCore::ScriptController::cleanupScriptObjectsForPlugin):
        * bindings/v8/V8NPObject.cpp:
        (npObjectInvokeImpl):
        (npObjectGetProperty):
        (npObjectIndexedPropertyGetter):
        (npObjectGetIndexedProperty):
        (npObjectSetProperty):
        (npObjectIndexedPropertySetter):
        (npObjectSetIndexedProperty):
        (weakNPObjectCallback):
        (createV8ObjectForNPObject):
        (forgetV8ObjectForNPObject):
        * bindings/v8/V8NPUtils.cpp:
        (getStringIdentifier):
        * bindings/v8/npruntime.cpp:
        * bindings/v8/npruntime_impl.h:

2009-08-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Brady Eidson.

        Change ___Storage.key() to match current spec behavior.
        https://bugs.webkit.org/show_bug.cgi?id=28112

        The current WebStorage spec says that ___Storage.key() should return null when
        the index is out of bounds, rather than an exception.  A bunch of logic can be
        simplified after this change.

        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::getPropertyNames):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Custom::v8StorageNamedPropertyEnumerator):
        * storage/Storage.cpp:
        (WebCore::Storage::key):
        * storage/Storage.h:
        * storage/Storage.idl:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::key):
        * storage/StorageAreaImpl.h:
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::key):
        * storage/StorageMap.h:

2009-08-07  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Fisher.

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

        Mods for a chrome specific impl of ApplicationCacheHost.

        * The public section of the interface is the same, but we use
        PLATFORM(CHROMIUM) to identify which parts of the private
        section are shared. The chrome specific internals are encapsulated
        in a seperate ApplicationCacheHostInternal class. WebCore common
        code only contains a forward reference to this class.

        * Cleanup a couple of stale comments.

        * Have window.applicationCache return null to script when the
        feature is disabled in the preferences.
        
        No new tests.

        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::documentLoader):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::applicationCache):

2009-08-10  Crystal Zhang  <crystal.zhang@torchmobile.com>

        Reviewed by George Staikos.

        Implement GraphicsContext::fillRoundRect() for WINCE port
        https://bugs.webkit.org/show_bug.cgi?id=27842

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::rectCenterPoint):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawRoundCorner):

2009-08-10  Anthony Ricaud  <rik@webkit.org>

        Reviewed by Timothy Hatcher.

        Inspector Resources / Graphs should support filtering
        https://bugs.webkit.org/show_bug.cgi?id=20629

        Introduces a filter bar for resources.

        Thanks to Matt Lilek for the CSS scope bar.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.createFilterElement):
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.toolbarItemClass.categoryOrder.filter):
        (WebInspector.ResourcesPanel.prototype._updateFilter):
        (WebInspector.ResourcesPanel.prototype._updateSummaryGraph):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2009-08-10  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction after http://trac.webkit.org/changeset/46978

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle):  Correct
         deprecated removeRef to new removeFragmentIdentifier.

2009-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        Background color formatting lost on enter
        https://bugs.webkit.org/show_bug.cgi?id=20348

        This patch makes background color be preserved during editing.
        In particular, editingStyleAtPosition would include the background color when obtaining styles.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::): Added CSSPropertyBackgroundColor to editingStyleProperties

2009-08-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Stop sending QEvent::CursorChange to Qt for mouse move.

        Verify if the cursor didn't change in WidgetQt::setCursor,
        just like the mac port does.

        Thanks to Adriano Rezendo for spotting and debugging the
        issue.

        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):

2009-08-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=28165
        Application cache maximum size cannot be set before the database is opened

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::vacuumDatabaseFile): Open appcache database if it isn't
        open yet.

2009-08-10  Vitaly Repeshko  <vitalyr@quad.spb.corp.google.com>

        Reviewed by Dimitri Glazkov.

        [V8] Fix memory leak in node event listeners. See http://crbug.com/17400.
        https://bugs.webkit.org/show_bug.cgi?id=28156

        * bindings/scripts/CodeGeneratorV8.pm: Custom event handler accessors now apply to all Node descendants.
        * bindings/v8/V8AbstractEventListener.h:
        (WebCore::V8AbstractEventListener::isObjectListener): Added virtual method to detect listeners that have weak references to JS objects.
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/V8ObjectEventListener.cpp:
        * bindings/v8/V8ObjectEventListener.h:
        (WebCore::V8ObjectEventListener::isObjectListener):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::removeHiddenDependency):
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8NodeCustom.cpp: Moved custom accessors from V8ElementCustom.cpp.
        (WebCore::toEventType):
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::getEventListener): Made static.

2009-08-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Cleanup DOM Storage namespace shutdown code usage of security origin.
        https://bugs.webkit.org/show_bug.cgi?id=28094

        If a storage namespace is not explicitly closed, be sure to do so on
        destruction of the object.  In addition, the close call should wait
        on the background thread finishing its syncing.  (Not doing so is actually
        a regression from the original LocalStorage code.)

        There's no point to passing in the SecurityOrigin when copying a storage
        area since what was passed in is exactly what is stored within each
        storage area.  In addition, the non-copy constructor should take in a
        PassRefPtr rather than a pointer since that pointer was only passed into
        the constuctor for RefPtr's anyway.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        (WebCore::StorageAreaImpl::copy):
        * storage/StorageAreaImpl.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebCore::StorageNamespaceImpl::~StorageNamespaceImpl):
        (WebCore::StorageNamespaceImpl::copy):
        (WebCore::StorageNamespaceImpl::close):
        * storage/StorageNamespaceImpl.h:

2009-08-10  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed, build fix.

        Rename ref() to fragmentIdentifier() in the wml/ subdirectory.

        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::determineActiveCard):
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::executeTask):
        * wml/WMLPageState.cpp:
        (WebCore::WMLPageState::canAccessDeck):

2009-08-10  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        Exclude JSMedia.cpp from build since it is included in DerivedSources.cpp.
        Fixes linker warnings.        
        
        Corrected spelling of JSInspectorBackend.cpp.
        
        Other changes related to actually using a Visual Studio to open/save the vcproj file.

        * WebCore.vcproj/WebCore.vcproj:

2009-08-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove a dead #define.

        * bindings/js/JSDOMBinding.cpp:

2009-08-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Update KURLGoogle for ref* method renames in
        http://trac.webkit.org/changeset/46978.
        https://bugs.webkit.org/show_bug.cgi?id=28084

        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_SETTER): Renamed ref and setRef to fragmentIdentifier and
            setFragmentIdentifier, respectively.
        * platform/KURLGoogle.cpp: Ditto, plus all other ref* method names.

2009-08-10  Jan Michael Alonzo  <jmalonzo@webkit.org>

        [Gtk] Unreviewed. Fix the nit as suggested by Darin in bug #28144
        for r46989.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::finishedCallback):

2009-08-10  John Kjellberg  <john.kjellberg@power.alstom.com>

        Reviewed by Darin Adler.

        Memory leak in error handling code for SOUP interface
        https://bugs.webkit.org/show_bug.cgi?id=28144

        Freed memory leaked in error handling code for soup requests.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::finishedCallback):
        (WebCore::):

2009-08-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Provide graceful handling of the situation when an embedder invokes
        visited link update methods before a Page constructor has been called.
        https://bugs.webkit.org/show_bug.cgi?id=28149

        * page/Page.cpp:
        (WebCore::Page::allVisitedStateChanged): Added a null-check for allPages.
        (WebCore::Page::visitedStateChanged): Ditto.

2009-08-10  Xan Lopez  <xlopez@igalia.com>

        Fix GTKbuild.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):

2009-08-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Remove the redundant, Windows CE-only GlyphBuffer::advnaceData()

        * platform/graphics/GlyphBuffer.h: Removed advanceData().
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::drawText): Changed to use advances(from)
            instead of advanceData() from.

2009-08-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Remove workaround for older libsoup versions.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::fillResponseFromMessage):

2009-08-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Let startHttp validate the URI instead of doing it, with potential
        crashes, in ::start.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):

2009-08-10  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        When empty <input> is focused, getSelection() exposes shadow tree nodes
        https://bugs.webkit.org/show_bug.cgi?id=15903

        Test: fast/forms/shadow-tree-exposure.html

        * page/DOMSelection.cpp:
        (WebCore::selectionShadowAncestor): Added.
        (WebCore::DOMSelection::anchorNode): Return the parent of the shadow
        ancestor if the selection is in a shadow tree. Matches Firefox.
        (WebCore::DOMSelection::anchorOffset): Return the index of the shadow
        ancestor if the selection is in a shadow tree. Matches Firefox.
        (WebCore::DOMSelection::focusNode): Ditto.
        (WebCore::DOMSelection::focusOffset): Ditto.
        (WebCore::DOMSelection::baseNode): More of the same, but since this
        is a WebKit-invented property, it does not match Firefox.
        (WebCore::DOMSelection::baseOffset): Ditto.
        (WebCore::DOMSelection::extentNode): Ditto.
        (WebCore::DOMSelection::extentOffset): Ditto.
        (WebCore::DOMSelection::isCollapsed): Return true even when the
        selection is a range, if the selection is in the shadow tree.
        Matches Firefox. Also changed behavior when called and the frame
        is gone to return true instead of false which makes more sense.
        (WebCore::DOMSelection::empty): Use clear() just like the other
        selection-clearing function in this file does.
        (WebCore::DOMSelection::getRangeAt): Return a range that starts
        and ends before the shadow ancestor. Matches Firefox.

2009-08-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make all status bar button images glyph-based.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        * inspector/front-end/Images/clearConsoleButtonGlyph.png: Added.
        * inspector/front-end/Images/clearConsoleButtons.png: Removed.
        * inspector/front-end/Images/consoleButtonGlyph.png: Added.
        * inspector/front-end/Images/consoleButtons.png: Removed.
        * inspector/front-end/Images/dockButtonGlyph.png: Added.
        * inspector/front-end/Images/dockButtons.png: Removed.
        * inspector/front-end/Images/enableButtons.png: Removed.
        * inspector/front-end/Images/enableOutlineButtonGlyph.png: Added.
        * inspector/front-end/Images/enableSolidButtonGlyph.png: Added.
        * inspector/front-end/Images/excludeButtonGlyph.png: Added.
        * inspector/front-end/Images/excludeButtons.png: Removed.
        * inspector/front-end/Images/focusButtonGlyph.png: Added.
        * inspector/front-end/Images/focusButtons.png: Removed.
        * inspector/front-end/Images/largerResourcesButtonGlyph.png: Added.
        * inspector/front-end/Images/largerResourcesButtons.png: Removed.
        * inspector/front-end/Images/nodeSearchButtonGlyph.png: Added.
        * inspector/front-end/Images/nodeSearchButtons.png: Removed.
        * inspector/front-end/Images/pauseOnExceptionButtonGlyph.png: Added.
        * inspector/front-end/Images/pauseOnExceptionButtons.png: Removed.
        * inspector/front-end/Images/percentButtonGlyph.png: Added.
        * inspector/front-end/Images/percentButtons.png: Removed.
        * inspector/front-end/Images/recordButtonGlyph.png: Added.
        * inspector/front-end/Images/recordButtons.png: Removed.
        * inspector/front-end/Images/recordToggledButtonGlyph.png: Added.
        * inspector/front-end/Images/reloadButtonGlyph.png: Added.
        * inspector/front-end/Images/reloadButtons.png: Removed.
        * inspector/front-end/Images/undockButtonGlyph.png: Added.
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.createStatusBarButton):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2009-08-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        KURL ref() methods should be fragmentIdentifier() methods 
        https://bugs.webkit.org/show_bug.cgi?id=28084

        In addition to the renames, also took the chance to replace all use of:
        setRef(String());
        with:
        removeFragmentIdentifier();

        * platform/KURL.cpp:
        (WebCore::KURL::fragmentIdentifier):
        (WebCore::KURL::hasFragmentIdentifier):
        (WebCore::KURL::setFragmentIdentifier):
        (WebCore::KURL::removeFragmentIdentifier):
        (WebCore::KURL::prettyURL):
        (WebCore::equalIgnoringFragmentIdentifier):
        * platform/KURL.h:

        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setHash): Rework with new names, and to use the new equalIgnoringNullity() method.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::internalLinkElement):
        * css/CSSCursorImageValue.cpp:
        (WebCore::isSVGCursorIdentifier):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::isCurrentDocument):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::hash):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::gotoAnchor):
        (WebCore::FrameLoader::scheduleLocationChange):
        (WebCore::FrameLoader::scrollToAnchor):
        (WebCore::FrameLoader::shouldReload):
        (WebCore::FrameLoader::urlsMatchItem):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::resourceForURL):
        (WebCore::ApplicationCache::resourceForRequest):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        (WebCore::ApplicationCacheGroup::fallbackCacheForMainRequest):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::addEntry):
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::create):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::findOrCreateCacheGroup):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * page/Location.cpp:
        (WebCore::Location::hash):
        * page/Page.cpp:
        (WebCore::Page::goToItem):
        * rendering/RenderPartObject.cpp:
        (WebCore::isURLAllowed):
        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::hash):

2009-08-10  Andy Shaw <andy.shaw@nokia.com>

        Reviewed by Simon Hausmann.

        Fix endless loop when the application is quit by a secondary thread during a sync xml http request.

        Replace the m_finished state variable and the call to QCoreApplication::processEvents() with
        a dedicated QEventLoop, that can be terminated from within WebCoreSynchronousLoader as well
        as from Qt through its knowledge of globally registered eventloops.

        There is no unit test for this bug as it would require exporting additional symbols and
        introduce the synchronous loader as global variable just for the test.

        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::waitForCompletion):

2009-08-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Make properties inspection serialized.

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

        * inspector/front-end/DOMAgent.js:
        (InspectorController.getPrototypes):
        (InspectorController.getProperties):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.getPrototypes):
        (InjectedScript.getProperties):
        (InjectedScript.setPropertyValue):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectRef):
        (WebInspector.ObjectPropertyRef):
        (WebInspector.ObjectPropertiesSection.prototype.onpopulate):
        (WebInspector.ObjectPropertiesSection.prototype.update.callback):
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertiesSection.prototype._update):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.onattach):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        (WebInspector.PropertiesSidebarPane.prototype.update):

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] wml.css lacks <pre> support
        https://bugs.webkit.org/show_bug.cgi?id=28135

        Add <pre> support for WML.
        Extended fast/wml/text-emphasis.wml to cover <pre> support.

        * css/wml.css: <pre> section copied from html.css

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Oliver Hunt.

        Fix non-WML enabled builds. Remove ENABLE(WML) guards around the switch cases 'FrameLoadTypeBackWMLDeckNotAccessible'.

        * loader/FrameLoader.cpp:
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::loadItem):

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Deck access control is completly broken
        https://bugs.webkit.org/show_bug.cgi?id=27721

        Rewrite WML deck access control, actually works now standalone and within LayoutTests.
        Added several new layout tests covering local & remote access support.

        In order to detect WML task execution failures from within the WML layout tests a new
        method Console::lastWMLErrorMessage() has been added, returning the last recorded WML
        error message. Change WML log messages to dump to InspectorClient, just like it's done
        for HTML - we used to behave like JSMessageSource, which is wrong.

        Tests: http/tests/wml/access-target-domain-deny.html
               http/tests/wml/access-target-path-deny.html
               http/tests/wml/access-target.html
               wml/access-target-deny.html
               wml/access-target.html

        * inspector/ConsoleMessage.h:
        (WebCore::ConsoleMessage::source): Added public method to fetch the message source type.
        (WebCore::ConsoleMessage::message): Added public method to access the error message.
        * inspector/InspectorController.h:
        (WebCore::InspectorController::consoleMessages): Added for Console::lastWMLErrorMessage(), to be able to crawl through the list of dumped messages.
        * loader/FrameLoader.cpp: Recognize 'FrameLoadTypeBackWMLDeckNotAccessible', all guarded by ENABLE(WML).
        (WebCore::isBackForwardLoadType):
        (WebCore::FrameLoader::restoreDocumentState):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoaderTypes.h:
        (WebCore::): Add new load type 'FrameLoadTypeBackWMLDeckNotAccessible', behaving like FrameLoadTypeBack plus WML specific information.
        * page/Console.cpp:
        (WebCore::Console::addMessage): Don't dump WML messages using ChromeClient (as it's done for JSMessageSource), but go through InspectorController.
        (WebCore::Console::lastWMLErrorMessage): Crawl InspectorController::consoleMssages() to look up the last WML error message, if present.
        * page/Console.h:
        * page/Console.idl: Add "[DontEnum] DOMString lastWMLErrorMessage()".
        * wml/WMLAccessElement.cpp: Store path/domain as member variables and pass them to WMLPageState once in insertedIntoDocument().
        (WebCore::WMLAccessElement::parseMappedAttribute):
        (WebCore::WMLAccessElement::insertedIntoDocument):
        * wml/WMLAccessElement.h:
        * wml/WMLCardElement.cpp: Handle 'FrameLoadTypeBackWMLDeckNotAccessible' as deck-entry method. Report WML error in current deck.
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded):
        * wml/WMLDocument.cpp: Enable deck-access control in finishedParsing. Take care of method name changes in WMLPageState.
        (WebCore::WMLDocument::finishedParsing):
        (WebCore::WMLDocument::initialize):
        * wml/WMLErrorHandling.cpp: Never report 'WMLErrorDeckNotAccessible' messages through the tokenizer, that would alter the page into error state.
        (WebCore::reportWMLError):
        * wml/WMLPageState.cpp: Completly rewrote access path/domain parsing & deck-access control, strictly following the WML spec. All covered by tests.
        (WebCore::WMLPageState::WMLPageState):
        (WebCore::normalizedHostName):
        (WebCore::hostFromURL):
        (WebCore::urlForHistoryItem):
        (WebCore::tryAccessHistoryURLs):
        (WebCore::WMLPageState::processAccessControlData):
        (WebCore::WMLPageState::resetAccessControlData):
        (WebCore::WMLPageState::canAccessDeck):
        (WebCore::WMLPageState::hostIsAllowedToAccess):
        (WebCore::WMLPageState::pathIsAllowedToAccess):
        * wml/WMLPageState.h:

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Maciej Stachowiak.

        FrameLoadType / WebFrameLoadType enums are out of sync
        https://bugs.webkit.org/show_bug.cgi?id=28132

        Modify FrameLoadType enum to match the order of WebFrameLoadType in WebFramePrivate.h / IWebFramePrivate.idl.
        The mac/win public API exposes the old 'FrameLoadTypeReloadAllowingStaleData' value, which resides between
        'FrameLoadTypeReload' and 'FrameLoadTypeSame'. Work around this problem, by assigning 'FrameLoadTypeSame = FrameLoadTypeReload 2'.

        Add a note to the FrameLoadType enum to keep it in sync with WebFramePrivate.h & IWebFramePrivate.idl.

        * loader/FrameLoaderTypes.h:
        (WebCore::):

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] manual-tests/wml/onevent-prev.wml crashes
        https://bugs.webkit.org/show_bug.cgi?id=27722

        Fix intrinsic event execution, leading to crashes.
        First finish parsing the document, then execute the events. Not the other way round.
        -> exposes bugs all over the WML layout tests, which relied on that quirk.

        Fixes manual-tests/wml/onevent-prev.wml.

        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::WMLDocument):
        (WebCore::WMLDocument::finishedParsing):
        (WebCore::WMLDocument::initialize):
        * wml/WMLDocument.h:

2009-08-08  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Update WebCore.gyp to add ImageBuffer.cpp,
        introduced by http://trac.webkit.org/changeset/46956.
        https://bugs.webkit.org/show_bug.cgi?id=27844

        * WebCore.gypi: Added ImageBuffer.cpp.

2009-08-08  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Rubber-stamped by Jan Michael Alonzo.

        Add [DontEnum] to WML specific initializeWMLPageState/resetWMLPageState methods, to assure
        fast/dom/Window/window-properties.html doesn't show any differences when WML is enabled.

        * dom/Document.idl:

2009-08-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Eric Seidel.

        SVG Filter need feColorMatrix implementation
        [https://bugs.webkit.org/show_bug.cgi?id=27711]

        Adds the filter effect feColorMatrix to SVG filters. 

        There is already a test in the w3c directory.
        Test: svg/W3C-SVG-1.1/filters-color-01-b.svg

        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::matrix):
        (WebCore::saturate):
        (WebCore::huerotate):
        (WebCore::luminance):
        (WebCore::FEColorMatrix::apply):

2009-08-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Build fix for Tiger.
        https://bugs.webkit.org/show_bug.cgi?id=27844

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2009-08-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        This is an initial implementation for linearRGB and sRGB support for all
        platforms. Some platforms like Cg support different color spaces
        natively, others like Qt, Cairo and Skia do not. This patch uses the
        native implementation of platforms if possible and offers a common version
        if not.

        Different color spaces are used in SVG Filters. Nearly every Filter test 
        case is a test for this patch and will be enabled, once Filters are enabled.
        https://bugs.webkit.org/show_bug.cgi?id=27844

        * GNUmakefile.am:
        * WebCore.pro:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern):
        * platform/graphics/ImageBuffer.cpp: Added.
        (WebCore::ImageBuffer::transformColorSpace):
        * platform/graphics/ImageBuffer.h:
        (WebCore::):
        (WebCore::ImageBuffer::create):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::OwnedBuffers::OwnedBuffers):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::getEffectContext):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::strokeContains):
        (WebCore::Path::strokeBoundingRect):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::scratchContext):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::drawMaskerContent):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::buildPattern):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * svg/graphics/SVGPaintServerGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        * svg/graphics/SVGPaintServerPattern.cpp:
        (WebCore::SVGPaintServerPattern::setup):
        * svg/graphics/SVGResourceFilter.cpp:
        (WebCore::SVGResourceFilter::prepareFilter):
        (WebCore::SVGResourceFilter::applyFilter):
        * svg/graphics/SVGResourceMasker.cpp:
        (WebCore::SVGResourceMasker::applyMask):
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):

2009-08-08  Xan Lopez  <xlopez@igalia.com>

        Roll out r46928, since it wasn't done in accordance with the
        agreed naming.

        * bindings/gdom/GdomDOMObject.cpp: Removed.

2009-08-08  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Enable accessibility in Gtk DRT
        https://bugs.webkit.org/show_bug.cgi?id=25989

        Add SPI to get the focused accessible element to be used by DRT.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_focused_element):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.h:

2009-08-07  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix - add html/canvas to the binding generator's include path

        * GNUmakefile.am:

2009-08-07  Oliver Hunt  <oliver@apple.com>

        Another attempt to fix windows.

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

2009-08-07  Oliver Hunt  <oliver@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj:

2009-08-07  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix - add html/canvas to the include path.

        * GNUmakefile.am:

2009-08-07  Adam Treat  <adam.treat@torchmobile.com>

        Prospective build fix for Qt following r46937.

        * WebCore.pro:

2009-08-07  Yong Li  <yong.li@torchmobile.com>

        WINCE PORT: store only width for GlyphBufferAdvance, to save space on low-memory devices
        https://bugs.webkit.org/show_bug.cgi?id=27734

        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::advanceAt):
        (WebCore::GlyphBuffer::advanceData):
        (WebCore::GlyphBuffer::add):

2009-08-07  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        WINCE PORT: pass unrecognized glyphs to GDI to handle
        https://bugs.webkit.org/show_bug.cgi?id=27734

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter):

2009-08-07  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Move Canvas related file to a subdirectories
        https://bugs.webkit.org/show_bug.cgi?id=28026

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/CanvasGradient.cpp: Removed.
        * html/CanvasGradient.h: Removed.
        * html/CanvasGradient.idl: Removed.
        * html/CanvasPattern.cpp: Removed.
        * html/CanvasPattern.h: Removed.
        * html/CanvasPattern.idl: Removed.
        * html/CanvasPixelArray.cpp: Removed.
        * html/CanvasPixelArray.h: Removed.
        * html/CanvasPixelArray.idl: Removed.
        * html/CanvasRenderingContext2D.cpp: Removed.
        * html/CanvasRenderingContext2D.h: Removed.
        * html/CanvasRenderingContext2D.idl: Removed.
        * html/CanvasStyle.cpp: Removed.
        * html/CanvasStyle.h: Removed.
        * html/canvas: Added.
        * html/canvas/CanvasGradient.cpp: Copied from WebCore/html/CanvasGradient.cpp.
        * html/canvas/CanvasGradient.h: Copied from WebCore/html/CanvasGradient.h.
        * html/canvas/CanvasGradient.idl: Copied from WebCore/html/CanvasGradient.idl.
        * html/canvas/CanvasPattern.cpp: Copied from WebCore/html/CanvasPattern.cpp.
        * html/canvas/CanvasPattern.h: Copied from WebCore/html/CanvasPattern.h.
        * html/canvas/CanvasPattern.idl: Copied from WebCore/html/CanvasPattern.idl.
        * html/canvas/CanvasPixelArray.cpp: Copied from WebCore/html/CanvasPixelArray.cpp.
        * html/canvas/CanvasPixelArray.h: Copied from WebCore/html/CanvasPixelArray.h.
        * html/canvas/CanvasPixelArray.idl: Copied from WebCore/html/CanvasPixelArray.idl.
        * html/canvas/CanvasRenderingContext2D.cpp: Copied from WebCore/html/CanvasRenderingContext2D.cpp.
        * html/canvas/CanvasRenderingContext2D.h: Copied from WebCore/html/CanvasRenderingContext2D.h.
        * html/canvas/CanvasRenderingContext2D.idl: Copied from WebCore/html/CanvasRenderingContext2D.idl.
        * html/canvas/CanvasStyle.cpp: Copied from WebCore/html/CanvasStyle.cpp.
        * html/canvas/CanvasStyle.h: Copied from WebCore/html/CanvasStyle.h.

2009-08-07  Szabo Carol  <carol.szabo@nokia.com>

        Reviewed by David Hyatt.

        QtWebkit ignores letter-spacing and word-spacing styles.
        QtWebkit handles custom letter-spacing and word-spacing in the native QFont
        class, but the values for these options are not not passed on from
        the platform independent part of the Font class.
        Fixed QtWebkit behavior by applying the options to QFont when it is
        returned via Font::font()

        http://bugs.webkit.org/show_bug.cgi?id=27988

        LayoutTests:
        fast/css/word-space-extra.html
        css2.1/t1604-c542-letter-sp-00-b-a.html
        css2.1/t1604-c541-word-sp-01-b-a.html
        css1/text_properties/word_spacing.html
        
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::font):

2009-08-07  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Darin Adler.

        Use correct highlight color for listboxes and completion popups.

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

        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        Rename activeListBoxSelectionBackgroundColor to
        platformActiveListBoxSelectionBackgroundColor, so that it actually
        overrides a virtual method.

2009-08-07  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added a fourth bunch of Haiku-specific files for WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=26988

        * platform/haiku/PasteboardHaiku.cpp: Added.
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::clear):
        * platform/haiku/PlatformKeyboardEventHaiku.cpp: Added.
        (WebCore::keyIdentifierForHaikuKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):
        * platform/haiku/PlatformMouseEventHaiku.cpp: Added.
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/haiku/PlatformWheelEventHaiku.cpp: Added.
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2009-08-07  Nicolas Weber  <thakis@chromium.org>

        Teach WebKit how to decode jpegs in cmyk and ycck color spaces.
        Heavily inspired by Firefox's take on this issue.

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

        Reviewed by Eric Seidel.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):
        Tell jpeglib to convert ycck to cmyk and keep cmyk.
        (WebCore::convertCMYKToRGBA):
        Added function to convert cmyk to rgb.
        (WebCore::convertRGBToRGBA):
        Extracted existing conversion logic into its own function.
        (WebCore::JPEGImageDecoder::outputScanlines):
        Call convertCMYKToRGBA for cmyk images, convertRGBToRGBA for rgb
        images.

2009-08-07  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        SharedWorkers should be shared
        https://bugs.webkit.org/show_bug.cgi?id=28058

        Added tracking of shared workers to the SharedWorkerRepository.

        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::create):
        Changed SharedWorkerProxy to derive from ThreadSafeShared, as it needs to outlive the repository (if closed while some documents are still loading).
        (WebCore::SharedWorkerProxy::thread):
        (WebCore::SharedWorkerProxy::closing):
        Added flag used to determine whether the worker has closed itself while loading.
        (WebCore::SharedWorkerProxy::url):
        (WebCore::SharedWorkerProxy::name):
        Proxy now tracks worker URL and name to allow validity checks per section 4.8.3 of the WebWorkers spec.
        (WebCore::SharedWorkerProxy::SharedWorkerProxy):
        (WebCore::SharedWorkerProxy::addToDocumentSet):
        Added API to track the document set for a worker to allow worker shutdown. Currently does nothing.
        (WebCore::SharedWorkerScriptLoader::SharedWorkerScriptLoader):
        Renamed SharedWorkerLoader to be SharedWorkerScriptLoader for clarity.
        (WebCore::SharedWorkerScriptLoader::load):
        (WebCore::SharedWorkerScriptLoader::notifyFinished):
        (WebCore::DefaultSharedWorkerRepository::instance):
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        Now handles "worker already loaded" case.
        (WebCore::SharedWorkerRepository::connect):
        Delegates to DefaultSharedWorkerRepository::connectToWorker
        (WebCore::DefaultSharedWorkerRepository::connectToWorker):
        Added code to track the SharedWorkerProxy in a map, and to handle the "worker already loaded" case.
        (WebCore::DefaultSharedWorkerRepository::getProxy):
        Atomic get-or-create operation on the internal tracking HashMap.
        * workers/DefaultSharedWorkerRepository.h:
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        * workers/SharedWorkerRepository.h:
        Removed instance() API and made constructor private to prevent instantiation.
        (WebCore::SharedWorkerRepository::SharedWorkerRepository):

2009-08-07  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added four Haiku-specific files for WebCore:
        PopupMenuHaiku.cpp, ScreenHaiku.cpp,
        SearchPopupMenuHaiku.cpp and SoundHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28080

        * platform/haiku/PopupMenuHaiku.cpp: Added.
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/haiku/ScreenHaiku.cpp: Added.
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenIsMonochrome):
        * platform/haiku/SearchPopupMenuHaiku.cpp: Added.
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/haiku/SoundHaiku.cpp: Added.
        (WebCore::systemBeep):

2009-08-07  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added two Haiku-specific files to WebCore:
        TemporaryLinkStubs.cpp and WidgetHaiku.cpp
        https://bugs.webkit.org/show_bug.cgi?id=28080

        * platform/haiku/TemporaryLinkStubs.cpp: Added.
        (loadResourceIntoArray):
        (WebCore::historyContains):
        (WebCore::supportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        (WebCore::userIdleTime):
        (WebCore::callOnMainThread):
        (WebCore::SharedBuffer::createWithContentsOfFile):
        (WebCore::KURL::fileSystemPath):
        (WebCore::getSupportedKeySizes):
        * platform/haiku/WidgetHaiku.cpp: Added.
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::paint):
        (WebCore::Widget::setIsSelected):

2009-08-07  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix the problem that isAttribute is set to false for onerror and
        onmessage in worker custom code.
        https://bugs.webkit.org/show_bug.cgi?id=28083

        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_SETTER):

2009-08-07  Vitaly Repeshko  <vitalyr@quad.spb.corp.google.com>

        Reviewed by Dimitri Glazkov.

        V8 bindings: speed up lookupDOMWrapper by using new V8 API function.

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

        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::lookupDOMWrapper):

2009-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        selectionHasStyle doesn't handle text-specific properties properly
        https://bugs.webkit.org/show_bug.cgi?id=27858

        This patch modifies selectionHasStyle so that it returns TrueTriState when text styles
        (text-decoration, font-style, font-weight, & color) are present in all text nodes,
        regardless of whether the style is also present in their ancestor nodes or not.
        e.g. New behavior concludes that <b><i>hello</i><i>world</i></b> has italic style.

        WebKit now applies the text styles (bold, italic, etc) if the specified style was not present on
        at least one text node, rather than at the beginning of selection except on Mac.
        On Mac, WebKit applies the text style if the style was not present at the beginning of style.

        Test: editing/execCommand/toggle-compound-styles.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::getPropertiesNotInComputedStyle): bug fix, must use copy instead of makeMutable for a mutable style.
        * editing/Editor.cpp:
        (WebCore::):
        (WebCore::triStateOfStyleInComputedStyle): Added a boolean type to ignore text-specific styles
        (WebCore::Editor::selectionHasStyle): Ignores text-specific styles for all but text nodes
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyle): Uses selectionHasStyle instead of selectionStartHasStyle

2009-08-07  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Do not register V8 error message listener in WorkerContextExecutionProxy.
        https://bugs.webkit.org/show_bug.cgi?id=28082

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initV8IfNeeded):

2009-08-07  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        Cairo-based Windows port does not handle cookies properly
        https://bugs.webkit.org/show_bug.cgi?id=27414

        curl handles cookies by itself, so using WinINet functions
        to get and set cookies is wrong.

        Replace CookieJarWin.cpp with CookieJarCurl.cpp so that
        cookies can be implemented later once curl provides an API to
        get and set cookies.

        * WebCore.vcproj/WebCore.vcproj:

2009-08-07  Michael Nordman  <michaeln@google.com>

        Reviewed by Dimitri Glazkov.

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

        V8 bindings for the window.applicationCache attribute.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMApplicationCacheCustom.cpp: Added.

2009-08-07  Alpha Lam  <hclam@chromium.org>

        Reviewed by Eric Seidel.

        Right click on timeline of media controls panel cause seek
        https://bugs.webkit.org/show_bug.cgi?id=27920

        Add a test simulate the behavior of seeking by right clicking
        on the time bar of media controls while playing.

        * media/controls-right-click-on-timebar-expected.txt: Added.
        * media/controls-right-click-on-timebar.html: Added.

2009-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        deprecatedCopyInheritableProperties must be replaced by two different functions
        https://bugs.webkit.org/show_bug.cgi?id=28057

        This patch deletes deprecatedInheritableProperties and modifies call callees to call either editingStyleAtPosition
        or prepareEditingStyleToApplyAt. The concept of editing style is introduced in this patch,
        which consists of all CSS properties need to be preserved under editing operations.

        No test is added since this patch does not change any behavior.

        * css/CSSComputedStyleDeclaration.cpp: Removed deprecatedCopyInheritableProperties
        * css/CSSComputedStyleDeclaration.h: Removed deprecatedCopyInheritableProperties
        * editing/ApplyStyleCommand.cpp:
        (WebCore::):
        (WebCore::editingStyleAtPosition): Obtains the editing-specific computed style at the position
        (WebCore::prepareEditingStyleToApplyAt): Removes redundant editing styles at the specified position
        (WebCore::removeStylesAddedByNode): Removes the style derived from the specified node
        * editing/ApplyStyleCommand.h:
        (WebCore::):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Uses editingStyleAtPosition
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Uses editingStyleAtPosition
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::removeEnclosingAnchorStyle): Uses removeStyleOfNode
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): Uses editingStyleAtPosition
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete): Uses prepareEditingStyleToApplyAt
        * editing/EditCommand.cpp:
        * editing/EditCommand.h:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion): Uses editingStyleAtPosition
        (WebCore::InsertParagraphSeparatorCommand::applyStyleAfterInsertion): Uses prepareEditingStyleToApplyAt
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply): Uses editingStyleAtPosition
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::handleStyleSpansBeforeInsertion): Uses editingStyleAtPosition
        (WebCore::ReplaceSelectionCommand::handleStyleSpans): Uses editingStyleAtPosition and prepareEditingStyleToApplyAt
        (WebCore::ReplaceSelectionCommand::doApply): Uses prepareEditingStyleToApplyAt
        * editing/markup.cpp:
        (WebCore::removeEnclosingMailBlockquoteStyle): Uses removeStyleOfNode
        (WebCore::removeDefaultStyles): Uses prepareEditingStyleToApplyAt
        (WebCore::createMarkup): Uses editingStyleAtPosition

2009-08-07  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Bug 27250: Geolocation callback function IDL files are superfluous
        https://bugs.webkit.org/show_bug.cgi?id=27250

        The objects for the Geolocation success and error callbacks are created 'manually' in
        WebCore/bindings/js/JSGeolocationCustom.cpp. Furthermore, the callback interfaces are 
        marked 'NoInterfaceObject' in the W3C spec, so the prototype should not
        appear on the window object. Hence IDL files for these callbacks are not required.

        See http://www.w3.org/TR/geolocation-API/#geolocation_interface and
        http://www.w3.org/TR/WebIDL/#NoInterfaceObject.

        No new tests required.

        * DerivedSources.make: Modified. Removed reference to IDL files.
        * WebCore.gypi: Modified. Removed reference to IDL files.
        * WebCore.xcodeproj/project.pbxproj: Modified. Removed reference to IDL files.
        * page/PositionCallback.idl: Removed.
        * page/PositionErrorCallback.idl: Removed.

2009-08-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by David Levin.

        Build fix for Qt when ENABLE_VIDEO = 0.  This was necessitated by r46890 which
        put the idl files back into play regardless of compile time defines.

        * html/TimeRanges.idl:

2009-08-07  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by George Staikos.

        Coding style patches for RenderThemeQt.cpp based on results from cpp_style.py.

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

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::baselinePosition):
        (WebCore::inflateButtonRect):
        (WebCore::RenderThemeQt::supportsFocus):
        (WebCore::RenderThemeQt::applyTheme):

2009-08-07  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Prevent RenderThemeQt AdjustStyle based calls for TextField, MenuList and MenuListButton
        from discarding style colour.

        Add tests and remove tests from platform/qt/Skipped that now pass.

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

        Tests: fast/forms/menulist-style-color.html
               fast/forms/text-style-color.html

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustTextFieldStyle):
        (WebCore::RenderThemeQt::adjustMenuListStyle):
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):

2009-08-07  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        https://bugs.webkit.org/show_bug.cgi?id=22495
        [V8] Re-land http://trac.webkit.org/changeset/46821, now that
        http://trac.webkit.org/changeset/46874 re-landed

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-08-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Darin Adler and George Staikos.

        Add rectToRect convenience function which returns the TransformationMatrix
        which maps the 'from' rectangle to the 'to' rectangle.

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

        No tests as this would require binding the method to js and since it is static
        that doesn't seem possible.  Please check the math.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::rectToRect):
        * platform/graphics/transforms/TransformationMatrix.h:

2009-08-07  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Implement the HTML5 hashchange event.
        https://bugs.webkit.org/show_bug.cgi?id=21605

        Test: fast/loader/hashchange-event.html

        * dom/EventNames.h: Add "hashchange"
        * html/HTMLAttributeNames.in: Add "onhashchange"

        * loader/FrameLoader.cpp:
        (WebCore::HashChangeEventTask::create):
        (WebCore::HashChangeEventTask::performTask):
        (WebCore::HashChangeEventTask::HashChangeEventTask):
        (WebCore::FrameLoader::scrollToAnchor): When an anchor navigation is completed and the
          new fragment identifier is different from the old one, queue a hash change event
          on the Document.

        Add a window event listener for the hashchange event if onhashchange is encountered:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute): 
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):

        Add a new string utility method that gives "null and empty are equivalent" behavior:
        * platform/text/PlatformString.h:
        (WebCore::equalIgnoringNullity):
        * platform/text/StringImpl.cpp:
        (WebCore::equalIgnoringNullity):
        * platform/text/StringImpl.h:

2009-08-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Timothy Hatcher.

        Add the initial implementation of the ability to resize the columns in
        a DataGrid in the Web Inspector. Enables that functionality in both the
        Profile View and in the Local Storage View.
        
        https://bugs.webkit.org/show_bug.cgi?id=26182
        
        In this version, resizing a column can change the width of at most two
        columns (the columns to the left and right of the resizer being dragged).
        
        Possible changes in future patches:
        
        1) Be able to specify the minimum size of a column and the maximum size
           of a column. If the minimum size is equal to the maximum size, the
           column can't be resized.
        2) Make the behavior more in line with the following description:
        
        Everything before the column that is resized stays fixed size. The
        resized column changes sizes. The other columns except the last stay
        the same size. And the last column adjusts to fit with a minimum size.
        If the last column is already the minimum, the next to last column
        shrinks, etc.
        
        3) Make it possible to scale the column sizes appropriately when the
           Web Inspector window gets resized.
        
        * inspector/front-end/DOMStorageItemsView.js:
        (WebInspector.DOMStorageItemsView.prototype.update):
        Once the DataGrid is added to the DOM, update the widths of the
        DataGrid in order to put the resizers in place.
        (WebInspector.DOMStorageItemsView.prototype.resize):
        Update the widths of the DataGrid in order to correctly adjust the
        positions of the resizers.
        
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        Store column groups whose widths can later be changed when the columns
        are resized by the user.
        Also, keep track of whether the widths of the columns have been
        initialized.
        (WebInspector.DataGrid.prototype.updateWidths):
        Create the resizers for the columns.
        (WebInspector.DataGrid.prototype._clickInDataTable):
        Didn't actually change anything in this method, just added a comma to
        the end of the function.
        (WebInspector.DataGrid.prototype._startResizerDragging):
        Store the resizer that is currently dragging.
        (WebInspector.DataGrid.prototype._resizerDragging):
        Constrain the area that the resizer can be dragged to the column to
        it's left and right, with some padding added to make sure that the
        neighboring columns don't disappear.
        (WebInspector.DataGrid.prototype._endResizerDragging):
        
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.resize):
        Resize the view.
        (WebInspector.DatabasesPanel.prototype._updateSidebarWidth):
        ditto.
        
        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView.prototype.show):
        Now that the DataGrid is actually attached to the DOM, update the
        widths of the DataGrid in order to put the resizers in place.
        (WebInspector.ProfileView.prototype.resize):
        Update the widths of the DataGrid in order to correctly adjust the
        positions of the resizers.
        
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.resize):
        Resize the view.
        (WebInspector.ProfilesPanel.prototype._updateSidebarWidth):
        ditto.
        
        * inspector/front-end/inspector.css:
        Add in a style rule for a resizer in the Data Grid.

2009-08-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Back out r46847 and fix the Qt build system to always generate
        all the JS binding files from IDL files. The generated files
        have #if feature guards, so the #ifs are not needed in the
        files using them.

        * WebCore.pro:
        * bindings/js/JSEventTarget.cpp:
        * bindings/js/JSWorkerContextBase.cpp:
        * bindings/js/WorkerScriptController.cpp:

2009-08-07  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Adele Peterson.

        Cannot scroll for box-reflect:right
        https://bugs.webkit.org/show_bug.cgi?id=27979

        Update m_overflowLeft an m_overflowWidth for reflection just like
        m_overflowTop and m_overflowHeight.

        Test: fast/reflections/reflection-overflow-scroll.html

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

2009-08-06  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Adam Barth.

        box-shadow's spread is ignored with <table>
        https://bugs.webkit.org/show_bug.cgi?id=28017

        Use RenderStyle::getBoxShadowExtent just like RenderBlock.

        Test: fast/box-shadow/box-shadow-overflow-scroll.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

2009-08-06  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: NodeLists Don't Display Well in the Console
        https://bugs.webkit.org/show_bug.cgi?id=28061

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._format): Specific check if the object is a NodeList, display as an "array"

2009-08-06  Yusuke Sato  <yusukes@chromium.org>

        Reviewed by David Levin.

        Chromium Linux: add support for @font-face
        https://bugs.webkit.org/show_bug.cgi?id=28015
        
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::~CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::platformDataFromCustomData):
        (WebCore::CachedFont::allClientsRemoved):

        Modified #ifdefs so that chromium linux can load remote fonts.
        
        * platform/graphics/chromium/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):

        Create SkTypeface for a web font by calling SkTypeface::CreateFromStream function.
        
        (WebCore::RemoteFontStream::RemoteFontStream):
        (WebCore::RemoteFontStream::~RemoteFontStream):
        (WebCore::RemoteFontStream::rewind):
        (WebCore::RemoteFontStream::read):

        New class that implements SkStream interface and wraps wtf's SharedBuffer.
        
        * platform/graphics/chromium/FontCustomPlatformData.h:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):

        Added member variables for Linux.
        
2009-08-06  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Eric Seidel.

        Fix JPEGImageDecoder.cpp compile error on WinCE
        https://bugs.webkit.org/show_bug.cgi?id=28051

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:

2009-08-06  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Adding WebCore support for the waf build system for wx.
        
        https://bugs.webkit.org/show_bug.cgi?id=27619

        * wscript: Added.

2009-08-06  Adam Barth  <abarth@webkit.org>

        Unreviewed revert.

        http://bugs.webkit.org/show_bug.cgi?id=27879

        Revert 46877 because it broke GTK.

        * platform/graphics/wince/GraphicsContextWince.cpp:

2009-08-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Eric Seidel.

        Bug 27956 - AX: roleValue should be cached for performance
        https://bugs.webkit.org/show_bug.cgi?id=27956

        Caches the role value of an accessibility object instead of calculating it everytime.
        The changes gained a 5% speedup using VoiceOver to navigate a webpage.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAriaRoleChanged):

        Use generic role setter instead of specific ARIA role setter.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::AccessibilityObject):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::headingLevel):

        Make headingLevel into instance method so that it can *safely* be called in the constructor.

        (WebCore::AccessibilityObject::setRoleValue):
        (WebCore::AccessibilityObject::roleValue):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::headingLevel):
        (WebCore::AccessibilityRenderObject::intValue):
        (WebCore::AccessibilityRenderObject::updateAccessibilityRole):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetHeadingLevel):

2009-08-06  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Adam Barth.

        Change Noncopyable inheriting to public
        http://bugs.webkit.org/show_bug.cgi?id=27879

        Since Noncopyable is inherited from FastAllocBase, Noncopyable's
        inheriting has been changed to public.

        * platform/graphics/wince/GraphicsContextWince.cpp:

2009-08-06  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Add explicit dependencies for our build verification scripts to ensure that they always run after linking has completed.

        * WebCore.xcodeproj/project.pbxproj:

2009-08-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Implement the matchMedium method on the Media interface described in the CSSOM View Module.
        https://bugs.webkit.org/show_bug.cgi?id=22495
        
        Add a new Media interface, obtainable via the AbstractView, that can
        evaluate queries via its matchesMedium() method.

        Test: fast/media/matchmedium-query-api.html

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        Add Media.* files to the build.

        * css/Media.cpp: Added.
        (WebCore::Media::Media):
        (WebCore::Media::type):
        (WebCore::Media::matchMedium):
        * css/Media.h: Added.
        (WebCore::Media::create):
        (WebCore::Media::document):
        * css/Media.idl: Added.
        Media::matchMedium() uses a MediaQueryEvaluator() to test the query.

        * page/AbstractView.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::media):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        Add a readonly attribute for Media.

2009-08-06  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27455
        Support for a custom validation message in ValidityState and related
        form controls.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#dom-cva-setcustomvalidity

        Tests: fast/forms/ValidityState-customError-001.html
               fast/forms/ValidityState-customError-002.html
               fast/forms/ValidityState-customError-003.html
               fast/forms/ValidityState-customError-004.html

        * html/HTMLButtonElement.idl: setCustomValidity DOM method
        * html/HTMLFieldSetElement.idl: ditto
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::setCustomValidity): ditto
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::valueMissing): moved down
        * html/HTMLInputElement.idl: ditto
        * html/HTMLSelectElement.idl: ditto
        * html/HTMLTextAreaElement.idl:
        * html/ValidityState.h:
        (WebCore::ValidityState::setCustomErrorMessage): method to set custom
        validation message
        (WebCore::ValidityState::customError): validation flag

2009-08-06  Mark Rowe  <mrowe@apple.com>

        Bring a little order to our otherwise out of control lives.

        * WebCore.xcodeproj/project.pbxproj:

2009-08-06  Mark Rowe  <mrowe@apple.com>

        Stop copying .idl files in to the framework resources directory.

        * WebCore.xcodeproj/project.pbxproj:

2009-08-06  Mark Rowe  <mrowe@apple.com>

        Fix the build some more.

        Add JSWebSocket.cpp and JSWebSocket.h to the Xcode project, and move the WebSocket-related
        files and groups in to the appropriate locations.

        * WebCore.xcodeproj/project.pbxproj:

2009-08-06  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add WebSocket.idl
        https://bugs.webkit.org/show_bug.cgi?id=27209

        Add WebSocket.idl in WebCore/websockets/.
        Add build systems only for GNUmakefile.am and WebCore.xcodeproj now.
        Other build systems will be updated once the code is functional.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebSocketConstructor.cpp: Added.
        * bindings/js/JSWebSocketConstructor.h: Added.
        * bindings/js/JSWebSocketCustom.cpp: Added.
        * websockets/WebSocket.cpp: Added.
        * websockets/WebSocket.h: Added.
        * websockets/WebSocket.idl: Added.

2009-08-06  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Style cleaning for WorkerContextExecutionProxy.
        https://bugs.webkit.org/show_bug.cgi?id=27997

        Cleanup WorkerContextExecutioonProxy related files to follow
        WebKit coding styles after all V8 binding codes are upstreamed.
        1) Lower-case the first letter of remaining functins in class
           WorkerContextExecutionProxy. Update the V8 code generator
           and all other references accordingly.
        2) Integrate getConstructor from WorkerContextExecutionProxy
           to V8DOMWrapper.
        3) Other misc changes, like removing trailing whitespaces and
           sorting the include files.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::execute):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructorForContext):
        (WebCore::V8DOMWrapper::convertToV8Object):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::~V8WorkerContextEventListener):
        (WebCore::V8WorkerContextEventListener::handleEvent):
        (WebCore::V8WorkerContextEventListener::reportError):
        (WebCore::V8WorkerContextEventListener::getReceiverObject):
        * bindings/v8/V8WorkerContextObjectEventListener.cpp:
        (WebCore::weakObjectEventListenerCallback):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::handleConsoleMessage):
        (WebCore::WorkerContextExecutionProxy::dispose):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::convertToV8Object):
        (WebCore::WorkerContextExecutionProxy::convertEventToV8Object):
        (WebCore::WorkerContextExecutionProxy::convertEventTargetToV8Object):
        (WebCore::WorkerContextExecutionProxy::convertWorkerContextToV8Object):
        (WebCore::WorkerContextExecutionProxy::toV8):
        (WebCore::WorkerContextExecutionProxy::forgetV8EventObject):
        (WebCore::WorkerContextExecutionProxy::removeEventListener):
        * bindings/v8/WorkerContextExecutionProxy.h:
        (WebCore::WorkerContextExecutionProxy::context):
        (WebCore::WorkerContextExecutionProxy::convertToV8Object):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-08-06  Darin Adler  <darin@apple.com>

        Fix Mac Leopard debug build.

        * platform/text/StringImpl.cpp:
        (WebCore::equalIgnoringCase): Removed meaningless assertion; an unsigned
        is always >= 0 and checking causes a warning in the newer versions of gcc.

2009-08-06  Adam Barth  <abarth@webkit.org>

        Unreview rollout.

        Revert 46840 because it broke the reliability tests.

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):

2009-08-06  Adam Barth  <abarth@webkit.org>

        Unreviewed rollout.

        Revert 46840 in preparation to revert 46838, which broke the reliability tests.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::updateDocumentWrapperCache):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::mainWorldContext):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::context):

2009-08-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: move style-related utilities into InjectedScript.

        http://bugs.webkit.org/show_bug.cgi?id=27939

        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.prototype.isPropertyImplicit):
        (WebInspector.CSSStyleDeclaration.prototype.styleTextWithShorthands):
        (WebInspector.CSSStyleDeclaration.prototype.getLonghandProperties):
        (WebInspector.CSSStyleDeclaration.prototype.getShorthandPriority):
        * inspector/front-end/InjectedScript.js:
        (InjectedScript.applyStyleText):
        (InjectedScript.toggleStyleEnabled):
        (InjectedScript._serializeStyle):
        (InjectedScript._getUniqueStyleProperties):
        (InjectedScript._getLonghandProperties):
        (InjectedScript._getShorthandPriority):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._update):
        (WebInspector.StylePropertiesSection.prototype.isPropertyOverloaded):
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertyTreeElement.prototype.get priority):
        (WebInspector.StylePropertyTreeElement.prototype.get value):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/utilities.js:

2009-08-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed build fix, add #ifdef guards around
        inclusions of shared worker specific files.

        * bindings/js/JSEventTarget.cpp:
        * bindings/js/JSWorkerContextBase.cpp:
        * bindings/js/WorkerScriptController.cpp:

2009-08-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        cssgrammar.cpp fails to compile with RVCT compiler
        https://bugs.webkit.org/show_bug.cgi?id=27952

        * css/CSSGrammar.y: Do not convert to String to get rid of the stray
        memory allocation 

        * platform/text/StringImpl.cpp:
        (WebCore::equalIgnoringCase):
        * platform/text/StringImpl.h: 
        (WebCore::equalIgnoringCase): Add charactersEqualIgnoringCase
          function that works with a character pointer and length

2009-08-06  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Created first working implementation of SharedWorkers (execution only, no sharing).
        https://bugs.webkit.org/show_bug.cgi?id=27927

        Added initial implementations of SharedWorkerThread and SharedWorkerContext.
        No v8 bindings yet.

        * DerivedSources.cpp:
        Added shared worker files.
        * DerivedSources.make:
        Added shared worker files.
        * GNUmakefile.am:
        Added shared worker files.
        * WebCore.gypi:
        Added shared worker files.
        * WebCore.pro:
        Added shared worker files.
        * WebCore.vcproj/WebCore.vcproj:
        Added shared worker files.
        * WebCore.xcodeproj/project.pbxproj:
        Added shared worker files.
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        Added code to convert from EventTarget to correct JS class.
        (WebCore::toEventTarget):
        Added code to cast from JS object to appropriate EventTarget impl class.
        * bindings/js/JSSharedWorkerConstructor.cpp:
        (WebCore::JSSharedWorkerConstructor::JSSharedWorkerConstructor):
        (WebCore::constructSharedWorker):
        Tweaked the constructor code to pass in the lexical global object like normal workers.
        * bindings/js/JSSharedWorkerContextCustom.cpp: Added.
        (WebCore::JSSharedWorkerContext::mark):
        Custom marking of the onconnect handler.
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::toJSSharedWorkerContext):
        (WebCore::toJSWorkerContext):
        Added proper conversion to the correct WorkerContext derived class.
        * bindings/js/JSWorkerContextBase.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        Updated WorkerScriptController to create the correct type of binding object (JSSharedWorkerContext vs JSDedicatedWorkerContext)
        * bindings/scripts/CodeGeneratorV8.pm:
        Added support for SharedWorkerContext.
        * bindings/v8/DOMObjectsInclude.h:
        Added shared worker bindings files.
        * dom/EventNames.h:
        Added connect event.
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toSharedWorkerContext):
        Added API for casting to new derived class (SharedWorkerContext).
        * dom/EventTarget.h:
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::resolveURL):
        Moved code that resolves/validates URLs to base class so it can be shared between dedicated/shared workers.
        * workers/AbstractWorker.h:
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::logException):
        Refactored exception handling code - moved onerror handling to base class.
        * workers/DedicatedWorkerContext.h:
        (WebCore::DedicatedWorkerContext::isDedicatedWorkerContext):
        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker):
        Changed constructor to fire up worker thread.
        * workers/SharedWorker.h:
        * workers/SharedWorkerContext.cpp: Added.
        (WebCore::SharedWorkerContext::SharedWorkerContext):
        (WebCore::SharedWorkerContext::~SharedWorkerContext):
        (WebCore::SharedWorkerContext::logException):
        (WebCore::SharedWorkerContext::addMessage):
        Placeholder methods until we add support for sending exceptions/messages to console.
        (WebCore::SharedWorkerContext::dispatchConnect):
        (WebCore::SharedWorkerContext::thread):
        * workers/SharedWorkerContext.h: Added.
        (WebCore::SharedWorkerContext::create):
        (WebCore::SharedWorkerContext::isSharedWorkerContext):
        (WebCore::SharedWorkerContext::toSharedWorkerContext):
        (WebCore::SharedWorkerContext::setOnconnect):
        (WebCore::SharedWorkerContext::onconnect):
        (WebCore::SharedWorkerContext::name):
        * workers/SharedWorkerContext.idl: Added.
        * workers/SharedWorkerRepository.h: Added.
        (WebCore::SharedWorkerRepository::~SharedWorkerRepository):
        * workers/DefaultSharedWorkerRepository.cpp: Added.
        Implementation of core singleton class that will be used to implement sharing.
        (WebCore::SharedWorkerProxy::setThread):
        Proxy object used to handle resource loading for a given shared worker.
        (WebCore::SharedWorkerProxy::postTaskToLoader):
        (WebCore::SharedWorkerProxy::postTaskForModeToWorkerContext):
        Placeholder routines until we implement loading.
        (WebCore::SharedWorkerConnectTask::create):
        Creates a task to fire off a connect event on the worker thread.
        (WebCore::SharedWorkerConnectTask::SharedWorkerConnectTask):
        (WebCore::SharedWorkerConnectTask::performTask):
        (WebCore::SharedWorkerLoader::SharedWorkerLoader):
        Added helper object to load the initial script for the worker.
        (WebCore::SharedWorkerLoader::load):
        (WebCore::SharedWorkerLoader::notifyFinished):
        (WebCore::SharedWorkerRepository::instance):
        (WebCore::DefaultSharedWorkerRepository::instance):
        (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded):
        Fires off the worker thread once the script is loaded.
        (WebCore::SharedWorkerRepository::connect):
        (WebCore::DefaultSharedWorkerRepository::DefaultSharedWorkerRepository):
        (WebCore::DefaultSharedWorkerRepository::~DefaultSharedWorkerRepository):
        * workers/DefaultSharedWorkerRepository.h: Added.
        * workers/SharedWorkerThread.cpp: Added.
        (WebCore::SharedWorkerThread::create):
        (WebCore::SharedWorkerThread::SharedWorkerThread):
        (WebCore::SharedWorkerThread::~SharedWorkerThread):
        (WebCore::SharedWorkerThread::createWorkerContext):
        * workers/SharedWorkerThread.h: Added.
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::isSharedWorkerContext):
        (WebCore::WorkerContext::isDedicatedWorkerContext):
        Added APIs to determine the type of a given context.

2009-08-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

        Added ENABLE_3D_CANVAS flag to build, default to off

        * Configurations/FeatureDefines.xcconfig:

2009-08-06  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] windowsKeyCodeForKeyEvent fix

        Fix windowsKeyCodeForKeyEvent to determine wheter the event comes from the keypad.

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2009-08-06  George Staikos  <george.staikos@torchmobile.com>

        Rubber-stamped by Ariya Hidayat.

        Remove the dead wince/ directory that should never have gone in.

        * svg/graphics/wince: Removed.
        * svg/graphics/wince/SVGResourceFilterWince.cpp: Removed.

2009-08-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Extract style editing into a separate file that is
        going to be loaded in page context.

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

        * inspector/front-end/InjectedScript.js: Added.
        (InjectedScript.applyStyleText):
        (InjectedScript.setStyleText):
        (InjectedScript.toggleStyleEnabled):
        (InjectedScript.setStyleRule):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted.callback):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertyTreeElement.prototype.):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2009-08-06  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Remove bug-bait V8Proxy::context()
        https://bugs.webkit.org/show_bug.cgi?id=27826

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::updateDocumentWrapperCache):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::mainWorldContext):
        * bindings/v8/V8Proxy.h:

2009-08-06  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix the Chromium Linux build.  This function is
        not used.

        * bindings/v8/OwnHandle.h:

2009-08-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [V8] Teach ScheduledAction::execute about isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=27703

        We now save a weak handle to the original context.  We use that handle
        to call the timeout in the right context / world.

        Tests: http/tests/security/isolatedWorld/window-setTimeout-function.html
               http/tests/security/isolatedWorld/window-setTimeout-string.html

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScheduledAction.h:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):

2009-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Revert http://trac.webkit.org/changeset/46821, which was
        landed to supplement http://trac.webkit.org/changeset/46816, but
        now that the latter is reverted, the former needs the same.

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-08-05  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Color is only reported in rgb() format; should toggle between rgb() and hex
        https://bugs.webkit.org/show_bug.cgi?id=13516

          New Class to Parse and Change Between Color Representations:

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

          Representations of Colors in Raw Form. (May be Lazy Loaded):

        (WebInspector.Color.prototype.get shorthex):
        (WebInspector.Color.prototype.get hex):
        (WebInspector.Color.prototype.set hex):
        (WebInspector.Color.prototype.get rgb):
        (WebInspector.Color.prototype.set rgb):
        (WebInspector.Color.prototype.get hsl):
        (WebInspector.Color.prototype.set hsl):
        (WebInspector.Color.prototype.get nickname):
        (WebInspector.Color.prototype.set nickname):
        (WebInspector.Color.prototype.get rgba):
        (WebInspector.Color.prototype.set rgba):
        (WebInspector.Color.prototype.get hsla):
        (WebInspector.Color.prototype.set hsla):

          Helpers and Standard String Representations:

        (WebInspector.Color.prototype.hasShortHex):
        (WebInspector.Color.prototype.toRgb):
        (WebInspector.Color.prototype.toHsl):
        (WebInspector.Color.prototype.toShortHex):
        (WebInspector.Color.prototype.toHex):
        (WebInspector.Color.prototype.toRgba):
        (WebInspector.Color.prototype.toHsla):
        (WebInspector.Color.prototype.toNickname):

          Conversion Functions to Determine Other Representations:
          My Sources for all algorithms and sample data:
          Wikipedia: http://en.wikipedia.org/wiki/HSV_color_space
          CSS Specification: http://www.w3.org/TR/css3-color/#hsla-color

        (WebInspector.Color.prototype.rgbToHex):
        (WebInspector.Color.prototype.hexToRgb):
        (WebInspector.Color.prototype.rgbToHsl):
        (WebInspector.Color.prototype.hslToRgb.hueToRgb):
        (WebInspector.Color.prototype.hslToRgb):
        (WebInspector.Color.prototype.rgbaToHsla):
        (WebInspector.Color.prototype.hslaToRgba):

          Called from the constructor, attempts to parse and will throw an error
          if it cannot parse.  If simple then the "hex" value is guarenteed.
          If advanced then both the "rgba" and "hsla" are guarenteed.  If it is
          a nickname in any way (e.g. "transparent", "black") then this is
          guarenteed to be set as well.

        (WebInspector.Color.prototype.parse):

          Clicking on the swatch will rotate through Color Representations.
            Simple:   rgb -> hsl -> nickname? -> shorthex? -> hex -> (loop around)
            Advanced: rgba -> hsla -> nickname? -> (loop around)

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.value.):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle):

          Load Color.js:

        * inspector/front-end/inspector.html:

2009-08-05  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Dimitri Glazkov.

        Support setting event listeners for message ports in the worker process.

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

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::retrieve):
        (WebCore::WorkerContextExecutionProxy::EventTargetToV8Object):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-08-05  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dimitri Glazkov.

        http://bugs.webkit.org/show_bug.cgi?id=28022

        Minor fix for media code on chromium/skia.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintMediaSliderTrack):

2009-08-05  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Client side image maps did not handle zoom correctly.
        Client side image maps did not handle border and padding correctly.

        Test: fast/images/image-map-zoom.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint): Compute the values to pass in to the map
        element using the content box and the effective zoom.

2009-08-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=28027
        <rdar://7064428> Files with accents in names are submitted incorrectly due to use of
        precomposed Unicode

        * platform/network/mac/FormDataStreamMac.mm: (WebCore::setHTTPBody): Use getFileSize() from
        FileSystem.h instead of custom code for getting file size. This adds path normalization
        necessary with some file systems on Mac. This also loses a S_IFMT check, which didn't seem
        important anyway.

2009-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [V8] Include Media into V8 bindings.

        * bindings/v8/DOMObjectsInclude.h: Added Media include.
        * bindings/v8/DerivedSourcesAllInOne.cpp: Added V8Media include.
        * bindings/v8/V8Index.cpp: Added decl for V8Media.
        * bindings/v8/V8Index.h: Added V8Media include.

2009-08-04  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix Windows layout test crashes.

        PluginView::removeFromUnstartedListIfNecessary() would try to remove
        any unstarted PluginView from the Page's set of unstarted plug-ins,
        regardless of why the PluginView wasn't started. If we tried to start a
        plug-in, but it failed to start, we would hit an assertion in
        Page::removeUnstartedPlugin() that asserts that we would only modify the
        unstarted plug-ins set if we were not currently starting plug-ins.

        Fix this by having PluginView track whether it's waiting to be started,
        and to check this before trying to remove itself from the Page's
        unstarted plug-ins set.

        Reviewed by Darin Adler.

        * page/Page.cpp:
        (WebCore::Page::removeUnstartedPlugin):
        Assert that the passed PluginView is in the unstarted set.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        Set that we are not waiting to be started.
        (WebCore::PluginView::startOrAddtoUnstartedList):
        Set that we are waiting to be started.
        (WebCore::PluginView::removeFromUnstartedListIfNecessary):
        Check not whether we are started, but whether we are waiting to be
        started.
        (WebCore::PluginView::PluginView):

        * plugins/PluginView.h:

2009-08-05  Jeremy Orlow  <jorlow@chromium.org>

       Fix DOM Storage memory leak
       https://bugs.webkit.org/show_bug.cgi?id=28029

       Forgot to use adoptRef in one place.  This caused the = operator to
       increment the ref count when it shouldn't have, so StorageAreaImpl's were
       never freed.

        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::storageArea):

2009-08-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        [Chromium] Let CodeGeneratorV8.pm know that Media is ref-counted.

        * bindings/scripts/CodeGeneratorV8.pm: Added Media check to IsRefPtrType.

2009-08-05  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        Last patch. Makes all the casts of RenderObject use checked
        casts instead of using static_cast directly.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::visibleChildren):
        (WebCore::AccessibilityListBox::doAccessibilityHitTest):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::elementRect):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::titleUIElement):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySliderThumb::elementRect):
        * dom/InputElement.cpp:
        (WebCore::InputElement::updatePlaceholderVisibility):
        * dom/SelectElement.cpp:
        (WebCore::SelectElement::scrollToSelection):
        (WebCore::SelectElement::recalcStyle):
        (WebCore::SelectElement::setRecalcListItems):
        (WebCore::SelectElement::menuListDefaultEventHandler):
        (WebCore::SelectElement::listBoxDefaultEventHandler):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::renderWidgetForJSBindings):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::attach):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::defaultEventHandler):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        (WebCore::HTMLInputElement::addSearchResult):
        (WebCore::HTMLInputElement::onSearch):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::parseMappedAttribute):
        (WebCore::HTMLLIElement::attach):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged):
        (WebCore::HTMLMediaElement::mediaPlayerSizeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerRenderingCanBeAccelerated):
        (WebCore::HTMLMediaElement::mediaPlayerGraphicsLayer):
        (WebCore::HTMLMediaElement::defaultEventHandler):
        (WebCore::HTMLMediaElement::finishParsingChildren):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::parseMappedAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultEventHandler):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::capsLockStateMayHaveChanged):
        * page/Frame.cpp:
        (WebCore::Frame::ownerRenderer):
        * page/FrameView.cpp:
        (WebCore::FrameView::detachCustomScrollbars):
        * page/wince/FrameWince.cpp:
        (WebCore::computePageRectsForFrame):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::computeEdgeInfo):
        (WebCore::RenderFrameSet::setIsResizing):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentsBox):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo):
        * rendering/RenderListItem.cpp:
        (WebCore::previousListItem):
        (WebCore::RenderListItem::explicitValueChanged):
        * rendering/RenderObject.cpp:
        (WebCore::updateListMarkerNumbers):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::updateListMarkerNumbers):
        (WebCore::invalidateCountersInContainer):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::minimumThumbLength):
        (WebCore::RenderScrollbarTheme::backButtonRect):
        (WebCore::RenderScrollbarTheme::forwardButtonRect):
        (WebCore::RenderScrollbarTheme::trackRect):
        (WebCore::RenderScrollbarTheme::constrainTrackRectToTrackPieces):
        (WebCore::RenderScrollbarTheme::paintScrollbarBackground):
        (WebCore::RenderScrollbarTheme::paintTrackBackground):
        (WebCore::RenderScrollbarTheme::paintTrackPiece):
        (WebCore::RenderScrollbarTheme::paintButton):
        (WebCore::RenderScrollbarTheme::paintThumb):
        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::defaultEventHandler):
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintSliderThumb):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::determineSliderThumbState):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSliderThumb):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintSliderThumb):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::determineSliderThumbState):
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGCharacterLayoutInfo::addLayoutInformation):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::findSVGRootObject):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::nodeAtPoint):
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::attach):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::canvasResource):
        * svg/SVGTextContentElement.cpp:
        (WebCore::rootInlineBoxForTextContentElement):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):
        Use checked casts.

        * rendering/RenderApplet.h:
        * rendering/RenderCounter.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderPart.h:
        * rendering/RenderPartObject.h:
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGTextPath.h:
        * rendering/RenderSVGViewportContainer.h:
        * rendering/RenderScrollbar.h:
        * rendering/RenderSlider.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderVideo.h:
        Added a checked cast. Also made most members protected or private.

        * rendering/RenderBlock.h:
        * rendering/RenderInline.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGText.h:
        * rendering/RenderTextControl.h:
        Made most members protected or private.

        * rendering/RenderInline.cpp:
        * rendering/RenderSVGContainer.cpp:
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGImage.cpp:
        * rendering/RenderSVGRoot.cpp:
        Removed unneeded destructor.

        * rendering/RenderSVGHiddenContainer.h:
        Removed unneeded virtual function overrides that did the same as
        the default and base class.

        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::paint): Updated to use m_viewport
        directly instead of using a function call.
        (WebCore::RenderSVGViewportContainer::applyViewportClip): Ditto.
        (WebCore::RenderSVGViewportContainer::viewportTransform): Ditto.
        (WebCore::RenderSVGViewportContainer::localToParentTransform): Ditto.
        (WebCore::RenderSVGViewportContainer::pointIsInsideViewportClip): Ditto.

        * rendering/RenderScrollbar.cpp:
        (WebCore::pseudoForScrollbarPart): Changed switch statement to use cases for
        all values instead of using a default case.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<): Removed dependency on casting to types that don't
        have any public members we need to get at. Instead, use function names to
        identify the type rather than doing so much overloading. Changed to use
        checked casts.
        (WebCore::write): Ditto.

        * rendering/SVGRenderSupport.cpp:
        (WebCore::renderSubtreeToImage): Changed to use a checked cast and also
        added a comment about the fact that the code does not do sufficient type
        checking before doing the cast.

        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeRenderSVGTextBox): Renamed this from operator<<.
        (WebCore::writeSVGInlineTextBoxes): Renamed this from writeSVGInlineText.
        (WebCore::writeSVGText): Renamed this from write.
        (WebCore::writeSVGInlineText): Ditto.
        (WebCore::writeSVGImage): Ditto.
        * rendering/SVGRenderTreeAsText.h: Updated for name changes. Removed
        unneeded default arguments.

2009-08-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=27851
        Fix a pair of compiler warnings on the GTK Linux buildbot.

        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::processFileHeader): Don't use multi-character constants, they're not portable.
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::setSize): Simpler code that also doesn't compare signed with unsigned.

2009-08-05  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26460
        Return multiple icon entries from the ICO decoder as separate frames,
        sorted by decreasing quality (much like the CG ICO decoder does).

        As a result of this change, we can eliminate the Skia-specific setData()
        hack that the Chromium port used to select the desired icon size -- now
        callers can just enumerate the frames and ask for the data from the one
        they like.
        
        Under the hood, the ICO decoder now keeps vectors for a number of things
        (including directory entries and image decoders) where it used to have
        single members.  However, callers (that I have seen) will only request
        one frame from the icon, so practically there aren't going to be lots of
        instantiated image decoders.

        * platform/graphics/ImageSource.h: Move |m_decoder| back to private now that Skia no longer needs to access it.
        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::createDecoder): Remove size argument from ICO decoder instantiation.
        * platform/graphics/skia/ImageSourceSkia.cpp:
        (WebCore::createDecoder): Remove size argument from ICO decoder instantiation.
        (WebCore::ImageSource::setData): Remove function to ask for a particular icon size.
        * platform/graphics/skia/ImageSourceSkia.h: Removed.
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::createDecoder): Remove size argument from ICO decoder instantiation.
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::~ICOImageDecoder): Delete all instantiated per-frame decoders.
        (WebCore::ICOImageDecoder::setData): Send data to all instantiated per-frame decoders.
        (WebCore::ICOImageDecoder::isSizeAvailable): Use size from icon directory instead of PNG decoder (if applicable) so we can report it without decoding the PNG frames.
        (WebCore::ICOImageDecoder::size): Report frame-specific size if BMP decoder is calling.  Otherwise, use size from icon directory instead of PNG decoder (if applicable).
        (WebCore::ICOImageDecoder::frameSizeAtIndex): Implement.
        (WebCore::ICOImageDecoder::setSize): Sanity check value if BMP decoder is calling.
        (WebCore::ICOImageDecoder::frameCount): Implement.
        (WebCore::ICOImageDecoder::frameBufferAtIndex): Sanity check size for PNG frames.
        (WebCore::ICOImageDecoder::compareEntries): Add utility function for sorting entries.
        (WebCore::ICOImageDecoder::setDataForPNGDecoderAtIndex): Factor out utility function for passing correct data blob to a PNG decoder.
        (WebCore::ICOImageDecoder::decodeWithCheckForDataEnded): Split decode() into two pieces.
        (WebCore::ICOImageDecoder::decodeDirectory): The first part of the old decode().
        (WebCore::ICOImageDecoder::decodeAtIndex): The second part of the old decode(), split off so we avoid decoding an entry until it's requested.
        (WebCore::ICOImageDecoder::processDirectory): Add resizing of internal data structures based on directory contents.
        (WebCore::ICOImageDecoder::processDirectoryEntries): Sort entries by quality.
        (WebCore::ICOImageDecoder::imageTypeAtIndex): Return type to caller instead of setting a member.
        * platform/image-decoders/ico/ICOImageDecoder.h:

2009-08-05  Szabo Carol  <carol.szabo@nokia.com>

        Reviewed by Darin Adler.

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

        Test: fast/forms/select-reset-multiple-selections-4-single-selection.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::reset):
           Added HTML 4.01 compliant handling of broken webpages that
           specify more than one selected option for single selection SELECT
           element, in a manner that emulates Firefox and is similar to IE 7


2009-08-05  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        WebCore.pro bugfix

        Fix the gperf lines to properly include the string.h header at compilation with gperf version 3.0.3 and newer.

        * WebCore.pro:

2009-08-05  Chris Fleizach  <cfleizach@apple.com>

        Fix Tiger build breakage.

        * accessibility/mac/AccessibilityObjectWrapper.mm:

2009-08-04  Simon Hausmann  <hausmann@webkit.org>

        Prospective build fix for Qt build bot: Fix dependency of HTMLNames.cpp
        to both source files, HTMLTagNames.in and HTMLAttributeNames.in

        * WebCore.pro:

2009-08-04  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adele Peterson.

        Keypress should exit from pan scrolling mode.
        https://bugs.webkit.org/show_bug.cgi?id=28005

        Change the logic from only exiting pan scrolling on escape to exiting on any key press,
        making it easier for users to back out of an accidental pan scroll.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        
2009-08-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Simon Fraser.

        REGRESSION (r45064): Drop caret remains in text control after the mouse exits
        https://bugs.webkit.org/show_bug.cgi?id=26787

        Add back missing dragController()->clear() call.

        * manual-tests/drag-caret.html: Added.
        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):

2009-08-04  Chris Fleizach  <cfleizach@apple.com>

        Bug 27994 - WAI-ARIA: aria-valuetext needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=27994

        Forgot to commit attribute names.

        * html/HTMLAttributeNames.in:

2009-08-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27994 - WAI-ARIA: aria-valuetext needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=27994

        Test: platform/mac/accessibility/aria-valuetext.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::valueDescription):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::valueDescription):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:

2009-08-04  Michael Nordman  <michaeln@google.com>

        Reviewed by Alexey Proskuryakov.

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

        No new features, no new tests. Existing layout tests pass.

        * WebCore.base.exp:

        Export AppliationCacheGroup::storeCopyOfCache

        * WebCore.xcodeproj/project.pbxproj:

        Restore DOMApplicationCache.h and ApplicationCacheHost.h to 'project' headers
        instead of 'private' headers since they're no longer in the DocumentLoader.h
        include graph.

        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedIntoDocument):

        Reinstate the test for manifest.isNull instead of .isEmtpty().
        Added a FIXME to revisit once the spec gets clarified.
        
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::mainReceivedError):
        (WebCore::DocumentLoader::detachFromFrame):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::applicationCacheHost):

        ApplicationCacheHost is held in an OwnPtr<> by DocumentLoader. This was done
        for compile time friendliness, it results in a smaller include graph for files
        dependent on DocumentLoader.h.

        * loader/FrameLoader.cpp:
        * loader/MainResourceLoader.cpp:
        * loader/ResourceLoader.cpp:

        Cleanup ussage of ENABLE(xxx) around includes, generally remove those guards.
        This was done for readability at the include site. The included files contain appropriate guards,
        so they're not needed at the include site.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::manifestNotFound):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::CallCacheListenerTask::create):
        (WebCore::CallCacheListenerTask::performTask):
        (WebCore::CallCacheListenerTask::CallCacheListenerTask):
        (WebCore::ApplicationCacheGroup::postListenerTask):
        * loader/appcache/ApplicationCacheGroup.h:

        Use ApplicationCachHost defined constants, no longer depends on DOMApplicationCache.

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::ApplicationCacheHost):
        (WebCore::ApplicationCacheHost::setDOMApplicationCache):
        (WebCore::ApplicationCacheHost::notifyEventListener):
        (WebCore::ApplicationCacheHost::status):
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::storeCopyOfCache):
        * loader/appcache/ApplicationCacheStorage.h:

        Merge recently added transferApplicationCache and pre-existing storeCopyOfCache methods.

        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::status):
        (WebCore::DOMApplicationCache::addEventListener):
        (WebCore::DOMApplicationCache::removeEventListener):
        (WebCore::DOMApplicationCache::callListener):
        (WebCore::DOMApplicationCache::toEventType):
        (WebCore::DOMApplicationCache::toEventID):
        * loader/appcache/DOMApplicationCache.h:
        (WebCore::DOMApplicationCache::setAttributeEventListener):
        (WebCore::DOMApplicationCache::getAttributeEventListener):
        (WebCore::DOMApplicationCache::clearAttributeEventListener):
        (WebCore::DOMApplicationCache::callEventListener):
        (WebCore::DOMApplicationCache::setOnchecking):
        (WebCore::DOMApplicationCache::onchecking):
        (WebCore::DOMApplicationCache::setOnerror):
        (WebCore::DOMApplicationCache::onerror):
        (WebCore::DOMApplicationCache::setOnnoupdate):
        (WebCore::DOMApplicationCache::onnoupdate):
        (WebCore::DOMApplicationCache::setOndownloading):
        (WebCore::DOMApplicationCache::ondownloading):
        (WebCore::DOMApplicationCache::setOnprogress):
        (WebCore::DOMApplicationCache::onprogress):
        (WebCore::DOMApplicationCache::setOnupdateready):
        (WebCore::DOMApplicationCache::onupdateready):
        (WebCore::DOMApplicationCache::setOncached):
        (WebCore::DOMApplicationCache::oncached):
        (WebCore::DOMApplicationCache::setOnobsolete):
        (WebCore::DOMApplicationCache::onobsolete):

        Use ApplicationCachHost defined constants for Status and EventIDs.

2009-08-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Revert r46421 and r46769, which appear to have totally hosed the v8 bindings.

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

        * bindings/v8/V8AbstractEventListener.cpp: Revert r46421.
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/custom/V8DOMWindowCustom.cpp: Revert r46769.
        (WebCore::ACCESSOR_GETTER):

2009-08-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27993 - AXSliders are missing required attributes and actions
        https://bugs.webkit.org/show_bug.cgi?id=27993

        Expose appropriate actions and attributes for sliders.

        Test: platform/mac/accessibility/slider-supports-actions.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::orientation):
        * accessibility/AccessibilityObject.h:
        (WebCore::):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::orientation):
        * accessibility/AccessibilitySlider.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityActionNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2009-08-04  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Fix an assert in WebCoreStringResource that causes worker script
        evaluation failed.
        https://bugs.webkit.org/show_bug.cgi?id=27996

        The fix is to check for the same thread, instead of the main thread.
        This is because Chromium's workers use v8 in a single thread that is
        not the main thread.

        * bindings/v8/V8Binding.cpp:
        (WebCore::WebCoreStringResource::WebCoreStringResource):
        (WebCore::WebCoreStringResource::~WebCoreStringResource):
        (WebCore::WebCoreStringResource::atomicString):

2009-08-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Add support for transitions/animations of text-indent.

        Test: transitions/text-indent-transition.html

        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap):

2009-08-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Add support for transitions of min- and max-width, and min- and max-height.
        https://bugs.webkit.org/show_bug.cgi?id=27990

        Test: transitions/min-max-width-height-transitions.html

        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap):

2009-08-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27964 - WAI-ARIA: radio button does not determine its label from text content
        https://bugs.webkit.org/show_bug.cgi?id=27964

        ARIA radio buttons also need to use the text inside of them, like buttons and other roles.
        Also fixed an issue where an extra space was being appended to some ARIA labels.

        Test: platform/mac/accessibility/aria-radiobutton-text.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::ariaAccessibilityName):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaAccessibilityName):
        (WebCore::AccessibilityRenderObject::ariaLabeledByAttribute):
        (WebCore::AccessibilityRenderObject::title):
        (WebCore::AccessibilityRenderObject::ariaDescribedByAttribute):
        * accessibility/AccessibilityRenderObject.h:

2009-08-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Missed a place that expects window.event to be hidden when it shouldn't be.

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

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::ACCESSOR_GETTER): window.event is no longer hidden.

2009-08-03  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Jon Honeycutt.

        Bug 27958 - WAI-ARIA: Implement 'aria-required' attribute.
        https://bugs.webkit.org/show_bug.cgi?id=27958

        Test: platform/mac/accessibility/aria-required.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isRequired):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isRequired):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:

2009-08-04  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Add QWebPluginDatabase API to the Qt API.
        
        https://bugs.webkit.org/show_bug.cgi?id=27651

        * WebCore.pro:

2009-08-04  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Adam Treat.

        [Qt] PlusDarker is not supported. Fall back to CompositionMode_Darken
        (as it is the closest match) instead of CompositionMode_SourceOver.

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

2009-08-04  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by Adam Barth.

        [v8] Fix crash when converting empty v8 string to atomic webkit string.
        https://bugs.webkit.org/show_bug.cgi?id=27975

        collection-null-like-arguments.html tests for this.

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8StringToAtomicWebCoreString):

2009-08-04  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        selectionHasStyle needs clean up to fix Bug 27858
        https://bugs.webkit.org/show_bug.cgi?id=27865

        This patch cleans up selectionStartHasStyle and selectionHasStyle.
        No test is added because the patch does not change any behavior.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::getPropertiesNotInComputedStyle): Used in triStateOfStyleInComputedStyle but will be used here as well
        * editing/ApplyStyleCommand.h: Added the prototype of getPropertiesNotInComputedStyle
        * editing/Editor.cpp:
        (WebCore::triStateOfStyleInComputedStyle): Determines if the specified style is present in the specified computed style.
        (WebCore::Editor::selectionStartHasStyle): Uses triStateOfStyleInComputedStyle
        (WebCore::Editor::selectionHasStyle): Uses triStateOfStyleInComputedStyle instead of updateState

2009-08-03  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by David Levin.

        Fix MessagePort construction in worker process.  Also make the other object constructions match this.

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

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertToV8Object):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::ToV8Object):

2009-08-03  Christian Plesner Hansen  <christian.plesner.hansen@gmail.com>

        Reviewed by David Levin.

        [V8] Cache atomic strings in externalized v8 strings
        https://bugs.webkit.org/show_bug.cgi?id=27762

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp:
        (WebCore::WebCoreStringResource::WebCoreStringResource):
        (WebCore::WebCoreStringResource::~WebCoreStringResource):
        (WebCore::WebCoreStringResource::data):
        (WebCore::WebCoreStringResource::length):
        (WebCore::WebCoreStringResource::webcoreString):
        (WebCore::WebCoreStringResource::atomicString):
        (WebCore::WebCoreStringResource::toStringResource):
        (WebCore::v8StringToWebCoreString):
        (WebCore::v8StringToAtomicWebCoreString):
        (WebCore::v8ValueToWebCoreString):
        (WebCore::v8ValueToAtomicWebCoreString):
        * bindings/v8/V8Binding.h:
        (WebCore::):
        * dom/Document.idl:

2009-08-03  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: DOM Storage Live Updating Should Not Affect Tabbing
        https://bugs.webkit.org/show_bug.cgi?id=27957

        * inspector/front-end/DOMStorageDataGrid.js:
        (WebInspector.DOMStorageDataGrid.prototype._startEditingColumnOfDataGridNode): disable storage event listener
        (WebInspector.DOMStorageDataGrid.prototype._startEditing): disable storage event listener
        (WebInspector.DOMStorageDataGrid.prototype._editingCancelled): enable storage event listener
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype._unregisterStorageEventListener): quick return if no listener

2009-08-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Consolidate common gcc flags to WebKit.pri
        https://bugs.webkit.org/show_bug.cgi?id=27934

        * WebCore.pro:

2009-08-03  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Chromium code sometimes isn't sandboxed and needs to access the FS.
        https://bugs.webkit.org/show_bug.cgi?id=27954

        These changes are the WebKit side of http://codereview.chromium.org/159778 which
        aims to make LocalStorage persistent.

        This change runs all FileSystem routines through the ChromiumBridge so that
        WebKitClients can handle them if they choose to.  For now, the only such client
        will be the one running in the browser process.

        It also adds a method called sandboxEnabled to the Chromium bridge so that the
        SQLite file system code can shift its behavior depending on whether we're
        inside a sandbox or not.

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileModificationTime):
        (WebCore::directoryName):
        (WebCore::pathByAppendingComponent):
        (WebCore::makeAllDirectories):
        (WebCore::fileExists):
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp:
        (WebCore::SQLiteFileSystem::openDatabase):
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp:
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):

2009-08-03  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        [chromium] Implement media slider for chromium
        https://bugs.webkit.org/show_bug.cgi?id=27859

        Implemented the media slider for chromium port. The implementation
        is using Skia for drawing the thumb and buffered region instead of
        using any native system controls so different platforms would have
        the same look and feel.

        No new tests because this is covered by existing tests.

        * css/mediaControlsChromium.css:
        * rendering/RenderThemeChromiumSkia.cpp:
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeChromiumWin.cpp:

2009-07-27  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26460
        Plumbing and cleanup in advance of returning multiple frames from the
        ICOImageDecoder:
        * Make ImageDecoder::frameCount() return a size_t like
          ImageSource::frameCount() and BitmapImage::frameCount() already do.
        * Add ImageDecoder::frameSizeAtIndex() alongside size(), to report the
          size of a particular frame.  Hook all the
          ImageSource::frameSizeAtIndex() implementations to this.  No
          ImageDecoder implements this yet; that will come in my next change.

        * platform/graphics/cairo/ImageSourceCairo.cpp:
        (WebCore::ImageSource::frameSizeAtIndex): Hook to ImageDecoder function.
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::frameCount): returns size_t.
        * platform/graphics/qt/ImageDecoderQt.h: frameCount() returns size_t.
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::frameSizeAtIndex): Hook to ImageDecoder function.
        * platform/graphics/skia/ImageSourceSkia.cpp:
        (WebCore::ImageSource::frameSizeAtIndex): Hook to ImageDecoder function.
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::drawFrameMatchingSourceSize): frameCount() returns size_t.
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::drawFrameMatchingSourceSize): frameCount() returns size_t.
        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::frameSizeAtIndex): Hook to ImageDecoder function.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::size): Clarify comment.
        (WebCore::ImageDecoder::frameSizeAtIndex): Add.
        (WebCore::ImageDecoder::frameCount): returns size_t.
        (WebCore::ImageDecoder::frameBufferAtIndex): Remove unneeded param name.
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::frameCount): returns size_t.
        (WebCore::GIFImageDecoder::frameBufferAtIndex): frameCount() returns size_t.
        * platform/image-decoders/gif/GIFImageDecoder.h: frameCount() returns size_t.

2009-08-03  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Fix a bug that could cause an ASSERT to fail incorrectly, leading
        to a renderer crash in Chromium.

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

        All tests in storage/ pass.

        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::~SQLiteTransaction):
        (WebCore::SQLiteTransaction::begin):

2009-08-03  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Based on work by Yael Aharon.

        Implement keyboard event forwarding for windowless plugins
        for the Qt port.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::setSharedXEventFields):
        (WebCore::setXKeyEventSpecificFields):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):

2009-08-03  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Make Bottom "Drawer" More Extensible To Support Other Views
        https://bugs.webkit.org/show_bug.cgi?id=27928

        * English.lproj/localizedStrings.js:

          "Show changes view", "Hide changes view", "Clear changes log", "%d style change", "%d style changes"

        * inspector/front-end/ChangesView.js: Added.
        (WebInspector.ChangesView):
        (WebInspector.ChangesView.prototype._clearButtonClicked):
        (WebInspector.ChangesView.prototype._toggleChangesButtonClicked):
        (WebInspector.ChangesView.prototype.attach):
        (WebInspector.ChangesView.prototype.show):
        (WebInspector.ChangesView.prototype.hide):

          To be a new view to show Changes made via the inspector.  DOM, CSS, or otherwise.

        * inspector/front-end/Console.js: Removed.

          Sliding View aspect moved to Drawer.js.  The "console" itself has moved to ConsoleView.js

        * inspector/front-end/ConsoleView.js: Added.

          Little has changed from its move from Console.js other then support for working with the Drawer.

        * inspector/front-end/Drawer.js: Added.
        (WebInspector.Drawer):
        (WebInspector.Drawer.prototype.get visibleView):
        (WebInspector.Drawer.prototype.set visibleView):
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):
        (WebInspector.Drawer.prototype.hide.animationFinished):
        (WebInspector.Drawer.prototype.hide):
        (WebInspector.Drawer.prototype._safelyRemoveChildren):
        (WebInspector.Drawer.prototype._startStatusBarDragging):
        (WebInspector.Drawer.prototype._statusBarDragging):
        (WebInspector.Drawer.prototype._endStatusBarDragging):

          Allow for multiple views inside the Sliding Drawer.

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.renameSelector):
        (WebInspector.ElementsPanel.prototype.addStyleChange):
        (WebInspector.ElementsPanel.prototype.removeStyleChange):
        (WebInspector.ElementsPanel.prototype.generateStylesheet):

          Starting work on the "Changes" Panel. The ability to generate a Stylesheet from Styles added via the Inspector.

        * inspector/front-end/Images/styleIcon.png: Added.

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.isInspectorStylesheet):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.makeNormal):
        (WebInspector.StylePropertyTreeElement.prototype):

          Interface with ElementsPanel for generating a Stylesheet of Changes.

        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css: Refactored to allow for multiple views in the drawer.
        * inspector/front-end/inspector.html: Refactored to allow for multiple views in the drawer.

        * inspector/front-end/inspector.js:
        (WebInspector.get styleChanges):
        (WebInspector.set styleChanges):
        (WebInspector._updateChangesCount):
        (WebInspector.loaded):
        (WebInspector.documentKeyDown):
        (WebInspector.showConsole):
        (WebInspector.showChanges):

          Support for the drawer and "styles changed icon" similar to the "errors and warnings" icons.

2009-08-03  Dean McNamee  <deanm@chromium.org>

        Reviewed by Adam Barth.

        Correct an assert on a PassRefPtr in the v8 svg bindings.
        https://bugs.webkit.org/show_bug.cgi?id=27951

        * bindings/v8/V8SVGPODTypeWrapper.h:
        (WebCore::V8SVGDynamicPODTypeWrapper::V8SVGDynamicPODTypeWrapper):

2009-08-03  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27748
        crash w/ stack overflow when same CSS file loaded repeatedly

        Fix crash caused by a stack overflow when repeatedly loading very large
        CSS files. CSSRuleData in CSSStyleSelector.h destroyed itself 
        recursively rather than iteratively.

        Test: fast/css/large-list-of-rules-crash.html

        * css/CSSStyleSelector.h:
        (WebCore::CSSRuleData::~CSSRuleData):
        (WebCore::CSSRuleDataList::~CSSRuleDataList):

2009-08-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Make the DRT APIs to pause transitions and animations work for accelerated animations
        <https://bugs.webkit.org/show_bug.cgi?id=27627>
        <rdar://problem/6442932>

        Fix the 'pauseAnimationAtTimeOnElementWithId' and 'pauseTransitionAtTimeOnElementWithId' APIs
        available to LayoutTests to work with accelerated animations and transitions. Done by sending
        the pause time down to the GraphicsLayer, and using it to stop time on the layer.
        
        I also added an assertion to check that the animation has actually started when we
        try to pause it, to check that the pause time we compute is valid. This revealed a number
        of tests that tried to pause before animations started, required some amount of test fixing.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::freezeAtTime):
        * page/animation/AnimationBase.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::pauseAnimationAtTime):
        (WebCore::CompositeAnimation::pauseTransitionAtTime):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::suspendAnimations):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::suspendAnimations):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::suspendAnimations):
        * rendering/RenderLayerBacking.h:

2009-08-03  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        Fix Chromium build by removing PluginView.h from Page.cpp.
        Chromium doesn't use PluginView and the pointer is never
        dereferenced so the header doesn't need to be included.
        https://bugs.webkit.org/show_bug.cgi?id=27946

        No new tests because this is a build fix.

        * page/Page.cpp:

2009-08-03  Eric Carlson  <eric.carlson@apple.com>

        One more build fix after https://bugs.webkit.org/show_bug.cgi?id=46720.

        Unreviewed.

        * WebCoreSources.bkl:

2009-08-03  Eric Carlson  <eric.carlson@apple.com>

        Build fix after https://bugs.webkit.org/show_bug.cgi?id=46720.

        Unreviewed.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2009-08-03  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27943: Need to implement ARIA role="radiogroup"
        https://bugs.webkit.org/show_bug.cgi?id=27943

        Test: platform/mac/accessibility/aria-radiogroup.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isRadioGroup):
        (WebCore::AccessibilityObject::selectedRadioButton):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::selectedRadioButton):
        (WebCore::RoleEntry::):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper roleDescription]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2009-08-03  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        HTMLInputElement is not controllable by assistive technologies
        https://bugs.webkit.org/show_bug.cgi?id=27941

        Test: accessibility/input-slider.html

        * WebCore.xcodeproj/project.pbxproj:
            Add AccessibilitySlider.cpp/.h

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
            Create AccessibilitySlider and AccessibilitySliderThumb.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::increment):
        (WebCore::AccessibilityObject::decrement):
            Add default, do nothing, base class methods.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::canSetFocusAttribute):
            Correct typo.

        * accessibility/AccessibilitySlider.cpp: Added.
        (WebCore::AccessibilitySlider::AccessibilitySlider):
        (WebCore::AccessibilitySlider::create):
        (WebCore::AccessibilitySlider::children):
        (WebCore::AccessibilitySlider::addChildren):
        (WebCore::AccessibilitySlider::getAttribute):
        (WebCore::AccessibilitySlider::valueForRange):
        (WebCore::AccessibilitySlider::maxValueForRange):
        (WebCore::AccessibilitySlider::minValueForRange):
        (WebCore::AccessibilitySlider::changeValue):
        (WebCore::AccessibilitySlider::setValue):
        (WebCore::AccessibilitySlider::increment):
        (WebCore::AccessibilitySlider::decrement):
        (WebCore::AccessibilitySlider::element):
        (WebCore::AccessibilitySliderThumb::AccessibilitySliderThumb):
        (WebCore::AccessibilitySliderThumb::create):
        (WebCore::AccessibilitySliderThumb::elementRect):
        (WebCore::AccessibilitySliderThumb::size):
        * accessibility/AccessibilitySlider.h: Added.
        (WebCore::AccessibilitySlider::~AccessibilitySlider):
        (WebCore::AccessibilitySlider::roleValue):
        (WebCore::AccessibilitySlider::accessibilityIsIgnored):
        (WebCore::AccessibilitySlider::isSlider):
        (WebCore::AccessibilitySlider::canSetValueAttribute):
        (WebCore::AccessibilitySliderThumb::~AccessibilitySliderThumb):
        (WebCore::AccessibilitySliderThumb::roleValue):
        (WebCore::AccessibilitySliderThumb::accessibilityIsIgnored):
        (WebCore::AccessibilitySliderThumb::setParentObject):
        (WebCore::AccessibilitySliderThumb::parentObject):

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (RoleEntry::):
            SliderThumbRole -> NSAccessibilityValueIndicatorRole
        (-[AccessibilityObjectWrapper roleDescription]):
            Return role description for NSAccessibilitySliderRole and NSAccessibilityValueIndicatorRole.
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
            Minor coding style correction.
        (-[AccessibilityObjectWrapper accessibilityPerformPressAction]):
            If attachement view handles press action, don't also call object wrapper.
        (-[AccessibilityObjectWrapper accessibilityPerformIncrementAction]):
            New, call object's increment() method.
        (-[AccessibilityObjectWrapper accessibilityPerformDecrementAction]):
            New, call object's decrement() method.
        (-[AccessibilityObjectWrapper accessibilityPerformAction:]):
            Respond to NSAccessibilityIncrementAction and NSAccessibilityDecrementAction.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::thumbRect):
            Factor logic out of layout so AccessibilitySliderThumb can get thumb location/size.
        (WebCore::RenderSlider::layout):
            Move code to thumbRect().
        * rendering/RenderSlider.h:

2009-08-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Build fix if Netscape plugin support is turned off
        https://bugs.webkit.org/show_bug.cgi?id=27940

        * plugins/PluginView.cpp:
        (WebCore::PluginView::stop): Do not call NPN_MemFree if NPAPI is
        disabled
        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::platformStart): Empty stub.

2009-07-31  Joe Mason  <joe.mason@torchmobile.com>

        Reviewed by George Staikos.

        WINCE port: LOAD_WITH_ALTERED_SEARCH_PATH param of LoadLibraryEx not supported on WINCE
        https://bugs.webkit.org/show_bug.cgi?id=27917

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load): use LoadLibrary instead of LoadLibraryEx

2009-08-02  Adam Barth  <abarth@webkit.org>
        Reviewed by Darin Adler.

        SVGElementInstance::scriptExecutionContext should call document() instead of scriptExecutionContext()

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

        There's no reason to pay for a virtual function call in this case.  We
        can just call document() directly because we know that element is a
        Node*.

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::scriptExecutionContext):

2009-08-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        JSNodeCustom should call document() instead of scriptExecutionContext()
        https://bugs.webkit.org/show_bug.cgi?id=27931

        We want to call document() because it's in inline function, instead of
        scriptExecutionContext() because it's a virtual function.  If we have a
        Node*, then we know that the virtual function will always return the
        document anyway.

        There are more instance of this bug, but I'd like to start with a small
        patch and work up.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::toJSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::addEventListener):
        (WebCore::JSNode::removeEventListener):

2009-08-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Anders Carlsson.

        Share implementation of PluginView::userAgent() and userAgentStatic()

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

        Differences to the original implementation are as follows:
        
            - The Win port used to return 0 for userAgentStatic, but now
              returns the quirk mode MozillaUserAgent as the other ports.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::userAgent):
        (WebCore::PluginView::userAgentStatic):
        * plugins/PluginViewNone.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

2009-07-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Anders Carlsson.

        Unregister plugin from PluginMainThreadScheduler if NPP_New fails
        
        https://bugs.webkit.org/show_bug.cgi?id=27706
        
        Since the plugin has not been started yet (m_isStarted is not set),
        calling stop() will not have any affect, so we manually unregister
        in start() before returning.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):

2009-07-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Anders Carlsson.

        Join the various versions of PluginView::stop() into one shared implementation

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

        The platform-dependent bits are now ifdef'ed in the shared implementation,
        using the XP_ defines (XP_WIN, XP_MACOSX, XP_UNIX) from npapi.h
        
        Differences to the original implementation are as follows:

            - The Qt port unregistered the plugin before calling NP_SetWindow
              with a 0 window handle. Now it's done after (similar to Win)

            - The GTK and Qt ports unregistered the plugin before clearing
              the m_npWindow.ws_info struct. Now it's done after.
              
            - The Win port constructed the DropAllLocks after unsubclassing
              the window. Now it's done before.
              
            - The Mac, Qt, and GTK ports did not pass a NPSavedData struct
              to NP_Destroy (like the Win port). Now all ports do.

            - The Win port did not call PluginView::setCurrentPluginView()
              before calling to NP-functions. Now it does.     

        * plugins/PluginView.cpp:
        * plugins/PluginViewNone.cpp:
        * plugins/gtk/PluginViewGtk.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginViewQt.cpp:
        * plugins/win/PluginViewWin.cpp:

2009-07-30  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: let me *edit* css styles in the web inspector.
        https://bugs.webkit.org/show_bug.cgi?id=27124

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel): added property stylesheet pointing to 1 stylesheet added to the page if needed
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update): handle blank sections
        (WebInspector.StylesSidebarPane.prototype.addBlankSection): blank section in the correct position
        (WebInspector.StylesSidebarPane.prototype.appropriateSelectorForNode): helper to get a nice selector for the selectd node
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype.expand):
        (WebInspector.StylePropertiesSection.prototype.isPropertyInherited):
        (WebInspector.StylePropertiesSection.prototype.isPropertyOverloaded):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.StylePropertiesSection.prototype._dblclickEmptySpace): easily create new properties
        (WebInspector.StylePropertiesSection.prototype._dblclickSelector):
        (WebInspector.StylePropertiesSection.prototype.startEditingSelector): allow for editing selectors
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCancelled):
        (WebInspector.StylePropertiesSection.prototype._doesSelectorAffectSelectedNode): helper to check if a selector applies to the selected node
        (WebInspector.BlankStylePropertiesSection.prototype._dblclick):
        (WebInspector.BlankStylePropertiesSection.prototype.startEditing):
        (WebInspector.BlankStylePropertiesSection.prototype.editingCancelled):
        (WebInspector.BlankStylePropertiesSection.prototype.editingCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.makeNormal): morph into a StylePropertiesSection
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.):
        * inspector/front-end/inspector.css:

2009-07-31  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] check if proxy is present before invoking a handler
        https://bugs.webkit.org/show_bug.cgi?id=27883 

        Do not invoke handler function if proxy is null pointer (that would lead to access violation
        anyway)

        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::callListenerFunction):

2009-08-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Reimplement Elements Panel so that its
        interaction with DOM is serialized.

        This is a first cut wuth read support for DOM elements
        tree as well as some limited editing. No properties, no
        styles, no search capabilities are implemented yet.
        Set Preferences.useDOMAgent to true in order to try it
        out, otherwise disabled by default.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getChildNodes):
        (WebCore::InspectorBackend::setAttribute):
        (WebCore::InspectorBackend::removeAttribute):
        (WebCore::InspectorBackend::setTextNodeValue):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::windowScriptObjectAvailable):
        (WebCore::InspectorController::setFrontendProxyObject):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::domAgent):
        * inspector/InspectorDOMAgent.cpp: Added.
        * inspector/InspectorDOMAgent.h: Added.
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/front-end/Callback.js: Added.
        * inspector/front-end/DOMAgent.js: Added.
        * inspector/front-end/ElementsPanel.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2009-08-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adele Peterson.

        isContentEditable function in htmlediting.* must be removed
        https://bugs.webkit.org/show_bug.cgi?id=27870

        This patch removes isContentEditable function in htmlediting.cpp and
        replaces all usage by calling Node::isContentEditable or its derivatives.

        * editing/AppendNodeCommand.cpp: ditto
        (WebCore::AppendNodeCommand::AppendNodeCommand): ditto
        * editing/IndentOutdentCommand.cpp: ditto
        (WebCore::IndentOutdentCommand::outdentParagraph): ditto
        * editing/InsertNodeBeforeCommand.cpp: ditto
        (WebCore::InsertNodeBeforeCommand::InsertNodeBeforeCommand): ditto
        * editing/htmlediting.cpp: ditto
        (WebCore::enclosingNodeWithTag): ditto
        (WebCore::enclosingNodeOfType): ditto
        (WebCore::canMergeLists): ditto
        * editing/htmlediting.h: Updated prototype

2009-08-01  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Adam Barth.

        Fix a message port handle always getting marked as reachable once it gets entangled.

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

        No tests since this only arises with the Chromium multi-process message port implementation
        which isn't in this repostiory.

        * bindings/v8/V8GCController.cpp:
        (WebCore::GCEpilogueVisitor::visitDOMWrapper):

2009-07-31  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Barth.

        Fix Geolocation permission problem
        https://bugs.webkit.org/show_bug.cgi?id=26993

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

2009-07-31  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Eric Seidel.

        Added project properties as needed by symbian platform

        * WebCore.pro:

2009-07-31  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        Fix compiler warning.

        Initialize member variables in the correct order.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):

2009-07-31  Jon Honeycutt  <jhoneycutt@apple.com>

        Windows build fix!

        Unreviewed.

        * page/win/PageWin.cpp:

2009-07-31  Jon Honeycutt  <jhoneycutt@apple.com>

        Mac build fix.

        Unreviewed.

        * page/Page.cpp:
        Move setCanStartPlugins() from here...
        * page/win/PageWin.cpp:
        (WebCore::Page::setCanStartPlugins):
        ... to here.

2009-07-29  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/5698113> Safari shouldn't auto-activate plug-ins in
        background tabs (make Win consistent with Mac)

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

        Reviewed by Anders Carlsson.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::dispatchDidFailToStartPlugin):
        Declare a new function to dispatch failures to start plug-ins.

        * page/Page.cpp:
        (WebCore::Page::Page):
        Initialize new member variable.
        (WebCore::Page::addUnstartedPlugin):
        Add the PluginView to the set of unstarted plug-ins.
        (WebCore::Page::removeUnstartedPlugin):
        Remove the PluginView from the set of unstarted plug-ins.
        (WebCore::Page::setCanStartPlugins):
        If we can now start plug-ins, iterate the set of unstarted plug-ins,
        starting them. If a plug-in fails to start, dispatch a failed-to-start-
        plug-in error. Clear the list of unstarted plug-ins.

        * page/Page.h:
        Added m_canStartPlugins to track whether we can currently start
        plug-ins. Added m_unstartedPlugins to keep track of plug-ins in the
        page that are waiting to be started.
        (WebCore::Page::canStartPlugins):

        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        m_mimeType is now a WebCore::String, so we call .utf8(). If NPP_New()
        fails, set m_status to reflect this; this used to be set by init(), but
        start() will not be called by init() if we are delaying start().
        If NPP_New() succeeds, set m_status to reflect this, and call
        platformStart().
        (WebCore::PluginView::startOrAddToUnstartedList):
        If we cannot start plug-ins, add this view to the Page's list of
        unstarted plug-ins and return true. Otherwise, call start() and return
        the result.
        (WebCore::PluginView::removeFromUnstartedListIfNecessary):
        If we've been started or we don't have a Page, return early. Remove
        ourselves from the Page's list of unstarted plug-ins.
        (WebCore::PluginView::bindingInstance):
        If we haven't been started yet, return 0. This matches the Mac
        behavior.
        (WebCore::PluginView::setParameters):
        If we find the "plug-ins page" parameter, record it; it may be used if
        we fail to start the plug-in.
        (WebCore::PluginView::PluginView):
        Initialize new members m_haveUpdatedPluginWidget. Initialize m_mimeType
        with mimeType directly; m_mimeType is now a WebCore::String.

        * plugins/PluginView.h:
        Made start() public, so Page can call it when we start unstarted
        plug-ins. Changed m_mimeType from CString to String and added
        m_pluginsPage; these are needed by dispatchDidFailToStartPlugin().
        (WebCore::PluginView::pluginsPage):
        Added for dispatchDidFailToStartPlugin().
        (WebCore::PluginView::mimeType):
        Ditto.
        (WebCore::PluginView::url):
        Ditto.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformStart):
        Stubbed.

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::platformStart):
        Stubbed.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::platformStart):
        Stubbed.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):
        Use m_haveUpdatedPluginWidget to ensure that we will call MoveWindow()
        and SetWindowRgn() to position the plug-in and set its clip rect if an
        earlier call to updatePluginWidget() was made before
        setPlatformPluginWidget() was called to set the plug-in's HWND.
        (WebCore::PluginView::~PluginView):
        Call removeFromUnstartedListIfNecessary() to remove the plug-in from
        the unstarted list if the plug-in is destroyed before it is started.
        (WebCore::PluginView::init):
        Call startOrAddtoUnstartedList to start the plug-in or, if plug-ins
        cannot be started, to add it to the list of plug-ins waiting to be
        started. Set m_status to indicate success; this is also set by start(),
        but that may be delayed, and we don't want the loader to dispatch a
        failed-to-start-plug-in error when we return from init().
        (WebCore::PluginView::platformStart):
        Added; code moved from init(). This is now called by start() to perform
        any platform-specific tasks that need to take place after the plug-in
        has started. Added a call to updatePluginWidget() to ensure we position
        the plug-in and set its clip rect after the plug-in has started.
        Removed the setting of m_status; start() does this before calling this
        function (and we assert this at the head of the function).

2009-07-30  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        Next step: Add casts for all the RenderTable classes and use them everywhere.

        Also added a few uses in places that were still using static_cast.
        Also made some virtual member functions private.
        Also changed RenderTable::m_tableLayout to use OwnPtr.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        (WebCore::AccessibilityTableCell::titleUIElement):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::parentTable):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/TextIterator.cpp:
        (WebCore::shouldEmitTabBeforeNode):
        (WebCore::shouldEmitNewlinesBeforeAndAfterNode):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::parseMappedAttribute):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseMappedAttribute):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsAboveCell):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::searchForNSLabelsAboveCell):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::shouldScaleColumns):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcPrefWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcPercentageHeight):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addChild):
        (WebCore::RenderObject::containingBlock):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::collapsedBottomBorder):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::table):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        (WebCore::RenderTableRow::layout):
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::lowestPosition):
        (WebCore::RenderTableSection::rightmostPosition):
        (WebCore::RenderTableSection::leftmostPosition):
        (WebCore::RenderTableSection::paintObject):
        (WebCore::RenderTableSection::recalcCells):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::operator<<):
        (WebCore::writeTextRun):
        Use checked casts.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::styleDidChange): Updated to use OwnPtr.
        (WebCore::RenderTable::addChild): Use checked cast.
        (WebCore::RenderTable::layout): Ditto.
        (WebCore::RenderTable::setCellWidths): Ditto.
        (WebCore::RenderTable::paintObject): Ditto.
        (WebCore::RenderTable::splitColumn): Ditto.
        (WebCore::RenderTable::appendColumn): Ditto.
        (WebCore::RenderTable::colElement): Ditto.
        (WebCore::RenderTable::recalcSections): Ditto.
        (WebCore::RenderTable::outerBorderBottom): Ditto.
        (WebCore::RenderTable::outerBorderLeft): Ditto.
        (WebCore::RenderTable::outerBorderRight): Ditto.
        (WebCore::RenderTable::sectionAbove): Ditto.
        (WebCore::RenderTable::sectionBelow): Ditto.

        * rendering/RenderTable.h: Added checked cast. Made virtual
        functions private. Changed m_tableLayout to be a OwnPtr.

        * rendering/RenderTableCell.h: Added checked cast.
        * rendering/RenderTableCol.h: Ditto. Made virtual functions private.
        * rendering/RenderTableRow.h: Ditto.
        * rendering/RenderTableSection.h: Ditto.

2009-07-31  Brady Eidson  <beidson@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/6973106> and https://bugs.webkit.org/show_bug.cgi?id=27896
        Favicons are still loaded when automatic image loading is disabled.

        People who want to avoid loading images generally want to avoid loading all images.

        Test: http/tests/misc/favicon-loads-with-images-disabled.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::startIconLoader): After committing the URL mapping, don't actually 
          perform the load if images shouldn't be loading.

2009-07-31  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.
        
        Accelerated animations stutter on pages with lots of animations and 3d transforms
        https://bugs.webkit.org/show_bug.cgi?id=27884
        
        This patch changes the strategy for synchronizing painting view the view,
        and compositing layer updates. Previously the strategy was to disable screen
        updates between the time we updated the layer tree, and painted the view. That
        left screen updates disabled for too long (hundreds of milliseconds) in some
        cases, causing animation stutter.
        
        The new strategy is to batch up changes to the CA layer tree, and commit them
        all at once just before painting happens (referred to as a "sync" in the code).
        GraphicsLayerCA now keeps a bitmask of changed properties, and then migrates
        the values stored in GraphicsLayer into the CA layer tree at commit time.
        
        Compositing layers are then synced in FrameView::paintContents(). However, not
        all style/layout changes will result in painting; to deal with style changes that
        touch only compositing properties, we set up a runloop observer that takes care
        of comitting layer changes when no painting happens.

        * WebCore.base.exp: Export FrameView::syncCompositingStateRecursive()

        * loader/EmptyClients.h: scheduleViewUpdate() renamed to syncCompositingStateRecursive()
        * page/ChromeClient.h: scheduleViewUpdate() renamed to syncCompositingStateRecursive()

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::syncCompositingStateRecursive): syncCompositingState() on the
        view and all subviews. Like layoutIfNeededRecursive(). If layout is pending, does not
        sync and returns false, since we only want to sync when layout is done.
        
        (WebCore::FrameView::paintContents): syncCompositingState() before painting.

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::endAnimation):
        Call animationPaused() to notify the graphics layers about animation pausing.
        
        * platform/graphics/FloatPoint3D.h:
        (WebCore::operator==):
        (WebCore::operator!=): 
        Add missing comparison operators.
        
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setOpacity):
        (WebCore::GraphicsLayer::setBackgroundColor): Simple setters no longer care about animation info.
        
        (WebCore::GraphicsLayer::paintGraphicsLayerContents): Null-check client.
        
        * platform/graphics/GraphicsLayer.h:
        (WebCore::AnimationValue:):
        (WebCore::TransformAnimationValue:):
        (WebCore::KeyframeValueList:):
        (WebCore::KeyframeValueList::insert):
        Cleaned up versions of FloatValue and TransformValue, used to store information
        about keyframes values.

        (WebCore::GraphicsLayer::contentsRect):
        (WebCore::GraphicsLayer::setContentsRect):
        ContentsRect is now a simple setter.
        
        (WebCore::GraphicsLayer::addAnimation):
        (WebCore::GraphicsLayer::removeAnimationsForProperty):
        (WebCore::GraphicsLayer::removeAnimationsForKeyframes):
        (WebCore::GraphicsLayer::pauseAnimation):
        Simplified animation api.
        
        (WebCore::GraphicsLayer::setGeometryOrientation):
        (WebCore::GraphicsLayer::geometryOrientation):
        setGeometryOrientation is now just a normal member variable.
        
        (WebCore::GraphicsLayer::contentsOrientation): add a getter.
        (WebCore::GraphicsLayer::syncCompositingState): Entry into the layer sync code.
        
        * platform/graphics/GraphicsLayerClient.h: scheduleViewUpdate() renamed to syncCompositingStateRecursive)

        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        Lots of cleanup and refactoring. Main points:
        - Layer changes are all batched, and only committed to the CA layer on syncCompositingState().
        - Bitmask is used to store which properties have changed. More efficient than before.
        - Simpler animation interface; simple setters are no longer confounded with animations.
        - Refactored code that creates CA animations, and stores which animations are running.

        * platform/graphics/transforms/TransformOperations.h:
        (WebCore::TransformOperations::size):
        (WebCore::TransformOperations::at): Useful accessors for size and indexed access.
        
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerBacking.cpp:
        Renamed 'contentsLayer' to 'foregroundLayer' to avoid confusion with GraphicsLayer's
        contentsLayer.
        Adapt to GraphicsLayer's simpler animation API.
        Pass animation pausing through to the graphics layers.
        contentsBox() is no longer a callback via GraphicsLayerClient.
        
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::setCompositingLayersNeedRebuild):
        (WebCore::RenderLayerCompositor::scheduleSync):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        scheduleViewUpdate() is no longer required. Instead, we plumb through "compositingLayerSync"
        notifications, which travel up to WebKit and set up a runloop observer.
        
2009-07-30  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by David Levin.

        Guard needs //'s between #endif and ENABLE(DATAGRID)
        https://bugs.webkit.org/show_bug.cgi?id=27862

        Compiling this file causes a build break without this change.

        * bindings/v8/custom/V8DataGridColumnListCustom.cpp:

2009-07-31  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Eric Seidel.

        Geolocation clean up when no longer updating
        https://bugs.webkit.org/show_bug.cgi?id=27888

        When Geolocation::disconnectFrame() is called, need to call 
        Document::setUsingGeolocation(false) to mirror the true call 
        when it is set up.

        When handling an error, and there are no more listeners, call
        GeolocationService::stopUpdating().

        * page/Geolocation.cpp:
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::handleError):

2009-07-31  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by George Staikos.

        Consolidate GeoLocation code to send positions and errors
        https://bugs.webkit.org/show_bug.cgi?id=27863
        
        Create helper methods that will send positions and errors to either
        one shots or watchers.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::sendError):
        (WebCore::Geolocation::sendErrorToOneShots):
        (WebCore::Geolocation::sendErrorToWatchers):
        (WebCore::Geolocation::sendPosition):
        (WebCore::Geolocation::sendPositionToOneShots):
        (WebCore::Geolocation::sendPositionToWatchers):
        * page/Geolocation.h:

2009-07-31  Xan Lopez  <xlopez@igalia.com>

        Roll out previous change as it might be causing some weirdness in
        the bots.

        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::processFileHeader):

2009-07-31  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        Fix compiler warning.
        https://bugs.webkit.org/show_bug.cgi?id=27851

        GCC does not like multi-character character constants, so use the
        explicit numerical value of 'BM' in the enum.

        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::processFileHeader):

2009-07-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe, but Dan Bernstein also reviewed and asked thoughtful questions.

        <rdar://problem/7106968> and https://bugs.webkit.org/show_bug.cgi?id=27868
        http://www.ruthhuntcandy.com/ goes into infinite refresh in WebKit, works in others.
        
        Test: http/tests/misc/meta-refresh-stray-single-quote.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPRefresh): Allow for a stray quote character at the start of the URL string.

2009-07-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson and Jon Honeycutt.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=27828> for Mac.
        Bug 27828: Title attribute is not respected on option elements

        No tests added as it is not clear how to test a tool tip from DumpRenderTree.

        * platform/PopupMenuClient.h: Add a method for retrieving the tool tip of an item.
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::populate): Set the tool tip of the menu item to that of the represented item.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemToolTip): Expose the title attribute of the element as the tool tip.
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::RenderTextControlSingleLine::itemToolTip): Return an empty string, indicating no tool tip, for
        the popup menu in RenderTextControlSingleLine.

2009-07-30  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Remove ChromeClientChromium::setToolTip().
        https://bugs.webkit.org/show_bug.cgi?id=27861

        This patch is just to remove a temporarily introduced overloaded empty
        virtual function. No test is needed.

        * page/chromium/ChromeClientChromium.h:

2009-07-30  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Fisher.

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

        ApplicationCacheHost refactoring.
        
        1) Better encapsulate the interfaces between webcore common code
        and the appcache system within a new class ApplicationCacheHost.

        2) Use that interface throughout the loader system, replacing inline appcache logic.

        3) Implement the interface in terms of webcore's appcache system.

        4) Add the new files to various makefiles.

        5) Implement protocolHostAndPortAreEqual() in KURLGoogle.cpp

        No new features, no new tests. The existing layout tests all pass.

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedIntoDocument):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::mainReceivedError):
        (WebCore::DocumentLoader::detachFromFrame):
        (WebCore::DocumentLoader::setPrimaryLoadComplete):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::applicationCacheHost):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::didReceiveData):
        (WebCore::MainResourceLoader::didFinishLoading):
        (WebCore::MainResourceLoader::didFail):
        (WebCore::MainResourceLoader::load):
        * loader/MainResourceLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::willSendRequest):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didFail):
        * loader/ResourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::selectCacheWithoutManifestURL):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::failedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::disassociateDocumentLoader):
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::manifestNotFound):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::ApplicationCacheGroup::associateDocumentLoaderWithCache):
        (WebCore::CallCacheListenerTask::create):
        (WebCore::CallCacheListenerTask::performTask):
        (WebCore::CallCacheListenerTask::CallCacheListenerTask):
        (WebCore::ApplicationCacheGroup::postListenerTask):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.cpp: Added.
        * loader/appcache/ApplicationCacheHost.h: Added.
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::transferApplicationCache):
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/appcache/DOMApplicationCache.cpp:
        (WebCore::DOMApplicationCache::DOMApplicationCache):
        (WebCore::DOMApplicationCache::disconnectFrame):
        (WebCore::DOMApplicationCache::applicationCacheHost):
        (WebCore::DOMApplicationCache::status):
        (WebCore::DOMApplicationCache::update):
        (WebCore::DOMApplicationCache::swapCache):
        (WebCore::DOMApplicationCache::addEventListener):
        (WebCore::DOMApplicationCache::removeEventListener):
        (WebCore::DOMApplicationCache::dispatchEvent):
        (WebCore::DOMApplicationCache::callListener):
        (WebCore::DOMApplicationCache::toEventName):
        (WebCore::DOMApplicationCache::toEventType):
        * loader/appcache/DOMApplicationCache.h:
        (WebCore::DOMApplicationCache::):
        (WebCore::DOMApplicationCache::setAttributeEventListener):
        (WebCore::DOMApplicationCache::getAttributeEventListener):
        (WebCore::DOMApplicationCache::clearAttributeEventListener):
        (WebCore::DOMApplicationCache::callEventListener):
        (WebCore::DOMApplicationCache::setOnchecking):
        (WebCore::DOMApplicationCache::onchecking):
        (WebCore::DOMApplicationCache::setOnerror):
        (WebCore::DOMApplicationCache::onerror):
        (WebCore::DOMApplicationCache::setOnnoupdate):
        (WebCore::DOMApplicationCache::onnoupdate):
        (WebCore::DOMApplicationCache::setOndownloading):
        (WebCore::DOMApplicationCache::ondownloading):
        (WebCore::DOMApplicationCache::setOnprogress):
        (WebCore::DOMApplicationCache::onprogress):
        (WebCore::DOMApplicationCache::setOnupdateready):
        (WebCore::DOMApplicationCache::onupdateready):
        (WebCore::DOMApplicationCache::setOncached):
        (WebCore::DOMApplicationCache::oncached):
        (WebCore::DOMApplicationCache::setOnobsolete):
        (WebCore::DOMApplicationCache::onobsolete):
        (WebCore::DOMApplicationCache::~DOMApplicationCache):
        * platform/KURLGoogle.cpp:
        (WebCore::protocolHostAndPortAreEqual):

2009-07-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27854 - crash at WebCore::AXObjectCache::notificationPostTimerFired
        https://bugs.webkit.org/show_bug.cgi?id=27854

        AccessibilityObjects need to be retained while waiting to fire their notifications, otherwise
        they can disappear and then lead to crashes.
       
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        (WebCore::AXObjectCache::postNotification):
        * accessibility/AXObjectCache.h:

2009-07-30  Simon Fraser  <simon.fraser@apple.com>

        Minor change to earlier commit suggested by Darin Adler.
        Use the variable rather than dereferencing 'it' again.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):

2009-07-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Animation with a timing function property in a keyframe eats CPU
        https://bugs.webkit.org/show_bug.cgi?id=27856
        <rdar://problem/7104476> Animation demo uses lots of CPU
        
        Don't include animation-timing-function in the list of properties to
        animate in a keyframe animation, because this property is not animated;
        instead, it describes the timing function to apply to this keyframe.
        
        This prevents the animation code from thinking that there's a property
        that it has to software-animate, and thus firing the animation timer frequently.
        
        Not testable because there is no visible impact.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation): Don't add
        CSSPropertyWebkitAnimationTimingFunction to the list of properties to animate.

        * page/animation/KeyframeAnimation.cpp
        (WebCore::KeyframeAnimation::getKeyframeAnimationInterval): Add a comment

2009-07-30  Mike Fenton  <mike.fenton@torchmobile.com>

         Reviewed by Adam Treat.

         Apply colour style to buttons that use Theme settings in Qt.

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

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

=== End merge of nitro-extreme branch 2009-07-30 ===

2009-05-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Make WebCore compile with the new JS number representation.

        * ForwardingHeaders/runtime/JSAPIValueWrapper.h: Added.
        * ForwardingHeaders/runtime/JSNumberCell.h: Removed.
        * bindings/js/ScriptEventListener.cpp:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:

=== Start merge of nitro-extreme branch 2009-07-30 ===

2009-07-30  Dean McNamee  <deanm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Don't try to hash member function pointers, instead use a precomputed value based on the field.
        https://bugs.webkit.org/show_bug.cgi?id=27843

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8SVGPODTypeWrapper.h:
        (WebCore::PODTypeWrapperCacheInfo::PODTypeWrapperCacheInfo):
        (WebCore::PODTypeWrapperCacheInfo::operator==):
        (WebCore::PODTypeWrapperCacheInfoHash::hash):
        (WebCore::V8SVGDynamicPODTypeWrapperCache::lookupOrCreateWrapper):

2009-07-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Simon Fraser.

        Fix compiler warning.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):

2009-07-29  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Adam Barth.

        Add a way to register V8 extensions for Isolated Worlds only.
        https://bugs.webkit.org/show_bug.cgi?id=27785

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInNewWorld):
        (WebCore::ScriptController::evaluateInNewContext):
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::evaluate):
        * bindings/v8/V8IsolatedWorld.h:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInNewWorld):
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::createNewContext):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::registerExtensionWithV8):
        (WebCore::V8Proxy::registerExtension):
        * bindings/v8/V8Proxy.h:

2009-07-30  Mike Fenton  <mike.fenton@torchmobile.com>

         Reviewed by Adam Treat.

         Add previously defined out support to PopupMenuQt for marking entries as
         disabled and for selecting the desired item.

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

         * platform/qt/PopupMenuQt.cpp:
         (WebCore::PopupMenu::populate):

2009-07-30  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        Next step: Add new toRenderWidget cast and use it everywhere.

        Use checked casts in all the places that were using static_cast
        but there is a checked cast available.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::widget):
        (WebCore::AccessibilityRenderObject::widgetForAttachmentView):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getPangoLayoutForAtk):
        * dom/Document.cpp:
        (WebCore::widgetForNode):
        (WebCore::Document::setFocusedNode):
        * html/HTMLEmbedElement.cpp:
        (WebCore::findWidgetRenderer):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::defaultEventHandler):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        * loader/PluginDocument.cpp:
        (WebCore::PluginTokenizer::writeRawData):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::subframeForTargetNode):
        (WebCore::EventHandler::handleWheelEvent):
        * page/Frame.cpp:
        (WebCore::isFrameElement):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computePageRects):
        * page/android/EventHandlerAndroid.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/chromium/FrameChromium.cpp:
        (WebCore::computePageRectsForFrame):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/haiku/EventHandlerHaiku.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        * page/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::getCachedImage):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeImage):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::getCachedImage):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/win/ClipboardWin.cpp:
        (WebCore::getCachedImage):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::boxModelObject):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::addChildToContinuation):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateImageContents):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::positionForPoint):
        Use checked cast instead of static_cast.
        
        * rendering/RenderWidget.h: Added toRenderWidget.

2009-07-30  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: some files modified to build for WINCE
        https://bugs.webkit.org/show_bug.cgi?id=27816

        * accessibility/AccessibilityObject.h:
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::messageToEventType):
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/win/PlatformScreenWin.cpp:
        (WebCore::deviceInfoForWidget):
        (WebCore::screenIsMonochrome):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::paint):
        (WebCore::registerPopup):
        (WebCore::PopupWndProc):

2009-07-30  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: modified graphics files
        https://bugs.webkit.org/show_bug.cgi?id=27779

        * platform/graphics/BitmapImage.h:
        (WebCore::BitmapImage::mayFillWithSolidColor):
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::blend):
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        (WebCore::MatrixTransformOperation::blend):
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::operator*):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFile):
        (WebCore::Icon::createIconForFiles):
        (WebCore::Icon::paint):

2009-07-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Ariya Hidayat.

        Improve efficiency by rewriting code doing three hash table
        lookups, which can be replaced by just one as pointed out
        by Darin Adler.

        Though being slightly less clear, this should be considerable
        faster.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::remove):

2009-07-30  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Gustavo Noronha.

        [Gtk] Code cleanup in MediaPlayerPrivateGStreamer.cpp|h and VideoSinkGStreamer.cpp|h (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=27651

        Removed unneeded includes (gdk.h and gtk.h) and added glib.h and cairo.h instead.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:

2009-07-30  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Gustavo Noronha.

        [Gtk] Code cleanup in MediaPlayerPrivateGStreamer.cpp|h and VideoSinkGStreamer.cpp|h (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=27651

        Fixed many code style issues pointed by WebKitTools/Scripts/modules/cpplint.py
        No functionality change at all.

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gtk/VideoSinkGStreamer.cpp:
        * platform/graphics/gtk/VideoSinkGStreamer.h:

2009-07-30  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Allow to explicitly choose a preferred plugin for a mimetype.

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

        When the preferred plugin is set for a specific MIME type, it will be
        always picked up, regardless of its version, quirks etc.

        Client applications may want to use that API to resolve mimetype
        ambiguity in a custom way, rather than in the default way that is
        currently used in WebKit.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::pluginForMIMEType):
        (WebCore::PluginDatabase::MIMETypeForExtension):
        (WebCore::PluginDatabase::setPreferredPluginForMIMEType): Added.
        (WebCore::PluginDatabase::remove):
        (WebCore::PluginDatabase::clear):
        * plugins/PluginDatabase.h:

2009-07-30  Jakub Wieczorek  <faw217@gmail.com>

        [Qt] Fix build with Qt 4.4 after r46535.

        * platform/network/qt/ResourceHandleQt.cpp:

2009-07-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Video elements fires another "load" event when attached to DOM
        https://bugs.webkit.org/show_bug.cgi?id=27623

        Test: media/media-load-event.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedIntoDocument):
            Only schedule load when element's network state is NETWORK_EMPTY.

2009-07-30  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        Cache v8 strings when converting from WebCore::String to v8 string.
        https://bugs.webkit.org/show_bug.cgi?id=27655

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8String): now just immediately calls v8ExternalString
        (WebCore::enableStringImplCache): enables caching of conversions from WebCore::StringImpl to
        v8::String
        (WebCore::makeExternalString): utilty function to create external v8::String out of
        WebCore::String
        (WebCore::getStringCache): static function to access string cache
        (WebCore::cachedStringCallback): callback for weak handles of v8::Strings stored in the
        cache
        (WebCore::v8ExternalString): if caching enabled, checks if there is already v8::String for
        the given WebCore::StringImpl.  If present, returns it, otherwise creates a new v8 external
        string.
        * bindings/v8/V8Binding.h:

2009-07-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=25535
        [GTK] object:state-changed:checked events missing for radio buttons and checkboxes

        Implement state-changed:checked for radio buttons and checkboxes.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):

2009-07-30  Xan Lopez  <xlopez@igalia.com>

        Forgot the 'break'.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):

2009-07-30  Xan Lopez  <xlopez@igalia.com>

        Try to fix Mac build.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):

2009-07-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Adam Barth.

        Add missing enumeration value to switch.

        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::checkOrEnableIfNeeded):

2009-07-29  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        Workers need to throw an exception when presented with invalid URLs.
        https://bugs.webkit.org/show_bug.cgi?id=27770

        Tests covered by worker-constructor.html and worker-redirect.html.

        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        * workers/Worker.h:
        (WebCore::Worker::create):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:

2009-07-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        (REGRESSION: r46039) Should restore previous connections-per-host limit for non-http(s) hosts
        https://bugs.webkit.org/show_bug.cgi?id=27822 and <rdar://problem/7091659>

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests): For non-http(s) hosts, restore the previous behavior of 
          only limiting connections while parsing and still trying to figure out stylesheet urls.

2009-07-29  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: Add WebCore/page/wince/FrameWince.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27729

        * page/wince/FrameWince.cpp: Added.

2009-07-29  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        REGRESSION(r46370-46426): /editing/style/remove-underline-from-stylesheet.html fails
        https://bugs.webkit.org/show_bug.cgi?id=27809

        The patch primarily rebaselines the tests but also fixes the bug in currentlyHasStyle.
        To determine that a particular text decoration is present, currentlyHasStyle should refer to
        -webkit-text-decorations-in-effect to take care of styles set by u, s, strike tags and ancestors' CSS.
        We also need to update layout to accommodate the changes made within ApplyStyleCommand.

        * editing/ApplyStyleCommand.cpp: ditto
        (WebCore::StyleChange::currentlyHasStyle): ditto

2009-07-29  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: changes to platform/text files
        https://bugs.webkit.org/show_bug.cgi?id=27715

        * platform/text/String.cpp:
        (WebCore::String::format):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):

2009-07-29  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Roben.

        FIX: HDC leaks in PopupMenuWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27817

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::paint):

2009-07-29  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Illegal values for <ol start> cause list numbering start at 0 (should start at 1)
        https://bugs.webkit.org/show_bug.cgi?id=27810

        Test: fast/lists/ol-start-parsing.html

        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::parseMappedAttribute): Check the result of toInt
        and use the value 1 if it failed to parse. Before we were getting toInt's default
        behavior, which is to return 0.

2009-07-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        Added foundation work to allow a testing infrastructure for the Web
        Inspector.

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::scriptObjectReady): Tell the testing
        harness that the window object is ready.
        * loader/EmptyClients.h: Empty class support for SVG.
        (WebCore::EmptyInspectorClient::inspectorWindowObjectCleared):

2009-07-29  Chris Fleizach  <cfleizach@apple.com>

        Build fix for windows after landing
        Bug 27807 - AX: move re-usable code into more common areas for other platforms
   
        Apparently bzero doesn't exist on windows.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):

2009-07-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Justin Garcia.

        Bug 27807 - AX: move re-usable code into more common areas for other platforms
        https://bugs.webkit.org/show_bug.cgi?id=27807

        Moves some accessibility code that was in the Mac file to a more common place so 
        it can be used by other platforms. 
        This includes:
           Making TextMarkerData from a VisiblePosition.
           Making a VisiblePosition from TextMarkerData.
           Finding the anchor accessibility object for an arbitrary Node.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::anchorElementForNode):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::visiblePositionForIndex):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (textMarkerForVisiblePosition):
        (visiblePositionForTextMarker):
        (AXAttributedStringAppendText):

2009-07-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Inset box shadows are incorrectly accounted for in visual overflow
        computations
        https://bugs.webkit.org/show_bug.cgi?id=27811

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Use
            getBoxShadowHorizontalExtent().
        (WebCore::InlineFlowBox::placeBoxesVertically): Use
            getBoxShadowVerticalExtent(). Removed duplicate code to get the
            text-shadow overflow.
        (WebCore::InlineFlowBox::paint): Use getBoxShadowHorizontalExtent().
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowHeight): Use
            getBoxShadowVerticalExtent().
        (WebCore::RenderBlock::overflowWidth): Use
            getBoxShadowHorizontalExtent().
        (WebCore::RenderBlock::overflowLeft): Ditto.
        (WebCore::RenderBlock::overflowTop): Use getBoxShadowVerticalExtent().
        (WebCore::RenderBlock::overflowRect): Use getBoxShadowExtent().
        (WebCore::RenderBlock::layoutBlock): Ditto.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateRects): Exclude inset shadows.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Use
            getBoxShadowHorizontalExtent() and getBoxShadowVerticalExtent().
        (WebCore::RenderObject::adjustRectForOutlineAndShadow): Exclude inset
            shadows.
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::adjustOverflowForBoxShadowAndReflect): Ditto.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow): Also assert that text-shadows are
            not inset.
        (WebCore::RenderStyle::getBoxShadowExtent): Added. Excludes inset
            shadows.
        (WebCore::RenderStyle::getBoxShadowHorizontalExtent): Ditto.
        (WebCore::RenderStyle::getBoxShadowVerticalExtent): Ditto.
        * rendering/style/RenderStyle.h:

2009-07-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix crash when an element with display: table-row is composited (e.g. via a 3d-transform)
        https://bugs.webkit.org/show_bug.cgi?id=27796
        
        Avoid repainting when a layer becomes composited if the renderer is not parented
        yet, because it makes no sense to do so.
        
        If the table row is a repaint container, default to the RenderBox implementation
        of clippedOverflowRectForRepaint(), because we cannot hand off the repaint rect
        computation to something that is above the repaint container.

        Test: fast/table/table-row-compositing-repaint-crash.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::repaintOnCompositingChange):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::clippedOverflowRectForRepaint):

2009-07-29  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=27791
        307 redirects of POSTs should use POST, not GET

        Test: http/tests/loading/redirect-methods.html

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]):

2009-07-29  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Adding -webkit-animation-play-state back in
        https://bugs.webkit.org/show_bug.cgi?id=26867

        We've decided to keep -webkit-animation-play-state. So this
        just adds back in the code from https://bugs.webkit.org/show_bug.cgi?id=22907.

        Test: animations/play-state.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAnimationPlayState):
        (WebCore::CSSParser::parseAnimationProperty):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapAnimationPlayState):
        * css/CSSStyleSelector.h:
        * platform/animation/Animation.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-07-29  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Expose the default plugin directories and the current directory set of
        the plugin database as public API.

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

        * plugins/PluginDatabase.h:
        (WebCore::PluginDatabase::pluginDirectories):

2009-07-29  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        [chromium] Font size for current time display in media controls panel
        is affected by body font size.
        https://bugs.webkit.org/show_bug.cgi?id=27799

        Fixing the problem of rendering by explicitly setting the font size
        for the time displays.

        No new tests since this is covered by existing media tests.

        * css/mediaControlsChromium.css:

2009-07-29  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by David Levin.

        Update WebCore/page/ContextMenuController.cpp to conform to WebKit
        Style Guidelines as identified by cpp_style.py.
        https://bugs.webkit.org/show_bug.cgi?id=27613

        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):

2009-07-29  Dean McNamee  <deanm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Removed unused wrapCPointer/extractCPointer from the v8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=27805

        * bindings/v8/V8DOMWrapper.h:

2009-07-29  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Expose the PluginDatabase::pluginForMIMEType() function as public API.
        https://bugs.webkit.org/show_bug.cgi?id=27651

        It can be used to determine the appropriate plugin for a mime type,
        without guessing the mimetype from the extension.

        * plugins/PluginDatabase.h:

2009-07-29  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Adam Treat.

        Allow to enable/disable particular plugin packages.
        https://bugs.webkit.org/show_bug.cgi?id=27651

        Disabled plugins will not be picked up when looking for a plugin
        supporting the requested mimetypes.

        Client applications may want to use that API to disable specific
        plugins.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::pluginForMIMEType):
        (WebCore::PluginDatabase::MIMETypeForExtension):
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::PluginPackage):
        (WebCore::PluginPackage::setEnabled):
        * plugins/PluginPackage.h:
        (WebCore::PluginPackage::isEnabled):

2009-07-29  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Treat.

        [WML] Running WML tests in random order multiple times exposes subtle bugs
        https://bugs.webkit.org/show_bug.cgi?id=27801

        Remove superflous assertions regarding the parent node. Under certain circumstances
        these can even fire (related to garbage collection while destructing). Fixes random order
        WML tests (run-webkit-tests fast/wml wml http/tests/wml fast/wml ... --random)

        The wml/enter-first-card-with-events.html test relied on a bug in our implementation of
        WMLPageState::reset() - the history stack should still contain the current card afterwards.
        Fix that bug by preserving the first item in BackForwardList::clearWMLPageHistory().

        * history/BackForwardList.cpp: Preserve first item in history stack, as demanded by the spec.
        (WebCore::BackForwardList::clearWMLPageHistory):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::insertedIntoDocument):
        (WebCore::WMLDoElement::removedFromDocument):
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::insertedIntoDocument):
        * wml/WMLOnEventElement.cpp:
        (WebCore::eventHandlingParent):
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::insertedIntoDocument):
        (WebCore::WMLPostfieldElement::removedFromDocument):
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::insertedIntoDocument):
        (WebCore::WMLSetvarElement::removedFromDocument):
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::insertedIntoDocument):
        (WebCore::WMLTaskElement::removedFromDocument):
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::insertedIntoDocument):
        (WebCore::WMLTimerElement::removedFromDocument):

2009-07-29  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=26848
        [Qt] ResourceHandle::willLoadFromCache needs to be implemented QtWebKit.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem):
        * platform/network/ResourceHandle.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):

2009-07-29  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        Media control panel for <video> in MediaDocument is mis-placed
        https://bugs.webkit.org/show_bug.cgi?id=27798

        Fixing a rendering problem: When <video> is displayed in MediaDocument,
        the media control panel overlaps with the video by 16 pixels.

        No new tests as this is covered by existing media tests.

        * css/mediaControlsChromium.css:

2009-07-29  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix for Chromium.  Those last two patches weren't
        independent despite the clean merge.

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):

2009-07-29  Avi Drissman  <avi@chromium.org>

        Reviewed by Darin Adler.

        ImageSourceCG makes bad data refs (race condition causes blank images)
        https://bugs.webkit.org/show_bug.cgi?id=27777

        Make ImageSourceCG guarantee that the lifetime of the SharedBuffer that
        backs the CFDataRef will be long enough.

        No new tests, as this fixes a bug with a race condition that is
        difficult to trigger.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):

2009-07-29  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Console should show completions for the command line APIs
        https://bugs.webkit.org/show_bug.cgi?id=27696

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._reportCompletions): Adds properties from _inspectorCommandLineAPI to 
        completions when available.
        * inspector/front-end/utilities.js:
        (Object.properties): Added.
        (Object.sortedProperties):

2009-07-29  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Refactor the first step of layout in RenderFlexibleBox.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27704

        No new tests as this change is just a refactoring.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::gatherFlexChildrenInfo):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):

2009-07-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Fix a bug that HTMLOptionElement::value() returns an incorrect
        value in a case that the element has a label attribute and no
        value attribute.
        https://bugs.webkit.org/show_bug.cgi?id=27760

        Test: fast/forms/option-value-and-label.html

        * dom/OptionElement.cpp:
        (WebCore::OptionElement::collectOptionLabelOrText):
        (WebCore::OptionElement::collectOptionInnerText):
        (WebCore::OptionElement::normalizeText):
        (WebCore::OptionElement::collectOptionTextRespectingGroupLabel):
        (WebCore::OptionElement::collectOptionValue):
        * dom/OptionElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::text):
        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::text):

2009-07-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix isolated world wrappers for event handlers
        https://bugs.webkit.org/show_bug.cgi?id=27533

        Instead of getting the context from the frame, we cache the context
        when the listener is created so that we get the context for the right
        world.

        Test: http/tests/security/isolatedWorld/click-event.html

        * WebCore.gypi:
        * bindings/v8/OwnHandle.h: Added.
        (WebCore::OwnHandle::OwnHandle):
        (WebCore::OwnHandle::~OwnHandle):
        (WebCore::OwnHandle::get):
        (WebCore::OwnHandle::set):
        (WebCore::OwnHandle::release):
        (WebCore::OwnHandle::adopt):
        (WebCore::OwnHandle::swap):
        (WebCore::OwnHandle::clear):
        (WebCore::OwnHandle::makeWeak):
        (WebCore::OwnHandle::weakCallback):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::V8AbstractEventListener):
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8AbstractEventListener.h:
        * bindings/v8/V8DOMWrapper.h:

2009-07-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Teach V8Proxy::context about isolated worlds
        https://bugs.webkit.org/show_bug.cgi?id=27701

        Change V8Proxy::context(Frame*) to understand isolated worlds.  Audit
        all callers of this method to make sure they want isolated worlds.  In
        cases where we really want the main world, I've changed the call to
        V8Proxy::mainWorldContext(Frame*).
        
        The main visible change is to the document.open method when called with
        more than two arguments.  This design seems more likely to lead to
        future correct code.

        Test: http/tests/security/isolatedWorld/document-open.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::bindToWindowObject):
        (WebCore::ScriptController::collectGarbage):
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructor):
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        * bindings/v8/V8Helpers.cpp:
        (WebCore::toV8Context):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getListenerFunction):
        (WebCore::V8LazyEventListener::getWrappedListenerFunction):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::context):
        (WebCore::V8Proxy::mainWorldContext):
        (WebCore::V8Proxy::bindJsObjectToWindow):
        * bindings/v8/V8Proxy.h:

2009-07-29  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Fix the Qt build, add missing file.

        * WebCore.pro:

2009-07-28  Jon Honeycutt  <jhoneycutt@apple.com>

        Speculative fix for <rdar://problem/7005077> WER: Crash in
        WebCore::PluginStream::destroyStream+279 (1310510882)

        Reviewed by Oliver Hunt.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::destroyStream):
        Move the "protector" RefPtr out of the block that dispatches
        notifications and into the function level; if NPN_DestroyStream were
        called from NPP_NewStream as the comment warns, we would be deleted at
        the end of the block.

2009-07-28  Joseph Pecoraro  <joepeck02@gmail.com>

        Inspector: Tab Through the DOM Storage DataGrid when Editing

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

        Reviewed by Timothy Hatcher.

        * inspector/front-end/DOMStorageDataGrid.js:
        (WebInspector.DOMStorageDataGrid.prototype._startEditingColumnOfDataGridNode): refactored to directly edit and select a column
        (WebInspector.DOMStorageDataGrid.prototype._startEditing):
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted.moveToNextIfNeeded): handles moveDirection on a commit
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted): uses moveToNext to traverse appropriately

2009-07-28  Joseph Pecoraro  <joepeck02@gmail.com>

        Inspector: Create New DOM Storage Items via DataGrid

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

        Reviewed by Timothy Hatcher.

        * inspector/front-end/DOMStorageDataGrid.js:
        (WebInspector.DOMStorageDataGrid.prototype._startEditing): click anyway means creationNode
        (WebInspector.DOMStorageDataGrid.prototype._editingCommitted): fix unintended globals
        (WebInspector.DOMStorageDataGrid.prototype.deleteSelectedRow): creationNode is special case
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.addCreationNode): maintain a quick ref to the single creationNode
        (WebInspector.CreationDataGridNode): new type of node
        (WebInspector.CreationDataGridNode.prototype.makeNormal): convert to a normal node
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.dataGridForDOMStorage): add a creationNode to the GridData

2009-07-28  Joseph Pecoraro  <joepeck02@gmail.com>

        Inspector: Automatically Refresh DOM Storage Grids on "storage" event

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

        Reviewed by Timothy Hatcher.

        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.show): trigger adding the listener
        (WebInspector.DatabasesPanel.prototype.reset): trigger removing the listener
        (WebInspector.DatabasesPanel.prototype._registerStorageEventListener): register the listener on the inspected window
        (WebInspector.DatabasesPanel.prototype._unregisterStorageEventListener): unregister the listener on the inspected window
        (WebInspector.DatabasesPanel.prototype._storageEvent): handle the storage event

2009-07-28  Keishi Hattori  <casey.hattori@gmail.com>

        Inspector should support inspect() in the command line.

        https://bugs.webkit.org/show_bug.cgi?id=19874
        rdar://problem/6070225

        Reviewed by Timothy Hatcher.

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled.inspectObject):
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled):
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.revealAndSelectDomStorage): Added.
        (WebInspector.DatabasesPanel.prototype.revealAndSelectDatabase): Added.
        (WebInspector.DatabasesPanel.prototype.showDatabase): 

2009-07-28  Keishi Hattori  <casey.hattori@gmail.com>

        The rest of: Web Inspector: Add inspected node using public console API.

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

        Reviewed by Timothy Hatcher.

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled): Removed _inspectorCommandLineAPI._addInspectedNode.
        (WebInspector.Console.prototype.addInspectedNode): Added.

2009-07-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Accept autocomplete on 'End' key pressed.

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

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype.handleKeyEvent):

2009-07-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by David Levin.

        [Qt] Build fix after r46502
        https://bugs.webkit.org/show_bug.cgi?id=27789

        * WebCore.pro: Remove StorageArea.cpp

2009-07-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Follow-on fix to r35582.  Replace main thread assertions with WebCoreObjCScheduleDeallocateOnMainThread
        in -dealloc overrides in DOMObject subclasses.

        * bindings/scripts/CodeGeneratorObjC.pm:

2009-07-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Treat.

        [WML] WML*Element classes mostly implement insertedIntoDocument(), not removedFromDocument()
        https://bugs.webkit.org/show_bug.cgi?id=27786

        WML*Element classes mostly implement insertedIntoDocument(), not removedFromDocument().
        The only case where this is relevant in WML is error handling. The parsed WML
        tree fragment is inserted in an XHTML compound error document. This requires
        removedFromDocument() to be correctly implemented otherwhise we run into
        trouble (visible when using run-webkit-tests fast/wml --random).

        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::registerTask):
        (WebCore::WMLAnchorElement::deregisterTask):
        * wml/WMLAnchorElement.h:
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::removedFromDocument):
        (WebCore::WMLDoElement::registerTask):
        (WebCore::WMLDoElement::deregisterTask):
        * wml/WMLDoElement.h:
        * wml/WMLEventHandlingElement.cpp:
        (WebCore::WMLEventHandlingElement::registerDoElement):
        (WebCore::WMLEventHandlingElement::deregisterDoElement):
        * wml/WMLEventHandlingElement.h:
        * wml/WMLFieldSetElement.cpp:
        (WebCore::WMLFieldSetElement::removedFromDocument):
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::registerPostfieldElement):
        (WebCore::WMLGoElement::deregisterPostfieldElement):
        * wml/WMLGoElement.h:
        * wml/WMLIntrinsicEventHandler.cpp:
        (WebCore::WMLIntrinsicEventHandler::deregisterIntrinsicEvent):
        * wml/WMLIntrinsicEventHandler.h:
        * wml/WMLOnEventElement.cpp:
        (WebCore::eventHandlingParent):
        (WebCore::WMLOnEventElement::registerTask):
        (WebCore::WMLOnEventElement::deregisterTask):
        * wml/WMLOnEventElement.h:
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::removedFromDocument):
        * wml/WMLPostfieldElement.h:
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::removedFromDocument):
        * wml/WMLSetvarElement.h:
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::removedFromDocument):
        (WebCore::WMLTaskElement::registerVariableSetter):
        (WebCore::WMLTaskElement::deregisterVariableSetter):
        (WebCore::WMLTaskElement::storeVariableState):
        * wml/WMLTaskElement.h:
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::removedFromDocument):
        * wml/WMLTimerElement.h:

2009-07-28  David Levin  <levin@chromium.org>

        Suggested by Drew Wilson.

        Speculative gtk build fix, follow up to:
        https://bugs.webkit.org/show_bug.cgi?id=27697

        * GNUmakefile.am:

2009-07-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        [CSS3 Backgrounds and Borders] Drop the prefix from the border-radius
        properties
        https://bugs.webkit.org/show_bug.cgi?id=27578

        [CSS3 Backgrounds and Borders] Handle the / and 4 values in
        border-radius
        https://bugs.webkit.org/show_bug.cgi?id=27584

        Test: fast/borders/border-radius-parsing.html

        Dropped the -webkit- prefix from the individual corner border-radius
        properties. Added border-radius with the / and 4-value syntax, and
        maintained -webkit-border-radius with legacy 2-value syntax.

        * css/CSSComputedStyleDeclaration.cpp:
        (computedProperties): Removed Webkit prefix.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Ditto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Removed Webkit prefix from the
            single-corner properties. Call out to parseBorderRadius() to parse
            border-radius and -webkit-border-radius. 
        (WebCore::completeBorderRadii): Added this helper function that
            completes the values for all four corners when fewer than four are
            specified.
        (WebCore::CSSParser::parseBorderRadius): Added.
        (WebCore::cssPropertyID): Map -webkit-border-*-*-radius to the
            unprefixed property.
        * css/CSSParser.h:
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap): Removed the Webkit prefix. Added an entry
            for border-radius. Kept the entry for -webkit-border-radius.
        * css/CSSPropertyNames.in: Removed the -webkit- prefix from the
            single-corenr properties. Added border-radius. Kept
            -webkit-border-radius because of its conflicting syntax.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Removed the Webkit prefix.
        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap): Ditto.

2009-07-28  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Refactored dedicated-worker-specific code from WorkerThread into DedicatedWorkerThread class.

        WorkerThread needs to be refactored to separate out dedicated-worker functionality.
        https://bugs.webkit.org/show_bug.cgi?id=27697

        This is just a refactoring, so existing tests suffice.

        * GNUmakefile.am:
        Added DedicatedWorkerThread.h/.cpp
        * WebCore.gypi:
        Added DedicatedWorkerThread.h/.cpp
        * WebCore.pro:
        Added DedicatedWorkerThread.h/.cpp
        * WebCore.vcproj/WebCore.vcproj:
        Added DedicatedWorkerThread.h/.cpp
        * WebCore.xcodeproj/project.pbxproj:
        Added DedicatedWorkerThread.h/.cpp
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        Removed code to track pending activity - this is handled by DedicatedWorkerContext::importScripts() now.
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        Removed code to track pending activity - this is handled by DedicatedWorkerContext::importScripts() now.
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::DedicatedWorkerContext):
        (WebCore::DedicatedWorkerContext::addMessage):
        Forwards console messages to parent document.
        (WebCore::DedicatedWorkerContext::importScripts):
        Now sends the updated pending activity status after importing scripts.
        (WebCore::DedicatedWorkerContext::thread):
        Helper routine that casts WorkerThread to DedicatedWorkerThread.
        * workers/DedicatedWorkerContext.h:
        (WebCore::DedicatedWorkerContext::create):
        * workers/DedicatedWorkerThread.cpp: Added.
        (WebCore::DedicatedWorkerThread::create):
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::~DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::createWorkerContext):
        Implementation of the base class factory method to create the appropriate worker context.
        (WebCore::DedicatedWorkerThread::runEventLoop):
        Reports pending activity before running the event loop.
        * workers/DedicatedWorkerThread.h: Added.
        (WebCore::DedicatedWorkerThread::workerObjectProxy):
        Moved from base class.
        * workers/WorkerContext.cpp:
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerContext):
        Now creates DedicatedWorkerThread.
        (WebCore::WorkerMessagingProxy::workerThreadCreated):
        Now is passed a DedicatedWorkerThread.
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        Moved workerObjectProxy param into derived class constructor.
        (WebCore::WorkerThread::workerThread):
        (WebCore::WorkerThread::runEventLoop):
        Moved the event loop execution into a virtual function so DedicatedWorkerThread could report pending activity first.
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::workerContext):

2009-07-28  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Fix V8NPUtils' handling of UTF8 identifiers.

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

        * bindings/v8/V8NPUtils.cpp:
        (getStringIdentifier): Treat the input string as UTF8 instead of ASCII,
            since NPN_GetStringIdentifier() is expecting UTF8.

2009-07-28  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Eric Seidel.

        Misc cleanup in DOM Storage.
        https://bugs.webkit.org/show_bug.cgi?id=27517

        The StorageAreaImpl changes are all for Chromium.  Because the DOM Storage implementation
        runs in a different process from where the Frame object lives, Chromium passes in NULL
        for the sourceFrame.  This affects events and handling privateBrowsing.  Chromium's
        incognito mode does not use the private browsing setting, so that's not a concern.  As for
        events, I've decided to simply disable them for now.

        The StorageNamespaceImpl changes get rid of a stale comment (path is .copy'ed for thread-
        safety) and to add an assert that .copy is only ever called on a SessionStorage namespace.

        Also cleaned up tailing whitespace in several parts of StorageAreaImpl.cpp

        * storage/StorageArea.cpp: Removed.  (It was empty anyway.)
        * storage/StorageAreaImpl.cpp:
        (WebCore::privateBrowsingEnabled): Factored out the check.
        (WebCore::StorageAreaImpl::setItem): Make frame optional.
        (WebCore::StorageAreaImpl::removeItem): ditto
        (WebCore::StorageAreaImpl::clear): ditto
        (WebCore::StorageAreaImpl::dispatchStorageEvent): Disable in Chromium for now.
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl): Remove stale comment.
        (WebCore::StorageNamespaceImpl::copy): Add assert that it's SessionStorage.

2009-07-28  Alpha Lam  <hclam@google.com>

        Reviewed by David Levin.

        [chromium] Default UI controls for <video> has rendering problems
        https://bugs.webkit.org/show_bug.cgi?id=27669

        Fixes the bug that <video> in MediaDocument is 1 pixel tall if
        it is playing an audio file by changing the style to be 32px
        tall.

        Also fixes a problem of default styled audio tag that hides the
        all the time digits by expanding the width to 300px.

        Changed the size and position of the current time and remaining
        display to give enough space for the hour digit to be shown.

        There are no new tests provided because this is already covered
        by existing tests.

        * css/mediaControlsChromium.css:

2009-07-28  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Eric Seidel.

        Fix style in PluginPackage and PluginDatabase.
        Part of https://bugs.webkit.org/show_bug.cgi?id=27651

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::refresh):
        (WebCore::PluginDatabase::findPlugin):
        * plugins/PluginDatabase.h:
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::~PluginPackage):
        (WebCore::PluginPackage::freeLibrarySoon):
        (WebCore::PluginPackage::freeLibraryTimerFired):
        (WebCore::PluginPackage::unloadWithoutShutdown):
        (WebCore::PluginPackage::initializeBrowserFuncs):
        * plugins/PluginPackage.h:

2009-07-28  Anantanarayanan Iyengar  <ananta@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=27769
        The V8 bindings function V8Proxy::createNewContext can be 
        called during frame shutdown where the activeDocumentLoader
        function in FrameLoader can return NULL. Added a check for the
        same.

        No new tests added as this is an edge case where the V8 
        bindings code is reentered via NPAPI during shutdown. It is 
        difficult to write a consistently reproducible test for this.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createNewContext):

2009-07-28  Ivan Posva  <iposva@chromium.org>

        Reviewed by Dimitri Glazkov.

        Associate the CanvasPixelData backing store with the
        indexed properties of the wrapper object.

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

        No new tests: Relying on existing Canvas tests.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertToV8Object):

2009-07-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Nuke all references to JSWorkerContextBase.lut.h, it was removed
        back in April.

        * GNUmakefile.am:

2009-07-28  Robert Agoston  <Agoston.Robert@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Fixed references to script generate-webkitversion.pl, and
        removed duplicated generate-webkitversion.pl

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

        * WebCore.pro:
        * platform/generate-webkitversion.pl: Removed.

2009-07-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dmitry Glazkov.

        Web Inspector: encapsulate ScriptState into the ScriptObject, get rid of
        InspectorJSONObject.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/ScriptArray.cpp:
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::set):
        (WebCore::ScriptArray::length):
        (WebCore::ScriptArray::createNew):
        * bindings/js/ScriptArray.h:
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::construct):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::ScriptObject):
        (WebCore::ScriptObject::set):
        (WebCore::ScriptObject::createNew):
        (WebCore::ScriptGlobalObject::get):
        * bindings/js/ScriptObject.h:
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/ScriptArray.cpp:
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::set):
        (WebCore::ScriptArray::length):
        (WebCore::ScriptArray::createNew):
        * bindings/v8/ScriptArray.h:
        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::construct):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptObject::ScriptObject):
        (WebCore::ScriptObject::set):
        (WebCore::ScriptObject::createNew):
        (WebCore::ScriptGlobalObject::get):
        * bindings/v8/ScriptObject.h:
        (WebCore::ScriptObject::ScriptObject):
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToConsole):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::newScriptArray):
        (WebCore::InspectorFrontend::newScriptObject):
        (WebCore::InspectorFrontend::addMessageToConsole):
        (WebCore::InspectorFrontend::addResource):
        (WebCore::InspectorFrontend::updateResource):
        (WebCore::InspectorFrontend::addDatabase):
        (WebCore::InspectorFrontend::addDOMStorage):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorJSONObject.cpp: Removed.
        * inspector/InspectorJSONObject.h: Removed.
        * inspector/InspectorResource.cpp:
        (WebCore::populateHeadersObject):
        (WebCore::InspectorResource::createScriptObject):
        (WebCore::InspectorResource::updateScriptObject):

2009-07-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Variable substitution recursion seems to have bugs
        https://bugs.webkit.org/show_bug.cgi?id=27726

        Allow <setvar> elements to depend on the value specified by preceeding <setvar> elements.
        Required by the specification - assure it only works in linear order. A setvar element may
        not depend on the variable state of a following setvar element, only the previous ones.

        Extend wml/variable-reference-valid.html layout test to cover these cases.

        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::storeVariableState):

2009-07-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Page title doesn't update after variable substitution, if it contained variables
        https://bugs.webkit.org/show_bug.cgi?id=27725

        Fix bug in containsVariableReference() function, we we're decreasing the nameEndPosition
        too much, leading to a bug with 1-char variable names, which were not detected properly.

        Extend wml/variable-reference-valid.html layout test to cover 1-char variable names.
        Also fixes manual-tests/wml/task-refresh-in-anchor.wml, which happened to use 1-char variable names.

        * wml/WMLVariables.cpp:
        (WebCore::containsVariableReference):

2009-07-28  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        Add WebKit version API to Qt.

        Get the current version of WebKit from WebKit/mac/Configurations/Version.xcconfig
        at compile time and make it available to webkit ports through WebKitVersion.h.

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

        * WebCore.pro: Call generate-webkitversion.pl

2009-07-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed make dist build fix.

        * GNUmakefile.am:

2009-07-28  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Replace hardcoded separator text with proper separator.
        Also adjusts include order as per style guidelines.

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

        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::populate):

2009-07-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Steve Falkenburg.

        Add output directory for VS pre-build steps to enable out-of-tree builds

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

        The tmp.obj file is now placed in the intermediate build directory.

        * WebCore.vcproj/WebCoreCommon.vsprops:

2009-07-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add inspected node using public console API.

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

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype.addInspectedNode):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):

2009-07-28  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] <do> elements with a <noop> task shouldn't be exposed to the user
        https://bugs.webkit.org/show_bug.cgi?id=27724

        Fix WMLNoopElement to disable it's parent WMLDoElement, as required by the spec.
        Moved manual-tests/wml/task-noop-in-do.wml to LayoutTests/fast/wml/task-noop-in-do.wml.

        * manual-tests/wml/task-noop-in-do.wml: Removed.
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::insertedIntoDocument):

2009-07-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Disable some compiler warnings for the win build
        https://bugs.webkit.org/show_bug.cgi?id=27709

        * WebCore.pro: Move the msvc options to WebKit.pri

2009-07-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Tor Arne Vestbø

        Make equality checks for logging channel names ignore casing.

        * platform/Logging.cpp:
        (WebCore::getChannelFromName):

2009-07-28  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Refactor ResourceHandleSoup - make start* functions static
        https://bugs.webkit.org/show_bug.cgi?id=27687

        * platform/network/ResourceHandle.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startData):
        (WebCore::startHttp):
        (WebCore::):

2009-07-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Do not cache the pango layout in the object, since the layout of
        the page can change between calls.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:

2009-07-23  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Simplify management of Nodes in weak handles callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=27628

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::weakNodeCallback):

2009-07-28  Brian Weinstein  <bweinstein@apple.com>

        Rubber-stamped by David Levin.

        Fix error handling of GetIconInfo (returns a bool).

        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageIconForCachedImage):

2009-07-27  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Fix of <rdar://5015949> Drag Icon is not produced for over sized images.
        
        Implemented the createDragImageIconForCachedImage function by using the Windows 
        SHFILEINFO structure.

        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageIconForCachedImage):

2009-07-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Split up V8DOMMap.cpp by class
        https://bugs.webkit.org/show_bug.cgi?id=27685

        No behavior change.  Just copy-and-paste.

        * WebCore.gypi:
        * bindings/v8/ChildThreadDOMData.cpp: Added.
        (WebCore::ChildThreadDOMData::ChildThreadDOMData):
        (WebCore::ChildThreadDOMData::getStore):
        * bindings/v8/ChildThreadDOMData.h: Added.
        * bindings/v8/DOMData.cpp: Added.
        (WebCore::DOMData::DOMData):
        (WebCore::DOMData::getCurrent):
        (WebCore::DOMData::getCurrentMainThread):
        (WebCore::DOMData::handleWeakObject):
        (WebCore::DOMData::ensureDeref):
        (WebCore::DOMData::derefObject):
        (WebCore::DOMData::derefDelayedObjects):
        (WebCore::DOMData::derefDelayedObjectsInCurrentThread):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/DOMData.h: Added.
        (WebCore::):
        * bindings/v8/DOMDataStore.cpp: Added.
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
        (WebCore::DOMDataStore::allStores):
        (WebCore::DOMDataStore::allStoresMutex):
        (WebCore::DOMDataStore::getDOMWrapperMap):
        (WebCore::forget):
        (WebCore::DOMDataStore::weakDOMObjectCallback):
        (WebCore::DOMDataStore::weakActiveDOMObjectCallback):
        (WebCore::DOMDataStore::weakNodeCallback):
        (WebCore::DOMDataStore::weakSVGElementInstanceCallback):
        (WebCore::DOMDataStore::weakSVGObjectWithContextCallback):
        * bindings/v8/DOMDataStore.h: Added.
        (WebCore::DOMDataStore::):
        (WebCore::DOMDataStore::InternalDOMWrapperMap::InternalDOMWrapperMap):
        (WebCore::DOMDataStore::InternalDOMWrapperMap::forgetOnly):
        (WebCore::DOMDataStore::domData):
        (WebCore::DOMDataStore::domNodeMap):
        (WebCore::DOMDataStore::domObjectMap):
        (WebCore::DOMDataStore::activeDomObjectMap):
        (WebCore::DOMDataStore::domSvgElementInstanceMap):
        (WebCore::DOMDataStore::domSvgObjectWithContextMap):
        * bindings/v8/MainThreadDOMData.cpp: Added.
        (WebCore::MainThreadDOMData::MainThreadDOMData):
        (WebCore::MainThreadDOMData::getStore):
        * bindings/v8/MainThreadDOMData.h: Added.
        * bindings/v8/ScopedDOMDataStore.cpp: Added.
        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
        (WebCore::ScopedDOMDataStore::~ScopedDOMDataStore):
        * bindings/v8/ScopedDOMDataStore.h: Added.
        * bindings/v8/StaticDOMDataStore.cpp: Added.
        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
        * bindings/v8/StaticDOMDataStore.h: Added.
        * bindings/v8/V8DOMMap.cpp:

2009-07-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7091036> REGRESSION: Microsoft Messenger crashes during file send/receive due to use of WebKit on non-main thread

        Add a method for detecting if we're being used within Microsoft Messenger.

        * WebCore.base.exp: Export applicationIsMicrosoftMessenger and sort existing entries.
        * platform/mac/RuntimeApplicationChecks.h:
        * platform/mac/RuntimeApplicationChecks.mm:
        (WebCore::applicationIsMicrosoftMessenger):

2009-07-27  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Implement EventListener::reportError for V8 event listeners in worker context. 
        https://bugs.webkit.org/show_bug.cgi?id=27731

        * bindings/v8/V8WorkerContextEventListener.cpp:
        (WebCore::V8WorkerContextEventListener::reportError):
        * bindings/v8/V8WorkerContextEventListener.h:

2009-07-27  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel and David Levin.

        Re-apply chromium/skia border fix (originally landed in r46157,
        reverted in r46363), since it was not the cause of the reliability
        failures in Chromium.

        http://bugs.webkit.org/show_bug.cgi?id=27388

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintForStroking):

2009-07-27  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        createMarkup does not handle CSS properly
        https://bugs.webkit.org/show_bug.cgi?id=27660

        This patch isolates code that creates markup for styles in addStyleMarkup
        It also makes all presentational elements (u, s, strike, i, em, b, strong) special ancestor in createMarkup
        so that we can assume no text decoration style is passed to addStyleMarkup.

        * editing/markup.cpp:
        (WebCore::propertyMissingOrEqualToNone): Changed the first argument from CSSMutableStyleDecleration to CSSStyleDeclaration
        (WebCore::isElementPresentational): Used to be elementHasTextDecorationProperty, now supports presentational tags
        (WebCore::addStyleMarkup): Adds markup for style span and div
        (WebCore::createMarkup): Uses isElementPresentational and addStyleMarkup

2009-07-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        fix more obvious global object lookups
        https://bugs.webkit.org/show_bug.cgi?id=27745

        No new tests for these changes.  I believe in many cases
        testing to be impossible.  Lack of testing justification next to
        each change below.  The remaining pieces of bug 27634 will all
        need tests.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::updateDocument): not testable.
        * bindings/js/JSDataGridColumnListCustom.cpp:
        (WebCore::JSDataGridColumnList::nameGetter): no testing for this incomplete feature.
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent): would require outer frame to trigger an event in the inner frame
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS): covered by other tests, always correct to pass the globalObject through.
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::JSHTMLElement::pushEventHandlerScope): unclear when this could be triggered.
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::remove): toJS seems superfluous here to begin with.
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode): would require outer frame to trigger inner frame event.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::jsObjectForPluginElement): only used for NPAPI binding, unclear how to test.
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener): unclear how to test.
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set): unclear how to test/inspector only.
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject): unclear how to test.
        * bindings/objc/DOMInternal.mm:
        (-[WebScriptObject _initializeScriptDOMNodeImp]): unclear how to test.

2009-07-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] 'title' attribute handling not correct for <a> / <anchor> elements
        https://bugs.webkit.org/show_bug.cgi?id=27720

        Unify title() implementation in WMLElement instead of several copies of the same logic.
        We forgot WMLAnchorElement/WMLAElement, that lead to bugs. Fixes hovering links in the
        WML manual-test suite.

        * wml/WMLCardElement.cpp:
        * wml/WMLCardElement.h:
        * wml/WMLElement.cpp:
        (WebCore::WMLElement::title):
        * wml/WMLElement.h:
        * wml/WMLOptGroupElement.cpp:
        * wml/WMLOptGroupElement.h:
        * wml/WMLSelectElement.cpp:
        * wml/WMLSelectElement.h:

2009-07-27  Adam Treat  <adam.treat@torchmobile.com>

        Speculative build fix for Windows and WinCE.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load):

2009-07-27  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27474
        Fixes crashes due to renderer getting destroyed in updateLayout.
        We need to call updateLayout before we call into the renderer.
        Removed the updateLayout call from RenderTextControl and moved it
        into the calling sites.
        
        Also changes updateLayout to updateLayoutIgnorePendingStylesheets so
        this works with pending stylesheets. Unfortunately, this seems to be
        untestable. Loading an external stylesheet and then having an inline
        script hit this code did not result in an pending stylesheets.
        
        The are other cases of this bug in the rendering code. I'll file a 
        followup bug to audit the calls to updateLayout.

        Test: fast/dom/text-control-crash-on-select.html

        * dom/Document.h:
        (WebCore::Document::inStyleRecalc): Added so the ASSERTs in updateFocusAppearance
            and setSelectionRange could deal with cases of reentrancy into updateLayout
            calls. This happens in a couple layout tests.
        * dom/InputElement.cpp:
        (WebCore::InputElement::updateSelectionRange):
        * html/HTMLInputElement.cpp:
        (WebCore::isTextFieldWithRendererAfterUpdateLayout):
        (WebCore::HTMLInputElement::setSelectionStart):
        (WebCore::HTMLInputElement::setSelectionEnd):
        (WebCore::HTMLInputElement::select):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::rendererAfterUpdateLayout):
        (WebCore::HTMLTextAreaElement::setSelectionStart):
        (WebCore::HTMLTextAreaElement::setSelectionEnd):
        (WebCore::HTMLTextAreaElement::select):
        (WebCore::HTMLTextAreaElement::setSelectionRange):
        (WebCore::HTMLTextAreaElement::updateFocusAppearance):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setSelectionRange):

2009-07-27  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Dave Levin.

        [V8] Remove parameterless frame/window retrieval methods from V8Proxy.
        https://bugs.webkit.org/show_bug.cgi?id=27737

        Refactoring, no new behavior, covered by existing tests.

        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/V8NPUtils.cpp:
        (convertV8ObjectToNPVariant): Ditto.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieve): Ditto.
        (WebCore::V8Proxy::canAccessPrivate): Ditto.
        * bindings/v8/V8Proxy.h: Removed parameterless retrieveWindow/retrieveProxy decls.
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Changed to use V8Proxy::retrieveFrameForCurrentContext().
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Ditto.

2009-07-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] 'onpick' intrinsic event handling missing
        https://bugs.webkit.org/show_bug.cgi?id=27723

        Trigger 'onpick' intrinsic events from WMLOptionElement::setSelectedState().
        All was in place, just forgot to enable the relevant code.

        Fixes manual-tests/wml/select-onpick-event.wml
        Test: wml/option-element-onpick.html

        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::setSelectedState):

2009-07-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27735
        Give a helpful name to JSLock constructor argument

        * bindings/js/GCController.cpp:
        (WebCore::collect):
        (WebCore::GCController::gcTimerFired):
        (WebCore::GCController::garbageCollectNow):
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::handleEvent):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSInspectorBackendCustom.cpp:
        (WebCore::JSInspectorBackend::currentCallFrame):
        (WebCore::JSInspectorBackend::profiles):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptArray.cpp:
        (WebCore::ScriptArray::set):
        (WebCore::ScriptArray::createNew):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        (WebCore::ScriptCachedFrameData::clear):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::initScript):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::bindingRootObject):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::jsObjectForPluginElement):
        (WebCore::ScriptController::clearScriptObjects):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::appendArgument):
        (WebCore::ScriptFunctionCall::call):
        (WebCore::ScriptFunctionCall::construct):
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptObject::set):
        (WebCore::ScriptObject::createNew):
        (WebCore::ScriptGlobalObject::set):
        (WebCore::ScriptGlobalObject::get):
        (WebCore::ScriptGlobalObject::remove):
        * bindings/js/ScriptObjectQuarantine.cpp:
        (WebCore::quarantineValue):
        (WebCore::getQuarantinedScriptObject):
        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::getString):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        (WebCore::WorkerScriptController::evaluate):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject stringRepresentation]):
        (-[WebScriptObject webScriptValueAtIndex:]):
        (-[WebScriptObject setWebScriptValueAtIndex:value:]):
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_GetProperty):
        (_NPN_SetProperty):
        (_NPN_RemoveProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        (_NPN_Enumerate):
        (_NPN_Construct):
        * bridge/c/c_class.cpp:
        (JSC::Bindings::CClass::~CClass):
        (JSC::Bindings::CClass::methodsNamed):
        (JSC::Bindings::CClass::fieldNamed):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::moveGlobalExceptionToExecState):
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        (JSC::Bindings::CInstance::invokeConstruct):
        (JSC::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_runtime.cpp:
        (JSC::Bindings::CField::valueFromInstance):
        (JSC::Bindings::CField::setValueToInstance):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        (JSC::Bindings::convertNPVariantToValue):
        * bridge/jni/jni_class.cpp:
        (JavaClass::JavaClass):
        (JavaClass::~JavaClass):
        * bridge/jni/jni_instance.cpp:
        (JavaInstance::stringValue):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::getSlot):
        (JavaJSObject::setSlot):
        (JavaJSObject::toString):
        (JavaJSObject::convertValueToJObject):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jni_objc.mm:
        (JSC::Bindings::dispatchJNICall):
        * bridge/jni/jni_runtime.cpp:
        (JavaMethod::signature):
        * bridge/jni/jni_runtime.h:
        (JSC::Bindings::JavaString::JavaString):
        (JSC::Bindings::JavaString::_commonInit):
        (JSC::Bindings::JavaString::~JavaString):
        (JSC::Bindings::JavaString::UTF8String):
        * bridge/jni/jni_utility.cpp:
        (JSC::Bindings::convertValueToJValue):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeDefaultMethod):
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcField::valueFromInstance):
        (JSC::Bindings::ObjcField::setValueToInstance):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):
        (JSC::Bindings::convertNSStringToString):
        (JSC::Bindings::convertObjcValueToValue):
        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::removeFromCache):
        (JSC::Bindings::QtInstance::~QtInstance):
        (JSC::Bindings::QtInstance::getQtInstance):
        (JSC::Bindings::QtInstance::createRuntimeObject):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):
        (JSC::Bindings::QtConnectionObject::execute):
        * bridge/runtime.cpp:
        (JSC::Bindings::Instance::createRuntimeObject):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addScriptProfile):
        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::evaluate):
        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::recompileAllJSFunctions):
        * inspector/JavaScriptProfileNode.cpp:
        (WebCore::getTotalTime):
        (WebCore::getSelfTime):
        (WebCore::getTotalPercent):
        (WebCore::getSelfPercent):
        (WebCore::getNumberOfCalls):
        (WebCore::getChildren):
        (WebCore::getParent):
        (WebCore::getHead):
        (WebCore::getVisible):
        (WebCore::getCallUID):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::getString):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::bindingInstance):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::stop):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::dispatchNPEvent):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):

2009-07-27  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        WINCE PORT: Make plugin work for WINCE
        https://bugs.webkit.org/show_bug.cgi?id=27713

        * plugins/win/PluginDatabaseWin.cpp:
        (SHGetValue):
        (PathRemoveFileSpec):
        (WebCore::addWindowsMediaPlayerPluginDirectory):
        (WebCore::addMacromediaPluginDirectories):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::registerPluginView):
        (WebCore::PluginView::wndProc):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::init):

2009-07-27  Joseph Pecoraro  <joepeck02@gmail.com>

        Inspector: Tab Through Element Attributes and CSS Properties When Editing

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

        Reviewed by Timothy Hatcher.

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype._startEditing): refactored parameter
        (WebInspector.ElementsTreeElement.prototype._addNewAttribute): refactored to remove excess
        (WebInspector.ElementsTreeElement.prototype._triggerEditAttribute): provide an attribute name and this will start editing it
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted.moveToNextAttributeIfNeeded): move between attributes
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertiesSection.prototype.findTreeElementWithName): search through treeElements for a style property name
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty): initialize a blank property for adding new properties
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle): add references to the name and value elements
        (WebInspector.StylePropertyTreeElement.prototype.):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.js:
        (WebInspector.startEditing.editingCommitted): include the move direction as a parameter to the commit callback
        (WebInspector.startEditing.element.handleKeyEvent): handle the tab key to specify the move direction
        (WebInspector.startEditing):

2009-07-27  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Adam Treat.

        Add mapping FontWeight to QFont::Weight values as requested via FIXME.
        https://bugs.webkit.org/show_bug.cgi?id=27663

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::toQFontWeight):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2009-07-27  Jakub Wieczorek  <faw217@gmail.com>

         Reviewed by Adam Treat.

         When clearing the plugin database, clear also the timestamp map.

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

         Currently, if we clear the database, it will still think that it is up
         to date with the plugin directories so refreshing the database again
         after changing the search paths may not work.

         * plugins/PluginDatabase.cpp:
         (WebCore::PluginDatabase::clear):

2009-07-27  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        Add in trivial implementation of FontPlatformData::description() for
        linux to fix build bustage in chromium.

        Fix chromium linux build by adding missing function implementation.
        https://bugs.webkit.org/show_bug.cgi?id=27732

        Tested with a build of chromium on linux.

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::description):
        * platform/graphics/chromium/FontPlatformDataLinux.h:

2009-07-27  Brent Fulgham  <bfulgham@webkit.org>

        Build correct, no review.

        Final correction for WinCairo builds.
        CoreServices only exists in Apple builds, but
        some of its internal includes (e.g., <windows.h>) are needed
        for other Windows targets.

        * WebCorePrefix.h: When building for WinCairo, make sure
          to include <windows.h>, <stdio.h>, and <ConditionalMacros.h>

2009-07-27  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25552
        Added new "pattern" attribute to HTMLInputElement and validation code
        (validity.patternMismatch) as per HTML5 specs.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#attr-input-pattern

        Tests: fast/forms/ValidityState-002.html
               fast/forms/ValidityState-patternMismatch-001.html
               fast/forms/ValidityState-patternMismatch-002.html
               fast/forms/ValidityState-patternMismatch-003.html
               fast/forms/ValidityState-patternMismatch-004.html
               fast/forms/ValidityState-patternMismatch-005.html
               fast/forms/ValidityState-patternMismatch-006.html
               fast/forms/ValidityState-patternMismatch-007.html
               fast/forms/pattern-attribute-001.html
               fast/forms/pattern-attribute-002.html
               fast/forms/pattern-attribute-003.html

        * html/HTMLAttributeNames.in: pattern attribute
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::patternMismatch): method definition
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::patternMismatch): validation method
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * html/ValidityState.h:
        (WebCore::ValidityState::patternMismatch): validation flag

2009-07-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Manual WML tests aren't properly working
        https://bugs.webkit.org/show_bug.cgi?id=27718

        Fix file paths in the manual WML layout tests, remove unneeded tests (already covered by DRT tests).
        Add missing resources directory and test image. Reformat all testcases to a common style.
        Add new StartTests.wml file, which should be used as starting point to crawl through the manual tests.

        Filing bugs soon for all tests exposing bugs (7 in total).

        * manual-tests/wml/StartTests.wml: Added.
        * manual-tests/wml/a-br-element.wml:
        * manual-tests/wml/a-element.wml:
        * manual-tests/wml/a-img-element.wml:
        * manual-tests/wml/access-target.wml:
        * manual-tests/wml/anchor-br-element.wml:
        * manual-tests/wml/anchor-element.wml:
        * manual-tests/wml/anchor-img-element.wml:
        * manual-tests/wml/card-newcontext-attr.wml:
        * manual-tests/wml/card-onenterbackward.wml:
        * manual-tests/wml/card-onenterforward.wml:
        * manual-tests/wml/card-ontimer.wml:
        * manual-tests/wml/card-title-attr.wml: Removed.
        * manual-tests/wml/deck-access-control.wml:
        * manual-tests/wml/go-element.wml: Removed.
        * manual-tests/wml/input-emptyok.wml: Removed.
        * manual-tests/wml/input-format.wml:
        * manual-tests/wml/onevent-go.wml:
        * manual-tests/wml/onevent-noop.wml:
        * manual-tests/wml/onevent-prev.wml:
        * manual-tests/wml/onevent-refresh.wml:
        * manual-tests/wml/onevent-shadow.wml:
        * manual-tests/wml/postfield-get.wml: Removed.
        * manual-tests/wml/postfield-post.wml: Removed.
        * manual-tests/wml/resources: Added.
        * manual-tests/wml/resources/smiley.png: Added.
        * manual-tests/wml/select-element.wml:
        * manual-tests/wml/select-onpick-event.wml:
        * manual-tests/wml/setvar-element.wml:
        * manual-tests/wml/targetdeck.wml:
        * manual-tests/wml/task-go-in-anchor.wml:
        * manual-tests/wml/task-noop-in-do.wml:
        * manual-tests/wml/task-noop-in-onevent.wml: Removed.
        * manual-tests/wml/task-prev-in-anchor.wml:
        * manual-tests/wml/task-refresh-in-anchor.wml:
        * manual-tests/wml/template-go.wml:
        * manual-tests/wml/template-onevent.wml: Removed.
        * manual-tests/wml/template-ontimer.wml:
        * manual-tests/wml/timer.wml:
        * manual-tests/wml/variable-substitution.wml:

2009-07-27  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a regression introduced in r42671, which caused the js event 
        object to be hidden (some websites depend on being able to access it).

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

        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler): Make the event object visible to javascript, instead of hidden.

2009-07-27  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Removing a no-op block of code in DatabaseTracker.cpp that
        should've been removed in the patch for bug 26054.

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

        All tests in WebCore/storage pass.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::fullPathForDatabase): Removed a no-op
        block of code that was moved to SQLiteFileSystem.cpp and should
        have been removed from DatabaseTracker.cpp

2009-07-27  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Fix error handling in dedicated worker and worker context.
        https://bugs.webkit.org/show_bug.cgi?id=27525

        The following problems have been fixed:
        1) The uncaught runtime script error is not reported using the
        WorkerGlobalScope object's onerror attribute.
        2) If the error is still not handled afterwards (onerror attribute
        is not defined as a function or it returns true), the error should
        be reported back to the associated Worker object by firing an
        ErrorEvent.
        3) If the error is still not handled by the associated Worker
        object, the error should be reported to the user.

        Test: fast/workers/worker-script-error.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::reportError):
        * bindings/js/JSEventListener.h:
        * dom/EventListener.h:
        (WebCore::EventListener::reportError): adds a function to call
        EventListener as a function with 3 arguments to report an error.
        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::dispatchScriptErrorEvent):
        * workers/AbstractWorker.h:
        * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::reportException):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::reportException):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::performTask):
        * workers/WorkerMessagingProxy.h:

2009-07-27  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] History handling / page cache / loading is buggy and depends on several hacks
        https://bugs.webkit.org/show_bug.cgi?id=27707

        Redesign WML history/loading handling. In detail:

        - Remove FrameLoader::setForceReloadWmlDeck(). WML used to force a special loading behaviour
          by calling this method from WMLGoElement & friends - instead teach FrameLoader to detect
          WML content itself.

          WML content is usually a standalone WML document (isWMLDocument()=true) or as special case
          an XHTML document which embeds a WML document (that's the way the WML layout tests work).
          Force WML loading behaviour even for XHTML document which embed WML documents. This only
          applies to our layout tests, not for any real world site. Though it gives us a perfect
          way to test the WML loading code even when we're not operating on a standalone WML document.

          Whenever a WMLCardElement is inserted into the document it will check wheter it's inserted
          in a standalone WML document or wheter the main frame document is different. If it differs
          the main frame documents' "containsWMLContent" property is set to true.

          -> Make FrameLoader::shouldReload() use the new frameContainsWMLContent() method, which
             checks if the associated frame document is a WML document or wheter it contains WML content.

        - Change FrameLoader::loadItem() to use the new frameContainsWMLContent() method for 'shouldScroll'
          detection. WML documents (or those containing WML content) always want new loads even for in-page
          navigation. No "scroll to anchor" mechanism should apply.

        - Modify FrameLoader::canCachePageContainingThisFrame() to check for !frameContainsWMLContent().
          WML pages should never be cached, potential security problem due the use of variables (per spec).

        Add two new WML tests which were broken before, testing onenterforward/onenterbackward event handling
        and history navigation (<prev/> task).

        Tests: wml/enter-card-with-events.html
               wml/enter-first-card-with-events.html

        * dom/Document.cpp: Initialize new 'm_containsWMLContent' property.
        (WebCore::Document::Document):
        * dom/Document.h: Add new helper methods and 'm_containsWMLContent" variable (explained above).
        (WebCore::Document::setContainsWMLContent):
        (WebCore::Document::containsWMLContent):
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::clearWMLPageHistory): Renamed from clearWmlPageHistory() & slight cleanup.
        * history/BackForwardList.h:
        * loader/FrameLoader.cpp: Rework WML loading behaviour (explained above).
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::frameContainsWMLContent):
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::shouldReload):
        (WebCore::FrameLoader::loadItem):
        * loader/FrameLoader.h:
        * wml/WMLCardElement.cpp: 
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded): No need anymore to manually track history length.
        (WebCore::WMLCardElement::insertedIntoDocument): Handle setting containsWMLContent on the main frame document.
        * wml/WMLGoElement.cpp: 
        (WebCore::WMLGoElement::executeTask): Remove call to FrameLoader::setForceReloadWmlDeck()
        * wml/WMLPageState.cpp: Remove 'm_historyLength' - no need anymore to track history length on our own.
        (WebCore::WMLPageState::WMLPageState):
        (WebCore::WMLPageState::dump):
        (WebCore::WMLPageState::reset):
        * wml/WMLPageState.h:

2009-07-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Adam Roben.

        Fix Chromium build breakage introduced in 46388.

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

        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        (WebCore::FontPlatformData::description):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:

2009-07-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Add some more debug logging to PluginViewMac.

        * plugins/mac/PluginViewMac.cpp:

2009-07-27  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Jan Michael Alonzo.

        Remove dead code from the GTK NPAPI implementation.

        * plugins/gtk/PluginViewGtk.cpp:

2009-07-27  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Buildfix on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=27702

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::hookedEndPaint):
            Constraint of (*endPaint) operand modified from "g" to "m" (memory) in inline 
            assembly, because with "g" constraint, wrong assembly code generated.

2009-07-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebCore bindings: Implement ScriptArray bindings.

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

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptArray.cpp: Added.
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::handleException):
        (WebCore::ScriptArray::set):
        (WebCore::length):
        (WebCore::ScriptArray::createNew):
        * bindings/js/ScriptArray.h: Added.
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::jsArray):
        * bindings/v8/ScriptArray.cpp: Added.
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::set):
        (WebCore::ScriptArray::length):
        (WebCore::ScriptArray::createNew):
        * bindings/v8/ScriptArray.h: Added.
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::~ScriptArray):

2009-07-27  Brent Fulgham  <bfulgham@webkit.org>

        Build correct, no review.

        Change in r46407 broke Apple Windows build.
        Switch to WinCairo-only test, to avoid any
        other platform break.

        * WebCorePrefix.h: 

2009-07-26  Brent Fulgham  <bfulgham@webkit.org>

        Build correct, no review.

        Change in r46407 broke Apple Windows build.

        * WebCorePrefix.h: Use WTF_PLATFORM_CG to decide if
          CoreServices.h should be included.

2009-07-26  Brent Fulgham  <bfulgham@webkit.org>

        Build correction, no review.

        Change in r46195 broke WinCairo build.

        * WebCorePrefix.h: CoreServices should be ignored
          for non-Apple build.

2009-07-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Implement the breakpoints sidebar pane.
        This change adds simple UI support into the existing
        BreakpointSidebarPane.

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

        * inspector/front-end/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.set enabled):
        (WebInspector.Breakpoint.prototype.get label):
        (WebInspector.Breakpoint.prototype.get id):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane):
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement):
        (WebInspector.BreakpointsSidebarPane.prototype._appendBreakpointElement.labelClicked):
        (WebInspector.BreakpointsSidebarPane.prototype.removeBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.scriptOrResourceForID):
        * inspector/front-end/inspector.css:

2009-07-16  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Oliver Hunt.

        Canvas: rotation of 'no-repeat' pattern still has small error
        https://bugs.webkit.org/show_bug.cgi?id=26749

        Use 1<<22 as steps of no-repeat pattern to make the error less
        than 0.5.  The previous value may cause 1 pixel errors.

        Add another test to show this bug clearly.
        Also add png expected image which was missing in the previous patch.

        Test: fast/canvas/image-pattern-rotate.html

        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):

2009-07-25  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Windows build break due to warning C4819
        https://bugs.webkit.org/show_bug.cgi?id=27416

        Disable C4819 warning to fix build.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCore.vcproj:

2009-07-25  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Kevin McCullough.

        Inspector: Keyboard Shortcuts to Switch Panels
        https://bugs.webkit.org/show_bug.cgi?id=27286

        * inspector/front-end/inspector.js:
        (WebInspector.loaded): save a list of the order of the panels
        (WebInspector.documentKeyDown): handle the keyboard shortcuts to traverse the panels

2009-07-25  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by George Staikos.

        [Qt] Fix build break after r46369
        https://bugs.webkit.org/show_bug.cgi?id=27680

        * WebCore.pro:

2009-07-25  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Variable substitution is buggy
        https://bugs.webkit.org/show_bug.cgi?id=27677

        Substitute variables upon attach() time instead of insertedIntoDocument(). Otherwhise variable substitution
        won't work during inter-deck jumps (same URL, different fragment). Covered by new test fast/wml/newcontext-same-deck.html.

        * dom/Text.cpp:
        (WebCore::Text::attach):
        * dom/Text.h:

2009-07-25  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] WMLDoElement doesn't update its RenderButton object upon attach()
        https://bugs.webkit.org/show_bug.cgi?id=27676

        WMLDoElement needs to implement attach() and call updateFromElement() on its associated RenderButton.
        Mimics HTMLButtonElement/HTMLFormControlElement behaviour and fixes several painting/styling issues covered by existing tests in fast/wml.

        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::attach):
        * wml/WMLDoElement.h:

2009-07-25  Pavel Feldman  <pfeldman@chromium.org>

        Fix Windows build breakage introduced in 46390.

        * WebCore.vcproj/WebCore.vcproj:

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Oliver Hunt.

        Inspector: Properties Should be Sorted more Naturally
        https://bugs.webkit.org/show_bug.cgi?id=27329

        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update): use the displaySort when showing properties
        (WebInspector.ObjectPropertiesSection.prototype._displaySort): alphaNumerical sort
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate): use the displaySort when showing properties
        * inspector/front-end/utilities.js:
        (Object.sortedProperties): allow for an optional sorting function in Object.sortedProperties

2009-07-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Split InspectorController into InspectorController
        and InspectorBackend. Everything frontend needs from InspectorController
        will slowly migrate into the InspectorBackend.

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

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSInspectorBackendCustom.cpp: Added.
        (WebCore::JSInspectorBackend::highlightDOMNode):
        (WebCore::JSInspectorBackend::search):
        (WebCore::JSInspectorBackend::databaseTableNames):
        (WebCore::JSInspectorBackend::inspectedWindow):
        (WebCore::JSInspectorBackend::setting):
        (WebCore::JSInspectorBackend::setSetting):
        (WebCore::JSInspectorBackend::wrapCallback):
        (WebCore::JSInspectorBackend::currentCallFrame):
        (WebCore::JSInspectorBackend::profiles):
        * bindings/v8/custom/V8InspectorBackendCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/js/JSInspectorControllerCustom.cpp: Removed.
        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/ScriptObject.h:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/ScriptObject.h:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8InspectorControllerCustom.cpp: Removed.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::windowScriptObjectAvailable):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorBackend):
        * inspector/InspectorBackend.cpp: Added.
        * inspector/InspectorBackend.h: Added.
        (WebCore::InspectorBackend::create):
        (WebCore::InspectorBackend::inspectorController):
        * inspector/InspectorBackend.idl: Added.
        * inspector/InspectorController.idl: Removed.
        * inspector/front-end/Resource.js:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:

2009-07-25  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by George Staikos.

        Update WebCore/page/Frame.cpp/h to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27654

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::~Frame):
        (WebCore::Frame::setDocument):
        (WebCore::Frame::firstRectForRange):
        (WebCore::createRegExpForLabels):
        (WebCore::Frame::searchForLabelsBeforeElement):
        (WebCore::Frame::matchLabelsAgainstElement):
        (WebCore::Frame::selectionLayoutChanged):
        (WebCore::Frame::setZoomFactor):
        (WebCore::Frame::reapplyStyles):
        (WebCore::Frame::isContentEditable):
        (WebCore::Frame::computeAndSetTypingStyle):
        (WebCore::Frame::selectionStartStylePropertyValue):
        (WebCore::Frame::selectionComputedStyle):
        (WebCore::Frame::applyEditingStyleToBodyElement):
        (WebCore::Frame::removeEditingStyleFromBodyElement):
        (WebCore::Frame::applyEditingStyleToElement):
        (WebCore::Frame::selectionBounds):
        (WebCore::Frame::currentForm):
        (WebCore::Frame::revealSelection):
        (WebCore::Frame::styleForSelectionStart):
        (WebCore::Frame::setSelectionFromNone):
        (WebCore::Frame::findString):
        (WebCore::Frame::markAllMatchesForText):
        (WebCore::Frame::setMarkedTextMatchesAreHighlighted):
        (WebCore::Frame::clearFormerDOMWindow):
        (WebCore::Frame::unfocusWindow):
        (WebCore::Frame::respondToChangedSelection):
        (WebCore::Frame::documentAtPoint):
        * page/Frame.h:
        (WebCore::Frame::create):
        (WebCore::Frame::displayStringModifiedByEncoding):
        (WebCore::Frame::pageZoomFactor):
        (WebCore::Frame::textZoomFactor):

2009-07-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Add functions to print the glyph page trees for debugging
        https://bugs.webkit.org/show_bug.cgi?id=27671

        * platform/graphics/FontData.h: Defined a description() method.

        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::showSubtree): Added. Prints the node and
            its descendants.
        (showGlyphPageTrees): Added. Prints all glyph page trees.
        (showGlyphPageTree): Added. Prints the glyph page tree for a given page.
        * platform/graphics/GlyphPageTreeNode.h:

        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::description): Added.

        * platform/graphics/SegmentedFontData.h:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::description): Added. Uses the platform data
            as the description for non-svg, non-custom fonts.
        * platform/graphics/SimpleFontData.h:

        * platform/graphics/gtk/FontPlatformData.h:
        * platform/graphics/gtk/FontPlatformDataGtk.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.
        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.

        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::description): Added. Returns the
            description of the CGFont, the size and the synthetic style flags,
            if set.

        * platform/graphics/qt/FontPlatformData.h:
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.

        * platform/graphics/win/FontPlatformData.h:
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.

        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.
        * platform/graphics/wince/FontPlatformData.h:

        * platform/graphics/wx/FontPlatformData.h:
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::description): Added. Returns a null string.

2009-07-24  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        SVG and XPath memory leaks in V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=27488

        Add proper 'create' methods to SVGPodTypeWrappers and
        XPathNSResolvers in the V8 bindings to avoid memory leaks.

        Introduce convertToV8Object methods that accept PassRefPtrs and
        clean up the use of get() and release() on RefPtrs.
        
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        * bindings/v8/V8SVGPODTypeWrapper.h:
        (WebCore::V8SVGPODTypeWrapperCreatorForList::create):
        (WebCore::V8SVGPODTypeWrapperCreatorForList::V8SVGPODTypeWrapperCreatorForList):
        (WebCore::V8SVGStaticPODTypeWrapper::create):
        (WebCore::V8SVGStaticPODTypeWrapper::V8SVGStaticPODTypeWrapper):
        (WebCore::V8SVGStaticPODTypeWrapperWithPODTypeParent::create):
        (WebCore::V8SVGStaticPODTypeWrapperWithPODTypeParent::V8SVGStaticPODTypeWrapperWithPODTypeParent):
        (WebCore::V8SVGStaticPODTypeWrapperWithParent::create):
        (WebCore::V8SVGStaticPODTypeWrapperWithParent::V8SVGStaticPODTypeWrapperWithParent):
        (WebCore::V8SVGDynamicPODTypeWrapper::create):
        (WebCore::V8SVGDynamicPODTypeWrapper::V8SVGDynamicPODTypeWrapper):
        (WebCore::V8SVGDynamicPODTypeWrapperCache::lookupOrCreateWrapper):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ClientRectListCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::create):
        * bindings/v8/custom/V8CustomXPathNSResolver.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-24  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Jon Honeycutt.

        Fix of <rdar://6310538> Middle-click panning should be springloaded while dragging
        https://bugs.webkit.org/show_bug.cgi?id=21794
        
        Create two new booleans to determine whether we have done a springloaded pan scroll, and update
        the name of setPanScrollCursor to updatePanScrollState to more accurately describe what the function
        does. 

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Initialized two new booleans.
        (WebCore::EventHandler::autoscrollTimerFired):
        (WebCore::EventHandler::updatePanScrollState): Renamed from setPanScrollCursor.
        (WebCore::EventHandler::stopAutoscrollTimer): Clear the pan scrolling in progress flag.
        (WebCore::EventHandler::handleMouseReleaseEvent): Clear the pan scrolling button pressed flag.
        * page/EventHandler.h:

2009-07-24  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=27657
        Add more wince port files to WebCore

        Written by Yong Li  <yong.li@torchmobile.com> and Lyon Chen <lyon.chen@torchmobile.com>

        * loader/icon/wince/IconDatabaseWince.cpp: Added.
        * rendering/RenderThemeWince.cpp: Added.
        * rendering/RenderThemeWince.h: Added.
        * storage/wince/DatabaseThreadWince.cpp: Added.
        * storage/wince/DatabaseThreadWince.h: Added.
        * storage/wince/LocalStorageThreadWince.cpp: Added.
        * storage/wince/LocalStorageThreadWince.h: Added.
        * svg/graphics/wince/SVGResourceFilterWince.cpp: Added.

2009-07-24  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        execCommand('underline') can modify DOM outside of the contentEditable area
        https://bugs.webkit.org/show_bug.cgi?id=24333

        highestAncestorWithTextDecoration stops at the closest unsplittable element so that if text-decoration is applied
        outside of it, we don't accidently modify the style attribute.

        Tests: editing/style/textdecoration-outside-of-rooteditable.html
               editing/style/textdecoration-outside-of-unsplittable-element.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init):
        (WebCore::highestAncestorWithTextDecoration):

2009-07-24  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

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

        Fixes false positives when evaluating certain strings that only contain 
        non-canonical characters.

        Test: http/tests/security/xssAuditor/script-tag-safe.html

        * page/XSSAuditor.cpp:
        (WebCore::isNonCanonicalCharacter):
        (WebCore::XSSAuditor::findInRequest):

2009-07-24  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Changed WorkerContext destructor to not access possibly-freed WorkerThread.

        Failed assertion in WorkerContext::~WorkerContext().
        https://bugs.webkit.org/show_bug.cgi?id=27665

       * workers/DedicatedWorkerContext.cpp:
        (WebCore::DedicatedWorkerContext::~DedicatedWorkerContext):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        Removed assertion that relies on WorkerThread still being alive (moved to DedicatedWorkerContext destructor).

2009-07-24  Drew Wilson  <atwilson@google.com>

        Reviewed by Adam Barth.

        Updated code generator to properly generate bindings for WorkerContext exposed functions.

        Storing a reference to WorkerContext.postMessage() and calling it later yields a TypeError
        https://bugs.webkit.org/show_bug.cgi?id=27419

        Test: fast/workers/worker-call.html

        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::toJSDedicatedWorkerContext):
        (WebCore::toJSWorkerContext):
        Functions that convert from JSValue to the appropriate WorkerContext/DedicatedWorkerContext object.
        * bindings/js/JSWorkerContextBase.h:
        Added toJS*WorkerContext APIs.
        * bindings/scripts/CodeGeneratorJS.pm:
        Added code to appropriately check the passed-in this object when invoking functions at global scope.

2009-07-24  Drew Wilson  <atwilson@google.com>

        Reviewed by Adam Barth.

        Refactor WorkerContext to move DedicatedWorker-specific APIs into DedicatedWorkerContext
        https://bugs.webkit.org/show_bug.cgi?id=27420

        No new tests as the existing tests already provide sufficient coverage (this is just a refactoring with no new functionality).

        * DerivedSources.cpp:
        Added JSDerivedWorkerContext.cpp
        * DerivedSources.make:
        Added DerivedWorkerContext files
        * GNUmakefile.am:
        Added DerivedWorkerContext files
        * WebCore.gypi:
        Added DerivedWorkerContext files
        * WebCore.pro:
        Added DerivedWorkerContext files
        * WebCore.vcproj/WebCore.vcproj:
        Added DerivedWorkerContext files
        * WebCore.xcodeproj/project.pbxproj:
        Added DerivedWorkerContext files
        * bindings/js/JSDedicatedWorkerContextCustom.cpp: Added.
        (WebCore::JSDedicatedWorkerContext::mark):
        Custom mark function for onmessage event handler.
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        Supports conversion to JSDedicatedWorkerContext.
        (WebCore::toEventTarget):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::mark):
        Moved onmessage mark handling into DedicatedWorkerContext.
        * bindings/js/WorkerScriptController.cpp:
        Added appropriate casts to DedicatedWorkerContext for postMessage().
        (WebCore::WorkerScriptController::initScript):
        Manually sets up the prototype chain for the worker context.
        * bindings/scripts/CodeGeneratorJS.pm:
        Changed special case code for WorkerContext to be triggered by new IsWorkerContext attribute.
        * bindings/scripts/CodeGeneratorV8.pm:
        Changed hard-coded tests for WorkerContext to support DedicatedWorkerContext.
        * bindings/v8/DOMObjectsInclude.h:
        Added DedicatedWorkerContext.h
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        Added V8DedicatedWorkerContext.cpp
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        Added code to reserve extra fields for V8DedicatedWorkerContext.
        * bindings/v8/V8Index.cpp:
        Now includes V8DedicatedWorkerContext.h in addition to V8WorkerContext.h
        * bindings/v8/V8Index.h:
        Added DedicatedWorkerContext as a non-node wrapper type.
        Removed WORKERCONTEXT as a valid template type.
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        Creates DedicatedWorkerContext instead of WorkerContext.
        (WebCore::WorkerContextExecutionProxy::EventTargetToV8Object):
        Returns DedicatedWorkerContext instead of WorkerContext.
        (WebCore::WorkerContextExecutionProxy::retrieve):
        Refactored to deal with DedicatedWorkerContext.
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp: Added.
        Moved onmessage code from V8WorkerContextCustom.cpp
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        Moved onmessage code to V8DedicatedWorkerContextCustom.cpp
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toDedicatedWorkerContext):
        * dom/EventTarget.h:
        * workers/DedicatedWorkerContext.cpp: Added.
        Moved DedicatedWorker-only APIs from WorkerContext.
        (WebCore::DedicatedWorkerContext::DedicatedWorkerContext):
        (WebCore::DedicatedWorkerContext::~DedicatedWorkerContext):
        (WebCore::DedicatedWorkerContext::reportException):
        (WebCore::DedicatedWorkerContext::postMessage):
        (WebCore::DedicatedWorkerContext::dispatchMessage):
        * workers/DedicatedWorkerContext.h: Added.
        Moved DedicatedWorker-only APIs from WorkerContext.
        (WebCore::DedicatedWorkerContext::create):
        (WebCore::DedicatedWorkerContext::toDedicatedWorkerContext):
        (WebCore::DedicatedWorkerContext::setOnmessage):
        (WebCore::DedicatedWorkerContext::onmessage):
        * workers/DedicatedWorkerContext.idl: Added.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::~WorkerContext):
        Moved code that notifies parent that worker is closing down into DedicatedWorkerContext.
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::isClosing):
        Exposed closing flag as an API so derived classes can access it.
        * workers/WorkerContext.idl:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::performTask):
        Calls into DedicatedWorkerContext to handle message.
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        Creates a DedicatedWorkerContext when the thread starts up.

2009-07-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move more callers to using 3 argument toJS
        https://bugs.webkit.org/show_bug.cgi?id=27661

        No functional changes, thus no tests.
        These are all the places where we can't yet pass the
        correct globalObject because we don't have or don't know the right one.

        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementCallback.cpp:
        (WebCore::JSCustomSQLStatementCallback::handleEvent):
        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionCallback.cpp:
        (WebCore::JSCustomSQLTransactionCallback::handleEvent):
        * bindings/js/JSCustomSQLTransactionErrorCallback.cpp:
        (WebCore::JSCustomSQLTransactionErrorCallback::handleEvent):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):

2009-07-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix the last of the x-frame constructor calls to have the right prototype chains
        https://bugs.webkit.org/show_bug.cgi?id=27645

        Fix the last few constructors to use their stored globalObject pointer when
        constructing objects instead of the lexicalGlobalObject().

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::construct):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::constructWebKitPoint):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):

2009-07-24  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        [V8] Cleanup exception handling in worker evaluation code.
        https://bugs.webkit.org/show_bug.cgi?id=27282

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        * bindings/v8/WorkerContextExecutionProxy.h:
        (WebCore::WorkerContextExecutionState::WorkerContextExecutionState):
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::setException):

2009-07-24  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Reverting r46157, since it may be causing problems with Chromium
        reliability (see http://crbug.com/17569).

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

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintForStroking):

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        REGRESSION: inspector seems broken in ToT WebKit
        https://bugs.webkit.org/show_bug.cgi?id=27646

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled):

2009-07-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Add the shadow style member to the ShadowData constructor and ==
        operator

        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        (WebCore::ShadowData::operator==):

2009-07-24  Jian Li  <jianli@chromium.org>

        Reviewed by Eric Seidel.

        [V8] More V8 bindings changes to use ErrorEvent.
        https://bugs.webkit.org/show_bug.cgi?id=27630

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-07-24  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Dave Hyatt.

        Clean up dependencies on Apple support libraries for non-Apple build.
        http://bugs.webkit.org/show_bug.cgi?id=27532.

        * platform/graphics/win/SimpleFontDataWin.cpp: Conditionalize references
          to ApplicationServices.h and WebKitSystemInterface.h

2009-07-24  Dan Bernstein  <mitz@apple.com>

        Another attempted build fix 

        * bindings/js/JSAbstractWorkerCustom.cpp:

2009-07-24  Dan Bernstein  <mitz@apple.com>

        Attempted build fix

        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::toJS):

2009-07-24  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Build fix for 64 bit Linux.

        int64_t is long on Linux 64 bit and not long long, thus
        getFileSize with a int64_t out value fails to build.

        Use a temporary to work around the problem.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::spaceNeeded):

2009-07-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update all CREATE_DOM_*_WRAPPER callers to pass globalObject
        https://bugs.webkit.org/show_bug.cgi?id=27644

        This is another attempt at making the change for bug 27634 smaller.
        I included the changes to make_names.pl as well as any file which
        used CREATE_DOM_*_WRAPPER macros.

        The changes to the construct* functions are what fix the cases in
        fast/dom/constructed-objects-prototypes.html

        The changes to passing globalObject through CREATE_* are what fix
        fast/dom/prototype-inheritance-2.html

        * bindings/js/JSCDATASectionCustom.cpp:
        (WebCore::toJSNewlyCreated): pass globalObject.
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSDOMBinding.h: updated macros to pass globalObject.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::setAttributeNode): use globalObject() for wrapping return value.
        (WebCore::JSElement::setAttributeNodeNS): use globalObject() for wrapping return value.
        (WebCore::toJSNewlyCreated): pass globalObject.
        * bindings/js/JSEventCustom.cpp:
        (WebCore::JSEvent::clipboardData): pass globalObject.
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::getNamedItems): use globalObject() for wrapping returned collection items.
        (WebCore::callHTMLCollection): use globalObject() for wrapping returned collection items.
        (WebCore::JSHTMLCollection::item): use globalObject() for wrapping returned collection items.
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapper): pass globalObject.
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS): pass globalObject.
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated): pass globalObject.
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::constructWebKitCSSMatrix): use constructors globalObject when constructing
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::constructXMLHttpRequest): use constructors globalObject when constructing
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::constructXSLTProcessor): use constructors globalObject when constructing
        * dom/make_names.pl:
            Pass globalObject through CREATE_* macros and various support functions.

2009-07-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update CodeGeneratorJS.pm to support passing JSDOMGlobalObject* to toJS calls
        https://bugs.webkit.org/show_bug.cgi?id=27643

        This is an attempt to make this change as small as possible.
        I started by including all changes to CodeGeneratorJS.pm from bug 27634,
        and then made the minimal amount of other changes needed to support that change.

        Most toJS implementations ignore their passed JSDOMGlobalObject.
        There are stub 2-argument toJS, toJSNewlyCreated implementations to help compiling.
        All places where it is not clear what we should pass as the global object
        (or where the global object is simply not available, like for some SVG bindings)
        we pass deprecatedGlobalObjectForPrototype instead.

        * bindings/js/JSCDATASectionCustom.cpp:
        (WebCore::toJSNewlyCreated): add ignored JSDOMGlobalObject*
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException): pass the wrong globalObject for now
        * bindings/js/JSDOMBinding.h:
            Pass the wrong global object to the CREATE_ macros for now.
            In the next change we'll come back and pass the correct one.
            That will require changes to make_names.pl.
        (WebCore::DOMObjectWithGlobalPointer::scriptExecutionContext):
        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):
        (WebCore::DOMObjectWithGlobalPointer::~DOMObjectWithGlobalPointer):
        (WebCore::createDOMObjectWrapper):
        (WebCore::getDOMObjectWrapper):
        (WebCore::createDOMNodeWrapper):
        (WebCore::getDOMNodeWrapper):
        (WebCore::toJS): added to convert 2 arg calls to 3 arg calls to limit the scope of this change.
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::toJS): DOMWindow always uses its own prototype chain.
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated): add ignored JSDOMGlobalObject*
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSEventTarget.h:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapper): pass globalObject to toJS(Document*) to avoid recursion
        (WebCore::toJSNewlyCreated): add ignored JSDOMGlobalObject*
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::toJS): pass globalObject along
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::inverse): pass wrong globalObject for now.
        (WebCore::JSSVGMatrix::rotateFromVector): pass wrong globalObject for now.
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegListCustom.cpp:
            All of these methods need a globalObject, but most SVG binding don't have
            space for one, so we just pass the lexicalGlobalObject for now.
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/js/JSSVGPointListCustom.cpp:
        (WebCore::finishGetter): pass wrong globalObject for now.
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        * bindings/js/JSSVGTransformListCustom.cpp:
        (WebCore::finishGetter): pass wrong globalObject for now.
        (WebCore::finishSetter):
        (WebCore::finishSetterReadOnlyResult):
        * bindings/js/JSStyleSheetCustom.cpp:
        (WebCore::toJS): add ignored JSDOMGlobalObject*
        * bindings/js/JSTextCustom.cpp:
        (WebCore::toJSNewlyCreated): add ignored JSDOMGlobalObject*
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore::toJS): WorkerContext always uses its own prototype chain since it's a GlobalObject subclass.
        * bindings/js/JSWorkerContextBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:
            All generated toJS calls now pass a globalObject.
            All generated toJS implementations now expect a globalObject.
            Simplified all the slot casts by using a "castedThis" local.
            SVG bindings which don't have a globalObject() accessor pass the deprecated lexicalGlobalObject instead.
            Simplified printing of constructor objects using a $constructorClassName variable.
            All generated constructor functions follow the construct$className form to match the custom constructors.

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        typing "document.__proto__" in inspector throws exception
        https://bugs.webkit.org/show_bug.cgi?id=27169

        * inspector/front-end/utilities.js:
        (Object.type):

2009-07-24  Andrei Popescu  <andreip@google.com>

        Reviewed by Anders Carlsson.

        ApplicationCache should have size limit
        https://bugs.webkit.org/show_bug.cgi?id=22700

        https://lists.webkit.org/pipermail/webkit-dev/2009-May/007560.html

        This change implements a mechanism for limiting the maximum size of
        the application cache file. When this size is reached, a ChromeClient
        callback is invoked asynchronously and the saving of the last (failed)
        cache is retried automatically.
        
        This change also extends the ApplicationCacheStorage API by allowing
        a client to query or modify the application cache without having to
        load any resources into memory.

        Test: http/tests/appcache/max-size.html

        * WebCore.base.exp:
        Exports the symbols required by the DumpRenderTree test application.
        * loader/EmptyClients.h:
        Adds empty implementation of the new ChromeClient methods.
        * loader/appcache/ApplicationCache.cpp:
        * loader/appcache/ApplicationCache.h:
        Adds the ability to calculate the approximate size of an ApplicationCache object.
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        Invokes the ChromeClient callback when the storage layer runs out of space.
        After the callback is invoked, we re-attempt to store the newest cache,
        in case the ChromeClient has freed some space.
        * loader/appcache/ApplicationCacheResource.cpp:
        * loader/appcache/ApplicationCacheResource.h:
        Adds the ability to calculate the approximate size of an ApplicationCacheResource object.
        * loader/appcache/ApplicationCacheStorage.cpp:
        * loader/appcache/ApplicationCacheStorage.h:
        Enforces a maximum size for the application cache file.
        * page/ChromeClient.h:
        Adds a new callback, invoked when the ApplicationCacheStorage reports that it has
        reached the maximum size for its database file.
        * platform/sql/SQLiteDatabase.cpp:
        * platform/sql/SQLiteDatabase.h:
        Adds a new method that allows querying for the amount of unused space inside the
        application cache database file.

2009-07-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Use TextEncoding facilities to convert between UTF16 and UTF8
        instead of rolling our own solution.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (convertUniCharToUTF8):

2009-07-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Fix confusion in g_substr between length in bytes and length in
        characters. Was causing crashes in some situations when dealing
        with non-ASCII text encoded as UTF8.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (g_substr):

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Impossible to add an attribute to a node without attributes
        https://bugs.webkit.org/show_bug.cgi?id=21108

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement):
        (WebInspector.ElementsTreeElement.prototype.set hovered):
        (WebInspector.ElementsTreeElement.prototype.toggleNewButton):
        (WebInspector.ElementsTreeElement.prototype.ondblclick):
        (WebInspector.ElementsTreeElement.prototype._startEditing):
        (WebInspector.ElementsTreeElement.prototype._addNewAttribute):
        (WebInspector.ElementsTreeElement.prototype._attributeEditingCommitted):
        * inspector/front-end/inspector.css:

2009-07-24  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Adds support for Firebug's magic $0 variable to access inspected node
        https://bugs.webkit.org/show_bug.cgi?id=17907

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled): Added _inspectorCommandLineAPI.{
            _inspectedNodes, _addInspectedNode, $0, $1, $n}
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged): Stores the inspected node history
            in _inspectorCommandLineAPI._inspectedNodes
        (WebInspector.ElementsPanel):

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Dragging a resource in the sidebar should drag it's URL
        https://bugs.webkit.org/show_bug.cgi?id=14410

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.onattach):

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Double click on a resource in the sidebar should open that resource in Safari
        https://bugs.webkit.org/show_bug.cgi?id=14409

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick): open a resource url

2009-07-24  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        Bump pango version requirement to 1.12 and remove unnecessary #ifdefs.

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::getDefaultPangoLayout):
        * platform/graphics/gtk/FontPlatformDataPango.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/gtk/Language.cpp:

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Missing UIString and other localizedString.js fixes
        https://bugs.webkit.org/show_bug.cgi?id=27288

        * English.lproj/localizedStrings.js:

2009-07-24  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Timothy Hatcher.

        Inspector: Should Syntax Highlight JSON
        https://bugs.webkit.org/show_bug.cgi?id=27503

        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._contentLoaded):

2009-07-24  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update WebCore/page/DOMTimer.cpp/h to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27624

        * page/DragController.cpp:
        (WebCore::DragController::~DragController):
        (WebCore::documentFragmentFromDragData):
        (WebCore::DragController::dragEnded):
        (WebCore::DragController::dragEntered):
        (WebCore::DragController::dragExited):
        (WebCore::DragController::dragUpdated):
        (WebCore::DragController::performDrag):
        (WebCore::asFileInput):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::delegateDragSourceAction):
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::tryDHTMLDrag):
        (WebCore::DragController::mayStartDragAtEventLocation):
        (WebCore::getCachedImage):
        (WebCore::getImage):
        (WebCore::prepareClipboardForImageDrag):
        (WebCore::dragLocForDHTMLDrag):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):
        (WebCore::DragController::placeDragCaret):

2009-07-24  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update WebCore/page/Chrome.cpp to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27608

        * page/Chrome.cpp:
        (WebCore::Chrome::runBeforeUnloadConfirmPanel):
        (WebCore::Chrome::runJavaScriptAlert):
        (WebCore::Chrome::runJavaScriptConfirm):
        (WebCore::Chrome::runJavaScriptPrompt):
        (WebCore::Chrome::shouldInterruptJavaScript):
        (WebCore::Chrome::setToolTip):
        (WebCore::Chrome::requestGeolocationPermissionForFrame):
        (WebCore::ChromeClient::generateReplacementFile):
        (WebCore::ChromeClient::paintCustomScrollbar):

2009-07-24  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update WebCore/page/Coordinates.cpp to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27614

        * page/Coordinates.cpp:
        (WebCore::Coordinates::toString):

2009-07-24  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update WebCore/page/DOMSelection.cpp/h to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27614

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::setBaseAndExtent):
        (WebCore::DOMSelection::modify):
        (WebCore::DOMSelection::addRange):
        (WebCore::DOMSelection::deleteFromDocument):
        * page/DOMSelection.h:

2009-07-24  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by Eric Seidel.

        Update WebCore/page/DOMTimer.cpp/h to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27618

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::~DOMTimer):
        (WebCore::DOMTimer::fired):
        (WebCore::DOMTimer::suspend):
        (WebCore::DOMTimer::resume):
        (WebCore::DOMTimer::canSuspend):
        * page/DOMTimer.h:
        (WebCore::DOMTimer::minTimerInterval):
        (WebCore::DOMTimer::setMinTimerInterval):

2009-07-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Classes call DOMObject::mark() explicitly, should call DOMObjectWithGlobal::mark() instead
        https://bugs.webkit.org/show_bug.cgi?id=27641

        Nothing uses globalObject() yet, but this was causing crashes
        in the patch for bug 27634.  This is covered by fast/dom/gc-6.html.

        I decided to change these to Base:: instead of DOMObjectWithGlobal::
        for future-proofing.  All autogenerated classes use a typedef Base
        to avoid bugs like these.  Sadly C+does not have a built-in super:: we could use.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAbstractWorkerCustom.cpp:
        (WebCore::JSAbstractWorker::mark):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::mark):
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannel::mark):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::getOwnPropertySlot):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::mark):
        * bindings/js/JSNodeFilterCustom.cpp:
        (WebCore::JSNodeFilter::mark):
        * bindings/js/JSNodeIteratorCustom.cpp:
        (WebCore::JSNodeIterator::mark):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        (WebCore::JSSVGElementInstance::mark):
        * bindings/js/JSTreeWalkerCustom.cpp:
        (WebCore::JSTreeWalker::mark):

2009-07-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make most DOMObjects hold onto a JSDOMGlobalObject*
        https://bugs.webkit.org/show_bug.cgi?id=27588

        This change is almost entirely plumbing.  Only one functional
        change as part of this all (window.document.constructor has the correct prototype)
        Changes are detailed below.

        inner.document.constructor is fixed because all properties on the window
        object are created with the correct globalObject (instead of the lexical one).
        Since all objects now carry a globalObject pointer, when document creates
        HTMLDocumentConstructor it now has the right globalObject to use.

        Tests:
          fast/dom/prototype-inheritance.html
          fast/dom/prototype-inheritance-2.html

        * bindings/js/DOMObjectWithSVGContext.h:
        (WebCore::DOMObjectWithSVGContext::DOMObjectWithSVGContext):
            Update the comment and add an ignored globalObject argument.
        * bindings/js/JSDOMBinding.h:
            Pass a globalObject to all DOMObjects during creation.  Currently it's the wrong global object.
            Once toJS is passed a globalObject it will be the right one.
        (WebCore::createDOMObjectWrapper):
        (WebCore::createDOMNodeWrapper):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::JSDOMGlobalObject::globalObject): Makes binding generation easier.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::history): JSHistory is now passed a globalObject, but since it has no custom constructor it doesn't use it.
        (WebCore::JSDOMWindow::location): JSLocation is now passed a globalObject, but since it has no custom constructor it doesn't use it.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::location): JSLocation is now passed a globalObject, but since it has no custom constructor it doesn't use it.
        * bindings/js/JSHTMLAllCollection.h:
        (WebCore::JSHTMLAllCollection::JSHTMLAllCollection):
        * bindings/js/JSHTMLCollectionCustom.cpp: Re-factoring needed to pass globalObject to JSNamedNodesCollection constructor.
        (WebCore::getNamedItems):
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::canGetItemsForName):
        (WebCore::JSHTMLCollection::nameGetter):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSNamedNodesCollection.cpp:
             Now passed globalObject.  This is tested by inner.document.forms.testForm.
             The passed globalObject is still wrong until toJS is fixed.
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection):
        * bindings/js/JSNamedNodesCollection.h:
        * bindings/js/JSSharedWorkerConstructor.cpp:
             Add DOMConstructorObject missed by http://trac.webkit.org/changeset/45938
             This class is not compiled by default, so not testable.
        (WebCore::JSSharedWorkerConstructor::JSSharedWorkerConstructor):
        * bindings/js/JSSharedWorkerConstructor.h:
        * bindings/scripts/CodeGeneratorJS.pm:
             Make all bindings objects carry a globalObject pointer using DOMObjectWithGlobalPointer.
             SVG bindings which need a context() pointer do not have enough space for globalObject() too.
             WorkerContext does not need a globalObject (it is one), so special case it.
             Make all .constructor calls use the stored globalObject().  This is what fixes window.document.constructor.
             Make all constructors inherit from DOMConstructorObject for consistency.  Since the auto-bound constructors
             override createStructure anyway, there is no functional change here.  Just completing work started in r45938.

2009-07-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff Garen.

        WebCore has a few places that don't gracefully handle a null request returned from willSendRequest.
        https://bugs.webkit.org/show_bug.cgi?id=27595

        Test: http/tests/misc/will-send-request-returns-null-on-redirect.html
        
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::removeResource): Null-check the request URL.
        
        * platform/network/cf/ResourceHandleCFNet.cpp: Ditto, and return null instead of creating an empty one.
        (WebCore::willSendRequest):

2009-07-23  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27633 - AXLoadComplete can be fired off to frequently
        https://bugs.webkit.org/show_bug.cgi?id=27633

        An integration issue left out some curly braces.

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

2009-07-23  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson.

        URL appears in back/forward button menu instead of title for items with custom representation
        https://bugs.webkit.org/show_bug.cgi?id=27586
        rdar://problem/5060337

        * WebCore.base.exp: Exported DocumentLoader::setTitle for use by Mac WebKit.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didChangeTitle): Tightened code to check if the document
        loader is the correct one; previously this would never happen because we'd
        commit the load before any title changes could be registered, but now we can
        encounter a case where we get a title during a provisional load.

2009-07-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        [CSS3 Backgrounds and Borders] Add support for inset box shadows
        https://bugs.webkit.org/show_bug.cgi?id=27582

        Test: fast/box-shadow/inset.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForShadow): Set the ShadowValue’s shadow style to 'inset'
            as needed.

        * css/CSSParser.cpp:
        (WebCore::ShadowParseContext::ShadowParseContext): Added style and allowStyle
            members. Initialize the allowStyle member.
        (WebCore::ShadowParseContext::commitValue): Pass the style value to the
            ShadowValue constructor. Reset allowStyle.
        (WebCore::ShadowParseContext::commitLength): Update allowStyle.
        (WebCore::ShadowParseContext::commitColor): Ditto.
        (WebCore::ShadowParseContext::commitStyle): Added. Sets the style member and
            updates the state.
        (WebCore::CSSParser::parseShadow): Parse the 'inset' keyword.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Get the style value from the
            shadow value and pass it to the ShadowData constructor.

        * css/ShadowValue.cpp:
        (WebCore::ShadowValue::ShadowValue): Added style.
        (WebCore::ShadowValue::cssText): Added style.

        * css/ShadowValue.h:
        (WebCore::ShadowValue::create): Added style.

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc): Added a blend function for shadow styles. When blending
            between normal and inset shadows, all intermediate values map to normal.
        (WebCore::PropertyWrapperShadow::blend): Added normal style to the default
            shadow.
            
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxShadow): Added a shadow style parameter,
            which is passed through to RenderBoxModelObject::paintBoxShadow().

        (WebCore::InlineFlowBox::paintBoxDecorations): Paint inset shadows on top of
            the background.

        * rendering/InlineFlowBox.h:

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBoxDecorations): Paint inset shadows on top of the
            background.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow): Added a shadow style
            parameter, and code to paint inset shadows.

        * rendering/RenderBoxModelObject.h:

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations): Paint inset shadows on top of
            the background.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations): Ditto.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBoxDecorations): Ditto.

        * rendering/style/ShadowData.h:
        Added a ShadowStyle enum.
        (WebCore::ShadowData::ShadowData): Add and initialize a style member.

2009-07-23  Simon Fraser  <simon.fraser@apple.com>

        Fix the build with UNUSED_PARAM(frame) for when ENABLE(3D_RENDERING) is not defined.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::transform_3dMediaFeatureEval):

2009-07-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adele Peterson.

        3d-transforms media query needs to look check that accelerated compositing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=27621
        
        When evaluating a media query with '-webkit-transform-3d', we need to check the
        runtime switch that toggles accererated compositing, and therefore 3D.
        
        No test because we can't disable the pref dynamically in DRT.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::transform_3dMediaFeatureEval):

2009-07-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        execCommand('underline') can't remove <U> underlines
        https://bugs.webkit.org/show_bug.cgi?id=20215

        This patch adds support for u, s, and strike to implicitlyStyledElementShouldBeRemovedWhenApplyingStyle so that
        WebKit can remove those presentational tags when necessary.
        It also modifies StyleChange::init not to add "text-decoration: none".  Not only is this style meaningless
        (does not override inherited styles) but it was also causing WebKit to generate extra spans with this style.

        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::hasValue): True if the property contains the specified value
        * css/CSSValueList.h: Updated prototype
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init): No longer adds "text-decoration: none"
        (WebCore::ApplyStyleCommand::implicitlyStyledElementShouldBeRemovedWhenApplyingStyle): Supports text-decoration-related elements

2009-07-23  Jessie Berlin  <jberlin@apple.com>
        
        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27554
        Expose the value of text-overflow in getComputedStyle.

        Test: fast/css/getComputedStyle/getComputedStyle-text-overflow.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        Add text-overflow to the list of computedProperties.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        Return the value of the text-overflow property.

2009-07-23  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

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

        [S60 QtWebKit] Don't put some intermediate generated files into the final mmp project
        file for linking. This is a temporary workaround for qmake bug in Symbian port, should 
        be reverted after qmake is fixed.

        * WebCore.pro:

2009-07-23  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Fix an assert in running workers in Chrome.
        https://bugs.webkit.org/show_bug.cgi?id=27620

        The fix is to change V8DOMMap::removeAllDOMObjectsInCurrentThreadHelper
        to do not call removeObjectsFromWrapperMap for certain types of DOM
        objects that exist only in main thread.

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjectsInCurrentThreadHelper):

2009-07-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27572
        Implement support for background-attachment:local.

        Added new test fast/overflow/overflow-with-local-attachment.html.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EFillAttachment):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapFillAttachment):
        * css/CSSValueKeywords.in:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::attachment):
        (WebCore::FillLayer::setAttachment):
        (WebCore::FillLayer::hasFixedImage):
        (WebCore::FillLayer::initialFillAttachment):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::backgroundAttachment):
        (WebCore::InheritedFlags::maskAttachment):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2009-07-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        copyInheritableProperties and removeComputedInheritablePropertiesFrom should be deprecated
        https://bugs.webkit.org/show_bug.cgi?id=27325

        This patch deprecates copyInheritableProperties because it has been used for two different purposes:
        1.  Calculating the typing style.
        2.  Moving HTML subtrees and seeking to remove redundant styles.
        These tasks should be broken out into two separate functions.  New code should not use this function.

        It deletes removeComputedInheritablePropertiesFrom because it hasn't been used anywhere.

        There is no test since the patch does not change any behavior.

        * css/CSSComputedStyleDeclaration.cpp: removeComputedInheritablePropertiesFrom has been removed
        (WebCore::CSSComputedStyleDeclaration::deprecatedCopyInheritableProperties): has been renamed from copyInheritableProperties
        * css/CSSComputedStyleDeclaration.h: ditto
        * editing/DeleteSelectionCommand.cpp: ditto
        (WebCore::removeEnclosingAnchorStyle): ditto
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): ditto
        * editing/EditCommand.cpp: ditto
        (WebCore::EditCommand::styleAtPosition): ditto
        * editing/RemoveFormatCommand.cpp: ditto
        (WebCore::RemoveFormatCommand::doApply): ditto
        * editing/ReplaceSelectionCommand.cpp: ditto
        (WebCore::handleStyleSpansBeforeInsertion): ditto
        (WebCore::ReplaceSelectionCommand::handleStyleSpans): ditto
        * editing/markup.cpp: ditto
        (WebCore::removeEnclosingMailBlockquoteStyle): ditto
        (WebCore::removeDefaultStyles): ditto
        (WebCore::createMarkup): ditto

2009-07-22  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        Audio element at default width shouldn't have time field.
        https://bugs.webkit.org/show_bug.cgi?id=27589

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimeDisplayElement::setVisible): Make sure we don't
        forget to remember the visibility if there is no renderer.

2009-07-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27598 Clean up the 
        AccessibilityObject class

        Mostly this is just moving empty stubs into the header rather than 
        muddying the cpp file with them. A few functions were made pure 
        virtual.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isARIAControl):
        (WebCore::AccessibilityObject::clickPoint):
        (WebCore::AccessibilityObject::documentFrameView):
        (WebCore::AccessibilityObject::actionVerb):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::intValue):
        (WebCore::AccessibilityObject::layoutCount):
        (WebCore::AccessibilityObject::doAccessibilityHitTest):
        (WebCore::AccessibilityObject::focusedUIElement):
        (WebCore::AccessibilityObject::firstChild):
        (WebCore::AccessibilityObject::lastChild):
        (WebCore::AccessibilityObject::previousSibling):
        (WebCore::AccessibilityObject::nextSibling):
        (WebCore::AccessibilityObject::parentObjectIfExists):
        (WebCore::AccessibilityObject::observableObject):
        (WebCore::AccessibilityObject::linkedUIElements):
        (WebCore::AccessibilityObject::titleUIElement):
        (WebCore::AccessibilityObject::ariaRoleAttribute):
        (WebCore::AccessibilityObject::isPresentationalChildOfAriaRole):
        (WebCore::AccessibilityObject::ariaRoleHasPresentationalChildren):
        (WebCore::AccessibilityObject::roleValue):
        (WebCore::AccessibilityObject::ariaAccessiblityName):
        (WebCore::AccessibilityObject::ariaLabeledByAttribute):
        (WebCore::AccessibilityObject::ariaDescribedByAttribute):
        (WebCore::AccessibilityObject::accessibilityDescription):
        (WebCore::AccessibilityObject::ariaSelectedTextDOMRange):
        (WebCore::AccessibilityObject::axObjectCache):
        (WebCore::AccessibilityObject::axObjectID):
        (WebCore::AccessibilityObject::setAXObjectID):
        (WebCore::AccessibilityObject::anchorElement):
        (WebCore::AccessibilityObject::actionElement):
        (WebCore::AccessibilityObject::boundingBoxRect):
        (WebCore::AccessibilityObject::selectedTextRange):
        (WebCore::AccessibilityObject::selectionStart):
        (WebCore::AccessibilityObject::selectionEnd):
        (WebCore::AccessibilityObject::url):
        (WebCore::AccessibilityObject::selection):
        (WebCore::AccessibilityObject::stringValue):
        (WebCore::AccessibilityObject::title):
        (WebCore::AccessibilityObject::helpText):
        (WebCore::AccessibilityObject::textUnderElement):
        (WebCore::AccessibilityObject::text):
        (WebCore::AccessibilityObject::textLength):
        (WebCore::AccessibilityObject::selectedText):
        (WebCore::AccessibilityObject::accessKey):
        (WebCore::AccessibilityObject::widget):
        (WebCore::AccessibilityObject::widgetForAttachmentView):
        (WebCore::AccessibilityObject::setFocused):
        (WebCore::AccessibilityObject::setSelectedText):
        (WebCore::AccessibilityObject::setSelectedTextRange):
        (WebCore::AccessibilityObject::setValue):
        (WebCore::AccessibilityObject::setSelected):
        (WebCore::AccessibilityObject::makeRangeVisible):
        (WebCore::AccessibilityObject::childrenChanged):
        (WebCore::AccessibilityObject::addChildren):
        (WebCore::AccessibilityObject::hasChildren):
        (WebCore::AccessibilityObject::selectedChildren):
        (WebCore::AccessibilityObject::visibleChildren):
        (WebCore::AccessibilityObject::visiblePositionRange):
        (WebCore::AccessibilityObject::visiblePositionRangeForLine):
        (WebCore::AccessibilityObject::boundsForVisiblePositionRange):
        (WebCore::AccessibilityObject::setSelectedVisiblePositionRange):
        (WebCore::AccessibilityObject::visiblePositionForPoint):
        (WebCore::AccessibilityObject::nextVisiblePosition):
        (WebCore::AccessibilityObject::previousVisiblePosition):
        (WebCore::AccessibilityObject::visiblePositionForIndex):
        (WebCore::AccessibilityObject::indexForVisiblePosition):
        (WebCore::AccessibilityObject::index):
        (WebCore::AccessibilityObject::doAXRangeForLine):
        (WebCore::AccessibilityObject::doAXRangeForIndex):
        (WebCore::AccessibilityObject::doAXStringForRange):
        (WebCore::AccessibilityObject::doAXBoundsForRange):
        (WebCore::AccessibilityObject::updateBackingStore):

2009-07-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by David Hyatt.

        Fix of <rdar://4877658> Dragging from the area between the horizontal/vertical scrollbars when status bar is showing starts a selection and autoscroll.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:

2009-07-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27581
        Drop the prefix from the box-shadow property.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::cssPropertyID):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::ensurePropertyMap):

2009-07-22  Viet-Trung Luu  <viettrungluu@gmail.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=27289
        When a mouse click occurs on a scrollbar without a preceding mouse move
        onto it, the release isn't handled correctly (since
        EventHandler::m_lastScrollbarUnderMouse isn't set on mouse down, but
        only on mouse move). (Side comment: That scrollbar-handling code
        in EventHandler is ugly. It should be fixed properly.)

        Tests: scrollbars/scrollbar-miss-mousemove.html
               scrollbars/scrollbar-miss-mousemove-disabled.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::updateLastScrollbarUnderMouse):
        * page/EventHandler.h:

2009-07-23  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by David Levin.

        Update WebCore/page/BarInfo.cpp to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27606

        * page/BarInfo.cpp:
        (WebCore::BarInfo::visible):

2009-07-23  Mike Fenton  <mike.fenton@torchmobile.com>

        Reviewed by David Levin.

        Update WebCore/page/Console.cpp to conform to WebKit
        Style Guidelines as identified by cpplint.py.
        https://bugs.webkit.org/show_bug.cgi?id=27606

        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix):
        (WebCore::Console::profile):
        (WebCore::Console::time):

2009-07-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Fix crashes with the QObject bindings after garbage collection.

        There is one QtInstance per wrapped QObject, and that QtInstance keeps
        references to cached JSObjects for slots. When those objects get
        deleted due to GC, then they becoming dangling pointers.

        When a cached member dies, it is now removed from the QtInstance's
        cache.

        As we cannot track the lifetime of the children, we have to remove
        them from QtInstance alltogether. They are not cached and were
        only used for mark(), but we _want_ them to be subject to gc.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::~QtInstance): Minor coding style cleanup,
        use qDeleteAll().
        (JSC::Bindings::QtInstance::removeCachedMethod): New function, to
        clean m_methods and m_defaultMethod.
        (JSC::Bindings::QtInstance::mark): Avoid marking already marked objects.
        (JSC::Bindings::QtField::valueFromInstance): Don't save children for
        marking.
        * bridge/qt/qt_instance.h: Declare removeCachedMethod.
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMethod::~QtRuntimeMethod): Call removeCachedMethod
        with this on the instance.

2009-07-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=27599
        'const unsigned' in return value

        Remove const modifier from unsigned return value, as it does not
        make sense.

        * dom/ErrorEvent.h:

2009-07-22  Jens Alfke  <snej@chromium.org>

        Reviewed by David Levin.

        Bug 22784: Improve keyboard navigation of Select elements.
        Home/End and PageUp/PageDn buttons do not do anything in drop down lists,
        on non-Mac platforms.
        https://bugs.webkit.org/show_bug.cgi?id=22784
        http://code.google.com/p/chromium/issues/detail?id=4576

        New test: LayoutTests/fast/forms/select-popup-pagekeys.html

        * dom/SelectElement.cpp:
        (WebCore::nextValidIndex): 
        New utility fn for traversing items of a select's list.
        (WebCore::SelectElement::menuListDefaultEventHandler):
        Added code to handle Home/End and PageUp/PageDn when ARROW_KEYS_POP_MENU is false.

2009-07-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        Fix a couple of compiler warnings.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (copySurface):
        * platform/graphics/gtk/SimpleFontDataGtk.cpp:
        (WebCore::SimpleFontData::containsCharacters):

2009-07-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by David Levin.

        Enable HTML5 Datagrid defines for the Qt build.

        * WebCore.pro:

2009-07-22  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Make Node wrappers go fast
        https://bugs.webkit.org/show_bug.cgi?id=27597

        Profiles indicate we're spending a lot of time asking whether we're on
        the main thread when looking up DOM wrappers for Nodes, but there isn't
        much point in doing that work because Nodes only exist on the main
        thread.  I've also added an assert to keep us honest in this regard.

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::):
        (WebCore::getDOMNodeMap):
        (WebCore::DOMData::getCurrent):
        (WebCore::DOMData::getCurrentMainThread):

2009-07-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Remove unneeded virtual destructor from ScriptSourceProvider
        https://bugs.webkit.org/show_bug.cgi?id=27563

        * bindings/js/ScriptSourceProvider.h:

2009-07-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        execCommand('underline' / 'strikeThrough') doesn't work properly with multiple styles in text-decoration
        https://bugs.webkit.org/show_bug.cgi?id=27476

        executeStrikethrough and executeUnderline were toggling between "line-through" / "underline" and "none".
        This patch adds executeToggleStyleInList that toggles a style in CSSValueList instead of toggling the entire value.
        It modifies CSSComputedStyleDeclaration to return CSSValueList instead of CSSPrimitiveValue for text decorations,
        and adds removeAll member function to CSSValueList.

        Tests: editing/execCommand/toggle-text-decorations.html
               fast/css/getComputedStyle/getComputedStyle-text-decoration.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationFlagsToCSSValue): Creates a CSSValueList
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Returns a CSSValueList instead of CSSValue
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Text decorations are space separated instead of comma separated
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::removeAll): Removes all values that match the specified value
        * css/CSSValueList.h:
        * editing/EditorCommand.cpp:
        (WebCore::applyCommandToFrame): Apply style to a frame using specified command
        (WebCore::executeApplyStyle): Uses applyCommandToFrame
        (WebCore::executeToggleStyleInList): Uses applyCommandToFrame
        (WebCore::executeToggleStyle): Toggles a style in CSSValueList
        (WebCore::executeStrikethrough): Uses executeToggleStyleInList
        (WebCore::executeUnderline): Uses executeToggleStyleInList

2009-07-22  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=27174
        And
        https://bugs.webkit.org/show_bug.cgi?id=26938
        
        Code cleanup. Implements support for detecting attacks transformed by 
        PHP Magic Quotes/PHP addslashes().

        Tests: http/tests/security/xssAuditor/script-tag-addslashes-backslash.html
               http/tests/security/xssAuditor/script-tag-addslashes-double-quote.html
               http/tests/security/xssAuditor/script-tag-addslashes-null-char.html
               http/tests/security/xssAuditor/script-tag-addslashes-single-quote.html

        * page/XSSAuditor.cpp:
        (WebCore::isInvalidCharacter):
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::normalize): Decodes HTML entities, removes backslashes,
        and removes control characters that could otherwise cause a discrepancy between
        the source code of a script and the outgoing HTTP parameters.
        (WebCore::XSSAuditor::decodeURL):
        (WebCore::XSSAuditor::decodeHTMLEntities):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:

2009-07-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele Peterson.

        Null deref in JSObject::mark due to null xhr wrapper
        https://bugs.webkit.org/show_bug.cgi?id=27565

        Make event target binding for appcache and xhr behave in the same way as
        it does for all other events.

        No test as I couldn't make a testcase which was remotely reliable.

        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):

2009-07-22  Mads Ager  <ager@chromium.org>

        Reviewed by David Levin.

        Inform V8 of the amount of WebCore string memory it is keeping alive.
        https://bugs.webkit.org/show_bug.cgi?id=27537

        V8 uses external strings that are backed by WebCore strings. Since
        the external strings themselves are small, V8 has no way of
        knowing how much memory it is actually holding on to. With this
        change, we inform V8 of the amount of WebCore string data it is
        holding on to with external strings.

        * bindings/v8/V8Binding.cpp:
        (WebCore::WebCoreStringResource::WebCoreStringResource):
        (WebCore::WebCoreStringResource::~WebCoreStringResource):

2009-07-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=27562
        Add the finalized versions of background-clip and background-origin.  Remove background-clip from
        the background shorthand and have it be auto-set based off background-origin's value.

        Three new tests added in fast/backgrounds/size

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillShorthand):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:

2009-07-22  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Fisher.

        Hook up V8 bindings for DataGrid elements.
        https://bugs.webkit.org/show_bug.cgi?id=27383
        http://code.google.com/p/chromium/issues/detail?id=16730

        Tests: Enhanced LayoutTests/fast/dom/HTMLDataGridElement/*
        to handle exceptions, check appropriate JS prototypes, and
        test column-list's item() method as well as array-indexing.

        * WebCore.gypi: Added new source files.
        * bindings/scripts/CodeGeneratorV8.pm: Made GenerateBatchedAttributeData put #if's around conditional attributes.
        * bindings/v8/DOMObjectsInclude.h: #include DataGrid headers.
        * bindings/v8/V8DOMWrapper.cpp: Add bindings from HTML tags to datagrid templates.
        (WebCore::V8DOMWrapper::getTemplate): Customize datagrid template.
        * bindings/v8/V8DataGridDataSource.cpp: Added. (Based on JSDataGridDataSource)
        (WebCore::V8DataGridDataSource::V8DataGridDataSource):
        (WebCore::V8DataGridDataSource::~V8DataGridDataSource):
        * bindings/v8/V8DataGridDataSource.h: Added. (Based on JSDataGridDataSource)
        (WebCore::V8DataGridDataSource::create):
        (WebCore::V8DataGridDataSource::isJSDataGridDataSource):
        (WebCore::V8DataGridDataSource::jsDataSource):
        (WebCore::asV8DataGridDataSource):
        * bindings/v8/V8GCController.h: Added new handle type "DATASOURCE".
        * bindings/v8/V8Index.h: Conditionalize datagrid stuff.
        * bindings/v8/custom/V8CustomBinding.h: Declare more accessors. Conditionalize.
        * bindings/v8/custom/V8DataGridColumnListCustom.cpp: Added.
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp: Fill in dataSource accessors.
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-07-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        pushDownTextDecorationStyleAroundNode needs clean up
        https://bugs.webkit.org/show_bug.cgi?id=27556

        Cleaned up. pushDownTextDecorationStyleAroundNode traverses tree vertically from highestAncestor to targetNode
        While traversing, it will apply the specified style to all nodes but targetNode.
        i.e. the style is applies to all ancestor nodes and their siblings of targetNode.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::pushDownTextDecorationStyleAroundNode): Cleaned up and added comments
        * editing/ApplyStyleCommand.h: Updated prototype

2009-07-22  Peter Kasting  <pkasting@google.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Handle any type of line endings in WebCore/css/*CSSPropertyNames.in.

        * DerivedSources.make:
        * css/makeprop.pl:
        * css/makevalues.pl:

2009-07-22  Paul Godavari  <paul@chromium.org>

        Reviewed by Darin Fisher.

        Chromium has a build break after removal of JSRGBColor bindings
        https://bugs.webkit.org/show_bug.cgi?id=27548

        Fix a build break in Chromium V8 after the JSRGBColor bindings change:
        https://bugs.webkit.org/show_bug.cgi?id=27242

        * bindings/scripts/CodeGeneratorV8.pm:

2009-07-22  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        Chromium Linux: add static functions to FontPlatformData which allow
        for setting the global font rendering preferences.

        https://bugs.webkit.org/show_bug.cgi?id=27513
        http://code.google.com/p/chromium/issues/detail?id=12179

        This should not affect any layout tests.

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setHinting):
        (WebCore::FontPlatformData::setAntiAlias):
        (WebCore::FontPlatformData::setSubpixelGlyphs):
        (WebCore::FontPlatformData::setupPaint):
        * platform/graphics/chromium/FontPlatformDataLinux.h:

2009-07-22  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Move Inspector panels creation into a function to make possible introducing
        custom panels.

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

2009-07-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Print console command message upon evaluate
        selection request; Handle errors in evaluation request
        properly.

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

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame):

2009-07-22  Xan Lopez  <xlopez@igalia.com>

        Attempt to fix the GTKbuild.

        * GNUmakefile.am:

2009-07-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build.

        * WebCore.pro: Add RGBColor.cpp to the build, remove JSRGBColor.

2009-07-21  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

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

        Fixes an issue that can cause a crash or unexpected behavior when calling
        WebCore::ScriptSourceCode::source on a cached script.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CachedScriptSourceProvider.h: Modified to inherit from 
        WebCore::ScriptSourceCode.
        (WebCore::CachedScriptSourceProvider::source):
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode): Separated out source provider and
        rewrote to use WebCore::ScriptSourceProvider.
        (WebCore::ScriptSourceCode::source):
        * bindings/js/ScriptSourceProvider.h: Added.
        (WebCore::ScriptSourceProvider::ScriptSourceProvider):
        (WebCore::ScriptSourceProvider::~ScriptSourceProvider):
        * bindings/js/StringSourceProvider.h: Modified to inherit from 
        WebCore::ScriptSourceCode.
        (WebCore::StringSourceProvider::StringSourceProvider):

2009-07-21  Sam Weinig  <sam@webkit.org>

        Another attempt to fix the Windows build.

        * WebCore.vcproj/WebCore.vcproj:

2009-07-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the Windows build.

        * DerivedSources.cpp:

2009-07-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the GTK build.

        * GNUmakefile.am:

2009-07-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Autogenerate Objective-C binding implementation for RGBColor.

        No functionality change.

        * WebCore.xcodeproj/project.pbxproj: 
        * bindings/objc/DOMRGBColor.mm: Removed.
        * bindings/scripts/CodeGeneratorObjC.pm: Add logic to convert from
        WebCore::Color to NSColor*.
        * css/RGBColor.idl:

2009-07-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27242
        JSC bindings should use an auto-bound RGBColor class instead of hand-rolled JSRGBColor

        Move the JSC and Objective-C bindings onto using the RGBColor object instead
        of just an unsigned int. The JSC bindings are now completely autogenerated for
        this class. (Also removes the last lut from WebCore).

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSRGBColor.cpp: Removed.
        * bindings/js/JSRGBColor.h: Removed.
        * bindings/objc/DOM.mm:
        (-[DOMRGBColor _color]):
        * bindings/objc/DOMRGBColor.mm:
        (-[DOMRGBColor dealloc]):
        (-[DOMRGBColor finalize]):
        (-[DOMRGBColor red]):
        (-[DOMRGBColor green]):
        (-[DOMRGBColor blue]):
        (-[DOMRGBColor alpha]):
        (-[DOMRGBColor color]):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getRGBColorValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getRGBA32Value):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * css/RGBColor.cpp:
        (WebCore::RGBColor::alpha):
        * css/RGBColor.h:
        (WebCore::RGBColor::color):
        (WebCore::RGBColor::RGBColor):
        * css/RGBColor.idl:
        * page/DOMWindow.idl:
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::rgbColor):
        * svg/SVGColor.h:

2009-07-21  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Implement AbstractWorker::dispatchScriptErrorEvent by generating an ErrorEvent.
        https://bugs.webkit.org/show_bug.cgi?id=27515

        * workers/AbstractWorker.cpp:
        (WebCore::AbstractWorker::dispatchScriptErrorEvent):

2009-07-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move m_context out of generator into a superclass
        https://bugs.webkit.org/show_bug.cgi?id=27521

        Mostly this is removing code from CodeGeneratorJS
        and instead using a DOMObjectWithSVGContext superclass in JSDOMBinding.h.

        DOMObjectWithSVGContext.h is its own file so that WebKit doesn't need to
        know about SVGElement.h (WebKit includes JSDOMBinding.h for some reason).

        I also removed context pointer from SVGZoomEvent since it was never used.

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMObjectWithSVGContext.h: Added.
        (WebCore::DOMObjectWithSVGContext::context):
        (WebCore::DOMObjectWithSVGContext::DOMObjectWithSVGContext):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/scripts/CodeGeneratorJS.pm:

2009-07-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION (r46142):  editing/execCommand/19087.html & editing/execCommand/19653-1.html fail in Windows build
        https://bugs.webkit.org/show_bug.cgi?id=27480

        Because m_anchorType : 2 is treated as a signed integer by cl.exe, anchorType() wasn't returning the correct value.
        We made m_anchorType unsigned so that anchorType() returns the correct value.

        * dom/Position.h:
        (WebCore::Position::anchorType): statically cast to AnchorType

2009-07-21  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        [V8] Add V8 bindings for onerror in WorkerContext.
        https://bugs.webkit.org/show_bug.cgi?id=27518

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-07-21  Jian Li  <jianli@chromium.org>

        Fix the incorrect patch being landed for bug 27516 that has already been reviewed.
        https://bugs.webkit.org/show_bug.cgi?id=27516

        * workers/WorkerContext.h:
        (WebCore::WorkerContext::setOnerror):
        (WebCore::WorkerContext::onerror):
        * workers/WorkerContext.idl:

2009-07-21  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Add onerror to WorkerContext.
        https://bugs.webkit.org/show_bug.cgi?id=27516

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::mark):
        * workers/WorkerContext.h:
        (WebCore::WorkerContext::setOnerror):
        (WebCore::WorkerContext::onerror):
        * workers/WorkerContext.idl:

2009-07-21  Yong Li  <yong.li@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=27509
        Add font-related files for the WinCE port.

        Written by Yong Li <yong.li@torchmobile.com>

        * platform/graphics/wince/FontCacheWince.cpp: Added.
        * platform/graphics/wince/FontCustomPlatformData.cpp: Added.
        * platform/graphics/wince/FontCustomPlatformData.h: Added.
        * platform/graphics/wince/FontPlatformData.cpp: Added.
        * platform/graphics/wince/FontPlatformData.h: Added.
        * platform/graphics/wince/FontWince.cpp: Added.
        * platform/graphics/wince/GlyphPageTreeNodeWince.cpp: Added.
        * platform/graphics/wince/SimpleFontDataWince.cpp: Added.

2009-07-21  Kevin Ollivier  <kevino@theolliviers.com>

        Fix the Windows build, and update the comment on top now that wx uses WebCorePrefix.h too.

        * WebCorePrefix.h:

2009-07-21  Kevin Ollivier  <kevino@theolliviers.com>

        WebCorePrefix.h build fixes for non-Mac and wx / CURL builds.

        * WebCorePrefix.h:

2009-07-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        All DOMConstructorObjects should hold a pointer to the JSDOMGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=27478

        This is just moving code.
        I've added two new classes: DOMObjectWithGlobalPointer and DOMConstructorWithDocument.

        DOMObjectWithGlobalPointer is a new baseclass for DOMConstructorObject.
        (It's a baseclass because eventually all DOMObjects will have a global pointer, but
        I'll be moving them onto DOMObjectWithGlobalPointer in stages.)

        DOMConstructorWithDocument is a new baseclass for the 3 constructor objects
        which require a backpointer to the Document to function.  I made this a subclass of
        DOMConstructorObject to make clear that most constructors can hold no-such assumptions
        about having a back-pointer to the Document (since many constructors can be used from Workers).

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMObjectWithGlobalPointer::globalObject):
        (WebCore::DOMObjectWithGlobalPointer::scriptExecutionContext):
        (WebCore::DOMObjectWithGlobalPointer::DOMObjectWithGlobalPointer):
        (WebCore::DOMObjectWithGlobalPointer::mark):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        (WebCore::DOMConstructorWithDocument::document):
        (WebCore::DOMConstructorWithDocument::DOMConstructorWithDocument):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor):
        * bindings/js/JSMessageChannelConstructor.h:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSOptionConstructor.h:
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::JSWebKitCSSMatrixConstructor):
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::JSWebKitPointConstructor::JSWebKitPointConstructor):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::JSWorkerConstructor::JSWorkerConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):

2009-07-21  James Hawkins  <jhawkins@google.com>

        Reviewed by David Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=27453
        Initialize isInt when creating a CSSParserValue for a function.

        No change in behavior, so no tests.

        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::parserValue):

2009-07-20  Jens Alfke  <snej@google.com>
 
         Reviewed by David Levin.
 
         Bug 27448: [Chromium] On Mac, arrow keys should cause Select to pop up its menu.
         Mac build of Chromium doesn't follow Mac HI guidelines to pop up the menu when
         an arrow key is pressed.
         https://bugs.webkit.org/show_bug.cgi?id=27448
 
         No new tests; affects only control response to user input.
 
         * dom/SelectElement.cpp:
         Changed definition of ARROW_KEYS_POP_MENU to make it true in Mac Chromium,
         so it will behave compatibly with Mac HI guidelines on pop-up menus.
         It's not possible to have PLATFORM(MAC) be true in the Mac build of Chromium.
 
2009-07-21  Paul Godavari  <paul@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] popup menus can crash when the selected index is -1
        https://bugs.webkit.org/show_bug.cgi?id=27275

        Crash reports from users indicate a crash can occur when PopupListBox::isSelectableItem
        is passed an index of less than 0 (which is possible under certain circumstances). This
        change prevents such a value from causing a crash by enforcing valid index values passed
        by all callers of isSelectableItem. isSelectableItem is now a private method of
        PopupListBox, as there are no external callers.

        Also cleaned up a small amount of code for style and grammar errors.

        No automatic test is provided since we cannot send events to the child window used by
        the popup menu.

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::acceptIndex):
        (WebCore::PopupListBox::selectIndex):
        (WebCore::PopupListBox::isSelectableItem):
        (WebCore::PopupListBox::selectPreviousRow):

2009-07-21  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix. Don't include winsock2.h on wx, it conflicts with wx's inclusion of winsock.

        * platform/network/curl/ResourceHandleManager.h:

2009-07-21  Adam Roben  <aroben@apple.com>

        Roll out r46153, r46154, and r46155

        These changes were causing build failures and assertion failures on
        Windows.

        * ForwardingHeaders/wtf/PossiblyNull.h: Removed.
        * platform/graphics/cg/ImageBufferCG.cpp:

2009-07-21  Jian Li  <jianli@chromium.org>

        Reviewed by Eric Seidel.

        Implement ErrorEvent API.
        https://bugs.webkit.org/show_bug.cgi?id=27387

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * dom/ErrorEvent.cpp: Added.
        * dom/ErrorEvent.h: Added.
        * dom/ErrorEvent.idl: Added.
        * dom/Event.cpp:
        (WebCore::Event::isErrorEvent):
        * dom/Event.h:

2009-07-21  Priit Laes  <plaes@plaes.org>

        Reviewed by Gustavo Noronha.

        [Gtk] Searching in thepiratebay.org doesn't work with more than 1 word
        https://bugs.webkit.org/show_bug.cgi?id=24602

        Remove workaround required for <=libsoup-2.26.1

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::restartedCallback):

2009-07-21  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        V8IsolatedWorld keeps a handle to a disposed context
        https://bugs.webkit.org/show_bug.cgi?id=27397

        Make a copy of the context handle before making it weak.  We don't want
        to make the original handle weak because we want it to survive for the
        length of the V8IsolatedWorld::evaluate method.

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):

2009-07-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Add ability to evaluate selection while on break point.

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

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):
        (WebInspector.SourceFrame.prototype._documentKeyDown):

2009-07-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Special case ConsolePanel opening since
        it is a 'fast view'.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setWindowVisible):

2009-07-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Eric Seidel.

        Fix Qt code to follow the WebKit Coding Style.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::qstring):
        (WebCore::fixSpacing):
        * platform/graphics/qt/FontQt43.cpp:
        (WebCore::generateComponents):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::cursorToX):
        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::toQtFillRule):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::~GraphicsContext):
        (WebCore::GraphicsContext::getCTM):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::getWindowsContext):
        * platform/graphics/qt/IconQt.cpp:
        (WebCore::Icon::paint):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::ReadContext::read):
        (WebCore::ImageDecoderQt::ReadContext::readImageLines):
        (WebCore::ImageDecoderQt::setData):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/ImageSourceQt.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):
        (WebCore::ImageSource::frameHasAlphaAtIndex):
        (WebCore::ImageSource::frameIsCompleteAtIndex):
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::create):
        (WebCore::MediaPlayerPrivate::bytesLoaded):
        (WebCore::MediaPlayerPrivate::updateStates):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArcTo):
        (WebCore::Path::isEmpty):
        * platform/graphics/qt/TransformationMatrixQt.cpp:
        (WebCore::TransformationMatrix::operator QTransform):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::setDragImage):
        (WebCore::getCachedImage):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::hasData):
        * platform/qt/ClipboardQt.h:
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::title):
        * platform/qt/CursorQt.cpp:
        (WebCore::westPanningCursor):
        (WebCore::notAllowedCursor):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asFragment):
        * platform/qt/DragImageQt.cpp:
        (WebCore::createDragImageIconForCachedImage):
        * platform/qt/FileSystemQt.cpp:
        (WebCore::getFileSize):
        (WebCore::unloadModule):
        * platform/qt/Localizations.cpp:
        (WebCore::contextMenuItemTagShowSpellingPanel):
        * platform/qt/MIMETypeRegistryQt.cpp:
        (WebCore::):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::plainText):
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::populate):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::fallbackStyle):
        (WebCore::inflateButtonRect):
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::applyTheme):
        (WebCore::WorldMatrixTransformer::WorldMatrixTransformer):
        (WebCore::RenderThemeQt::paintMediaBackground):
        (WebCore::RenderThemeQt::paintMediaFullscreenButton):
        * platform/qt/RenderThemeQt.h:
        * platform/qt/ScreenQt.cpp:
        (WebCore::screenRect):
        (WebCore::usableScreenRect):
        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::contextMenu):
        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::scPart):
        (WebCore::scrollbarPart):
        * platform/qt/ScrollbarThemeQt.h:
        * platform/qt/SharedBufferQt.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/qt/TemporaryLinkStubs.cpp:
        (PluginDatabase::defaultPluginDirectories):
        (PluginDatabase::getPluginPathsInDirectories):
        (PluginDatabase::isPreferredPluginDirectory):
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):
        (WebCore::userIdleTime):
        (WebCore::prefetchDNS):
        * platform/text/qt/StringQt.cpp:
        (WebCore::String::String):
        * platform/text/qt/TextBoundaries.cpp:
        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::TextBreakIterator::following):
        (WebCore::TextBreakIterator::preceding):
        (WebCore::WordBreakIteratorQt::first):
        (WebCore::WordBreakIteratorQt::next):
        (WebCore::WordBreakIteratorQt::previous):
        (WebCore::CharBreakIteratorQt::first):
        (WebCore::CharBreakIteratorQt::next):
        (WebCore::CharBreakIteratorQt::previous):
        (WebCore::characterBreakIterator):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::userAgentStatic):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::init):

2009-07-21  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by David Levin.

        Added a first bunch of Haiku-specific files for WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=26988

        * platform/haiku/ClipboardHaiku.cpp: Added.
        (WebCore::ClipboardHaiku::ClipboardHaiku):
        (WebCore::ClipboardHaiku::clearData):
        (WebCore::ClipboardHaiku::clearAllData):
        (WebCore::ClipboardHaiku::getData):
        (WebCore::ClipboardHaiku::setData):
        (WebCore::ClipboardHaiku::types):
        (WebCore::ClipboardHaiku::files):
        (WebCore::ClipboardHaiku::dragLocation):
        (WebCore::ClipboardHaiku::dragImage):
        (WebCore::ClipboardHaiku::setDragImage):
        (WebCore::ClipboardHaiku::dragImageElement):
        (WebCore::ClipboardHaiku::setDragImageElement):
        (WebCore::ClipboardHaiku::createDragImage):
        (WebCore::ClipboardHaiku::declareAndWriteDragImage):
        (WebCore::ClipboardHaiku::writeURL):
        (WebCore::ClipboardHaiku::writeRange):
        (WebCore::ClipboardHaiku::hasData):
        * platform/haiku/ClipboardHaiku.h: Added.
        (WebCore::ClipboardHaiku::create):
        (WebCore::ClipboardHaiku::~ClipboardHaiku):
        * platform/haiku/CookieJarHaiku.cpp: Added.
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookiesEnabled):
        * platform/haiku/CursorHaiku.cpp: Added.
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::pointerCursor):
        (WebCore::moveCursor):
        (WebCore::crossCursor):
        (WebCore::handCursor):
        (WebCore::iBeamCursor):
        (WebCore::waitCursor):
        (WebCore::helpCursor):
        (WebCore::eastResizeCursor):
        (WebCore::northResizeCursor):
        (WebCore::northEastResizeCursor):
        (WebCore::northWestResizeCursor):
        (WebCore::southResizeCursor):
        (WebCore::southEastResizeCursor):
        (WebCore::southWestResizeCursor):
        (WebCore::westResizeCursor):
        (WebCore::northSouthResizeCursor):
        (WebCore::eastWestResizeCursor):
        (WebCore::northEastSouthWestResizeCursor):
        (WebCore::northWestSouthEastResizeCursor):
        (WebCore::columnResizeCursor):
        (WebCore::rowResizeCursor):
        (WebCore::verticalTextCursor):
        (WebCore::cellCursor):
        (WebCore::contextMenuCursor):
        (WebCore::noDropCursor):
        (WebCore::copyCursor):
        (WebCore::progressCursor):
        (WebCore::aliasCursor):
        (WebCore::noneCursor):
        (WebCore::notAllowedCursor):
        (WebCore::zoomInCursor):
        (WebCore::zoomOutCursor):
        (WebCore::grabCursor):
        (WebCore::grabbingCursor):

2009-07-21  Albert Astals Cid <aacid@kde.org>

        Reviewed by Tor Arne Vestbø.

        Change #error line not to have a ' (single quote)

        * DerivedSources.cpp:

2009-07-21  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by David Levin.

        Add ENABLE_RUBY to list of build options
        https://bugs.webkit.org/show_bug.cgi?id=27324

        Added flag ENABLE_RUBY:

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

2009-07-21  James Hawkins  <jhawkins@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=27467
        Return an empty path in PlatformContextSkia::currentPathInLocalCoordinates
        if matrix.invert() fails.  This prevents the use of an uninitialized
        value in inverseMatrix.

        No new tests added.  Run
        LayoutTests/svg/dynamic-updates/SVGMarkerElement-dom-markerHeight-attr.html
        under valgrind and notice there are no errors.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::currentPathInLocalCoordinates):

2009-07-21  Stephen White  <senorblanco@chromium.org>

        Reviewed by Eric Seidel.

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

        Fix dotted and dashed borders on Chromium/skia.  This follows
        the logic in the Cg path, so results are much closer to Safari now 
        (some tests won't be exactly the same due to font layout differences).

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::setupPaintForStroking):

2009-07-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make it harder to misuse try* allocation routines
        https://bugs.webkit.org/show_bug.cgi?id=27469

        Add forwarding header for PossiblyNull type, and add missing null check
        to ImageBuffer creation.

        * ForwardingHeaders/wtf/PossiblyNull.h: Added.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2009-07-20  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Guard access to installedMediaEngines()[0].

        https://bugs.webkit.org/show_bug.cgi?id=27479
        http://code.google.com/p/chromium/issues/detail?id=16541

        Else where in the file, installedMediaEngines is always checked for
        being empty because access. This patch adds a case which missed that
        check.

        This triggered a crash in Chromium:
            http://www.yakeze.com/chat/example-chromium-crash/

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):

2009-07-20  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Allow search entries to render with a CSS border if the RenderTheme
        doesn't paint them.

        https://bugs.webkit.org/show_bug.cgi?id=27466
        http://code.google.com/p/chromium/issues/detail?id=16958

        <input type="search"> is very much like a text entry except that,
        currently, if the RenderTheme doesn't deal with it, nothing is
        rendered. With this patch, the default CSS border is rendered if the
        RenderTheme requests it.

        This will affect many layout tests, but only for Chromium Linux and
        those results are not currently in the WebKit tree.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintBorderOnly):

2009-07-17  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Switch to faster methods to access internal fields.
        https://bugs.webkit.org/show_bug.cgi?id=27372

        Minor refactoring.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertToSVGPODTypeImpl):
        (WebCore::V8DOMWrapper::setDOMWrapper):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::convertDOMWrapperToNative):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNode):
        (WebCore::V8DOMWrapper::convertToNativeObject):
        (WebCore::V8DOMWrapper::convertToNativeEvent):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-20  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium Linux: cache Harfbuzz faces.

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

        Previously, we recreated the Harfbuzz face for each script-run. With
        this patch, we keep the Harfbuzz face in the FontPlatformData (created
        as needed) and so they will persist for the duration of the
        FontPlatformData.

        Shouldn't affect any layout tests. Results in a significant win on the
        intl2 page cycler time.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::~TextRunWalker):
        (WebCore::TextRunWalker::setupFontForScriptRun):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::RefCountedHarfbuzzFace::~RefCountedHarfbuzzFace):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::harfbuzzFace):
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        (WebCore::FontPlatformData::RefCountedHarfbuzzFace::create):
        (WebCore::FontPlatformData::RefCountedHarfbuzzFace::face):
        (WebCore::FontPlatformData::RefCountedHarfbuzzFace::RefCountedHarfbuzzFace):
        * platform/graphics/chromium/HarfbuzzSkia.h: Added.

2009-07-20  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Simon Fraser.

        REGRESSION (r46142): Need to remove showTreeThisForThis
        https://bugs.webkit.org/show_bug.cgi?id=27475

        Removes showTreeThisForThis

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

2009-07-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Refactoring of indentRegion to fix bugs 26816 and 25317
        https://bugs.webkit.org/show_bug.cgi?id=26816
        https://bugs.webkit.org/show_bug.cgi?id=25317
        https://bugs.webkit.org/show_bug.cgi?id=23995 (partially)

        This patch implements appendParagraphIntoNode, a simpler specialized version of moveParagraph
        and replaces all calls inside indentRegion. The following is the new behavior of indentRegion.

        1. We try to indent as many wrapping nodes as possible.
           e.g. when indenting "hello" in <div>hello</div>, we try to indent div as well.
        2. We do not delete any wrapping elements
           With moveParagraph, we used to remove all wrapping nodes, and replaced with a blockquote.
           This was causing https://bugs.webkit.org/show_bug.cgi?id=23995 for indentation.
           With appendParagraphIntoNode, we can preserve all wrapping nodes.
        3. We only split the tree until the closest block node instead of until the root editable node.
           This behavioral change fixes the bug 25317.
        4. When multiple paragraphs are indented, we indent the highest common ancestor within the selection.
           e.g. when a list is a child node of a div, and the entire div is intended,
                we enclose the div by a single blockquote.

        Note that new behavior is more consistent with that of Internet Explorer and Firefox.
        To demonstrate this, the following tests are added.

        Tests: editing/execCommand/indent-div-inside-list.html
               editing/execCommand/indent-nested-blockquotes.html
               editing/execCommand/indent-nested-div.html
               editing/execCommand/indent-second-paragraph-in-blockquote.html

        * editing/IndentOutdentCommand.cpp: prepareBlockquoteLevelForInsertion is removed
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): uses appendParagraphIntoNode now
        (WebCore::IndentOutdentCommand::indentIntoBlockquote): uses appendParagraphIntoNode now
        (WebCore::IndentOutdentCommand::appendParagraphIntoNode): removes a paragraph and appends it to a new node
        (WebCore::IndentOutdentCommand::removeUnnecessaryLineBreakAt): removes a break element at the specified position
        (WebCore::IndentOutdentCommand::indentRegion): exhibits the described behavior
        * editing/IndentOutdentCommand.h: updated prototype

2009-07-20  Dan Bernstein  <mitz@apple.com>

        Try to fix release builds after r46136

        * dom/Element.cpp:

2009-07-17  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Eric Seidel.

        Media Controls: We are specifying the text height, where it is unneeded and the slider is 2px off.
        https://bugs.webkit.org/show_bug.cgi?id=27380

        Adjust the margin of the slider and remove useless height specification to fix alignement of the media controls.

        * css/mediaControlsQT.css:

2009-07-20  Peter Kasting  <pkasting@google.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=27468
        Back out r46060, which caused problems for some Apple developers.

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

2009-07-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        When loading a custom view into a frame, the old document is still
        around
        <rdar://problem/5145841>

        Safari fires onload before PDF is loaded into the browser
        <rdar://problem/6618869>

        Test: fast/loader/non-html-load-event.html

        * GNUmakefile.am: Added PlaceholderDocument.{cpp,h}
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCoreSources.bkl: Ditto.
        * dom/Document.h:
        (WebCore::Document::setStyleSelector): Added this protected accessor for
            PlaceholderDocument to use.
        * dom/Element.cpp:
        (WebCore::Element::clientWidth): Check whether the document has a
            renderer.
        (WebCore::Element::clientHeight): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin): Create a PlaceholderDocument for frames
            that do not use an HTML view. Do not nullify the content size in
            that case.
        (WebCore::FrameLoader::transitionToCommitted): For frames that do not
            use an HTML view, call receivedFirstData(), which sets up the
            frame with a new PlaceHolderDocument.
        * loader/PlaceholderDocument.cpp: Added.
        (WebCore::PlaceholderDocument::attach): Sets up the style selector but
            does not create a RenderView.
        * loader/PlaceholderDocument.h: Added.
        (WebCore::PlaceholderDocument::create):
        (WebCore::PlaceholderDocument::PlaceholderDocument):

2009-07-20  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Handle opacity and opacity animations on transform layers in Leopard
        https://bugs.webkit.org/show_bug.cgi?id=27398

        This makes two changes, and only for Leopard. 

        First, whenever opacity is changed on a layer I propagate the 
        change into the content layer and all the children if the layer 
        on which opacity is set is a transform layer (preserve3D is true). 
        The opacity set is the accumulated opacity from this layer
        and all its direct ancestor transform layers. Second, I turn off all 
        hardware opacity animation.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::accumulatedOpacity):
        (WebCore::GraphicsLayer::distributeOpacity):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setOpacityInternal):
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setPreserves3D):
        (WebCore::GraphicsLayerCA::setOpacity):
        (WebCore::GraphicsLayerCA::animateFloat):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::setOpacityInternal):
        (WebCore::GraphicsLayerCA::updateOpacityOnLayer):

2009-07-20  Yong Li  <yong.li@torchmobile.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=27349
        Add GraphicsContext implementation for the WinCE port.

        Written by Yong Li <yong.li@torchmobile.com>, George Staikos <george.staikos@torchmobile.com> and Lyon Chen <lyon.chen@torchmobile.com>
        with trivial style fixes by Adam Treat <adam.treat@torchmobile.com>

        * platform/graphics/wince/GraphicsContextWince.cpp: Added.

2009-07-20  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding the Win SQLite VFS implementation for Chromium, and stubs
        for the Mac and Linux VFSs.

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

        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp: Added.
        * platform/sql/chromium/SQLiteFileSystemChromiumLinux.cpp: Added.
        * platform/sql/chromium/SQLiteFileSystemChromiumMac.cpp: Added.
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp: Added.

2009-07-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=27097
        [Gtk] Segfault when examining an object of ROLE_TABLE via at-spi

        Check that an object is a RenderObject before trying to access its
        renderer and related node.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_role):

2009-07-20  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] font cache reworking
        https://bugs.webkit.org/show_bug.cgi?id=27265

        Reimplemented Qt's FontCache in a way that follows the shared one.
        Now we can release its elements when those became inactive.
        FontFallbackList had been changed to be able to hold WebCore fonts in its list and to be able to release a FontData what is in the cache.

        No change in behavior, so no tests.

        * platform/graphics/qt/FontCacheQt.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::isHashTableDeletedValue):
        (WebCore::FontPlatformDataCacheKey::): Key type for the cache of FontPlatformData objects.
        It can be constructed from a FontPlatformData or from a FontDescription. The keys have to be consistent
        with FontPlatformData::FontPlatformData(const FontDescription&) - if we create the same
        FontPlatformData from two FontDescription then we have to create the same key from them, and vica versa.
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::FontPlatformDataCacheKey::hash):
        (WebCore::FontPlatformDataCacheKey::computeHash):
        (WebCore::FontPlatformDataCacheKey::hashTableDeletedSize):
        (WebCore::FontPlatformDataCacheKeyHash::hash):
        (WebCore::FontPlatformDataCacheKeyHash::equal):
        (WebCore::FontPlatformDataCacheKeyTraits::emptyValue):
        (WebCore::FontPlatformDataCacheKeyTraits::constructDeletedValue):
        (WebCore::FontPlatformDataCacheKeyTraits::isDeletedValue):
        (WebCore::FontCache::getCachedFontPlatformData): Get a FontDescription and returns a FontPlatformData.
        (WebCore::FontCache::getCachedFontData): Get a FontPlatformData and returns a SimpleFontData.
        (WebCore::FontCache::releaseFontData): Get a SimpleFontData and releases it from the cache. Also releases the appropriate FontPlatformData.
        (WebCore::FontCache::purgeInactiveFontData): Frees inactive elements.
        (WebCore::FontCache::invalidate): Frees all inactive elements (call purgeInactiveFontData with default argument)
        * platform/graphics/qt/FontFallbackListQt.cpp:
        (WebCore::FontFallbackList::releaseFontData):
        (WebCore::FontFallbackList::fontDataAt):
        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformData::family): Getter. It is needed for FontPlatformDataCacheKey.
        (WebCore::FontPlatformData::bold): Ditto.
        (WebCore::FontPlatformData::italic): Ditto.
        (WebCore::FontPlatformData::smallCaps): Ditto.
        (WebCore::FontPlatformData::pixelSize): Ditto.
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Set m_bold.

2009-07-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=26716
        [Gtk] Each XMLHttpRequest leaks memory.

        Free the SoupURI we create to check the URI. Fix suggested by John
        Kjellberg.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::):

2009-07-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] On Symbian link against system sqlite3
        https://bugs.webkit.org/show_bug.cgi?id=27368

        Add an option to force linking against system sqlite3
        by adding system-sqlite to the CONFIG variable.

        The Symbian specific part of this patch is contributed by 
        Norbert Leser.

        * WebCore.pro:

2009-07-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Change the glib version check to check for the first unstable
        release with g_mapped_file_unref. Otherwise this would be useless
        until 2.22 is released, a few months from now.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startHttp):

2009-07-20  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by and done with Tor Arne Vestbø.

        Fix fast/css/pseudo-required-optional-*.html in the Qt build
        after r46062.

        These tests triggered a bug in RenderThemeQt where we did not fall back
        to the unstyled painting of text areas and input fields when they have
        a styled background.

        Our re-implementation of isControlStyled incorrectly only checked the
        border for determining whether to style or not. The base-implementation
        performs the same check, but also includes the background. Removing
        our implementation fixes the appearance.

        * platform/qt/RenderThemeQt.cpp: Removed isControlStyled reimplementation.
        * platform/qt/RenderThemeQt.h: Ditto.

2009-07-20  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Add missing (sorted) header files to the HEADERS variable in the qmake
        .pro file for improved completion in IDEs.

        * WebCore.pro:

2009-07-19  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Factor V8ConsoleMessage out of V8Proxy
        https://bugs.webkit.org/show_bug.cgi?id=27421

        No behavior change.

        * WebCore.gypi:
        * bindings/v8/V8ConsoleMessage.cpp: Added.
        (WebCore::V8ConsoleMessage::V8ConsoleMessage):
        (WebCore::V8ConsoleMessage::dispatchNow):
        (WebCore::V8ConsoleMessage::dispatchLater):
        (WebCore::V8ConsoleMessage::processDelayed):
        (WebCore::V8ConsoleMessage::handler):
        * bindings/v8/V8ConsoleMessage.h: Added.
        (WebCore::V8ConsoleMessage::Scope::Scope):
        (WebCore::V8ConsoleMessage::Scope::~Scope):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::logInfo):
        (WebCore::reportUnsafeAccessTo):
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):
        (WebCore::V8Proxy::newInstance):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::processConsoleMessages):

2009-07-19  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Adam Barth.

        Remove unused member variable.

        * svg/SVGPolyElement.h:

2009-07-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        HTMLAudioElement: constructor should set "autobuffer" attribute
        https://bugs.webkit.org/show_bug.cgi?id=27422

        Test: media/audio-constructor-autobuffer.html

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
            Set 'autobuffer' attribute.

2009-07-19  Thierry Bastian <thierry.bastian@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Qt build with mingw.

        * WebCore.pro: Don't use MSVC commandline options to disable warnings
        with mingw.

2009-07-19  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Phase 2: Remove event listener methods from V8Proxy
        https://bugs.webkit.org/show_bug.cgi?id=27415

        No behavior change.

        * bindings/v8/V8ObjectEventListener.cpp:
        (WebCore::weakObjectEventListenerCallback):
        (WebCore::V8ObjectEventListener::~V8ObjectEventListener):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::disconnectEventListeners):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::eventListeners):
        (WebCore::V8Proxy::objectListeners):
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        (WebCore::getEventListener):
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::~V8EventListener):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::getEventListener):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::getEventListener):
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-18  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [Gtk] soup/ResourceHandleSoup.cpp:533: error: 'g_mapped_file_free' was not declared in this scope
        https://bugs.webkit.org/show_bug.cgi?id=27230

        Use g_mapped_file_unref for GLIB version 2.22 onwards.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::startHttp):

2009-07-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Add spread radius support to -webkit-box-shadow
        https://bugs.webkit.org/show_bug.cgi?id=27417
        rdar://problem/7072267

        Test: fast/box-shadow/spread.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForShadow): Added a property ID parameter and used it to
            include the spread length for box-shadow but not for text-shadow.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
            Pass the property ID to valueForShadow().

        * css/CSSParser.cpp:
        (WebCore::ShadowParseContext::ShadowParseContext): Added property,
            spread, and allowSpread members. Added a property ID parameter to
            the constructor. Initialize the property and allowSpread members.
        (WebCore::ShadowParseContext::allowLength): Added allowSpread.
        (WebCore::ShadowParseContext::commitValue): Pass the spread value to
            the ShadowValue constructor. Reset allowSpread.
        (WebCore::ShadowParseContext::commitLength): Allow spread after blur
            for the box-shadow property.
        (WebCore::ShadowParseContext::commitColor): Reset allowSpread.
        (WebCore::CSSParser::parseShadow): Pass the property ID to
            ShadowParseContext().

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Get the spread value from
            the shadow value and pass it to the ShadowData constructor.

        * css/ShadowValue.cpp:
        (WebCore::ShadowValue::ShadowValue): Added spread.
        (WebCore::ShadowValue::cssText): Added spread.

        * css/ShadowValue.h:
        (WebCore::ShadowValue::create): Added spread.

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc): Blend the spread value.
        (WebCore::PropertyWrapperShadow::blend): Added 0 spread to the default
            shadow.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally): Account for spread in
            the visual overflow calculations.
        (WebCore::InlineFlowBox::placeBoxesVertically): Ditto.
        (WebCore::InlineFlowBox::paint): Ditto.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::overflowHeight): Ditto.
        (WebCore::RenderBlock::overflowWidth): Ditto.
        (WebCore::RenderBlock::overflowLeft): Ditto.
        (WebCore::RenderBlock::overflowTop): Ditto.
        (WebCore::RenderBlock::overflowRect): Ditto.
        (WebCore::RenderBlock::layoutBlock): Ditto.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow): Inflate the shadow-
            casting rect by the shadow spread value. Adjust border radii if
            necessary.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Account for spread in the
            visual overflow calculations.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateRects): Ditto.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded): Account for spread.
        (WebCore::RenderObject::adjustRectForOutlineAndShadow): Ditto.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::adjustOverflowForBoxShadowAndReflect): Ditto.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setTextShadow): Assert that text shadows do not
            have spread.

        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData): Added spread.
        (WebCore::ShadowData::operator==): Compare spread.
        * rendering/style/ShadowData.h:
        (WebCore::ShadowData::ShadowData): Added spread.

2009-07-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Jan Alonzo.

        Minor FrameLoader.cpp cleanup
        https://bugs.webkit.org/show_bug.cgi?id=27406

        No behavior change.

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

2009-07-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        [V8] Move event listener methods from V8Proxy to V8EventListenerList
        https://bugs.webkit.org/show_bug.cgi?id=27408

        Move some event listener code out of V8Proxy and into the event
        listener list.

        I'd like to remove these methods from V8Proxy entirely and just expose
        getters for the lists themselves, but I'll do that in a follow up
        patch.

        * bindings/v8/V8EventListenerList.cpp:
        (WebCore::V8EventListenerList::findWrapper):
        * bindings/v8/V8EventListenerList.h:
        (WebCore::V8EventListenerList::findOrCreateWrapper):
        * bindings/v8/V8ObjectEventListener.cpp:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::findV8EventListener):
        (WebCore::V8Proxy::findOrCreateV8EventListener):
        (WebCore::V8Proxy::removeV8EventListener):
        (WebCore::V8Proxy::findObjectEventListener):
        (WebCore::V8Proxy::findOrCreateObjectEventListener):
        (WebCore::V8Proxy::removeObjectEventListener):
        * bindings/v8/V8Proxy.h:

2009-07-18  Jeremy Orlow  <jorlow@chromium.org>

        Rubber stamped by Adam Barth.

        Revert https://bugs.webkit.org/show_bug.cgi?id=27383
        https://bugs.webkit.org/show_bug.cgi?id=27407

        Revert Jens' patch.  I believe he forgot to include a file.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        * bindings/v8/V8DataGridDataSource.cpp: Removed.
        * bindings/v8/V8DataGridDataSource.h: Removed.
        * bindings/v8/V8GCController.h:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-07-17  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.
        
        https://bugs.webkit.org/show_bug.cgi?id=27405

        Fixes an issue when decoding HTML entities with an unknown named entity that 
        caused null-characters to be inserted into the decoded result.

        Test: http/tests/security/xssAuditor/link-onclick-ampersand.html
              http/tests/security/xssAuditor/javascript-link-ampersand.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodeHTMLEntities): Added check to conditional so that
        non-zero entity values are not inserted during decoding process.

2009-07-17  Jan Michael Alonzo  <jmalonzo@webkit.org>

        <http://webkit.org/b/18363> [GTK] Combo boxes cannot be opened pressing space

        Reviewed by Holger Freyther.

        Add Gtk to platforms that want to open the menulist using the
        spacebar.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):

2009-07-17  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25523
        [GTK] The text displayed by push buttons is not exposed to assistive technologies

        Add new public method text() to RenderButton and use it from
        AccessibilityRenderObject::stringValue().

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::text):
        * rendering/RenderButton.h:

2009-07-17  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Restore proxy retrieval
        https://bugs.webkit.org/show_bug.cgi?id=27369

        No new tests are needed.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):

2009-07-17  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=27351
        Added platform "Symbian" to WEBCORE_NAVIGATOR_PLATFORM
        Use uname to find the correct platform for Linux.

        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform):

2009-07-17  Jens Alfke  <snej@chromium.org>

        Reviewed by Dimitri Glazkov.

        Hook up V8 bindings for DataGrid elements.
        https://bugs.webkit.org/show_bug.cgi?id=27383
        http://code.google.com/p/chromium/issues/detail?id=16730

        Tests: Enhanced LayoutTests/fast/dom/HTMLDataGridElement/*
        to handle exceptions, check appropriate JS prototypes, and
        test column-list's item() method as well as array-indexing.

        * WebCore.gypi: Added new source files.
        * bindings/scripts/CodeGeneratorV8.pm: Made GenerateBatchedAttributeData put #if's around conditional attributes.
        * bindings/v8/DOMObjectsInclude.h: #include DataGrid headers.
        * bindings/v8/V8DOMWrapper.cpp: Add bindings from HTML tags to datagrid templates.
        (WebCore::V8DOMWrapper::getTemplate): Customize datagrid template.
        * bindings/v8/V8DataGridDataSource.cpp: Added. (Based on JSDataGridDataSource)
        (WebCore::V8DataGridDataSource::V8DataGridDataSource):
        (WebCore::V8DataGridDataSource::~V8DataGridDataSource):
        * bindings/v8/V8DataGridDataSource.h: Added. (Based on JSDataGridDataSource)
        (WebCore::V8DataGridDataSource::create):
        (WebCore::V8DataGridDataSource::isJSDataGridDataSource):
        (WebCore::V8DataGridDataSource::jsDataSource):
        (WebCore::asV8DataGridDataSource):
        * bindings/v8/V8GCController.h: Added new handle type "DATASOURCE".
        * bindings/v8/V8Index.h: Conditionalize datagrid stuff.
        * bindings/v8/custom/V8CustomBinding.h: Declare more accessors. Conditionalize.
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp: Fill in dataSource accessors.
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):

2009-07-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        StorageArea should only contain methods we intend to proxy.
        https://bugs.webkit.org/show_bug.cgi?id=27181

        Right now, StorageAreaSync takes in a StorageArea* and calls methods
        like importItem.  Really, StorageAreaSync should be operating directly
        on StorageAreaImpl* and those methods should be removed from StorageArea
        since StorageAreaSync should never be attached to anything other than a
        StorageAreaImpl.

        This was pointed out in the review for
        https://bugs.webkit.org/show_bug.cgi?id=27072

        Also clean up StorageNamespaceImpl to operate directly on
        StorageAreaImpl.  Also, get rid of the factory for StorageArea
        since nothing should ever create a StorageArea directly.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/StorageArea.cpp: Removed.
        * storage/StorageArea.h:
        (WebCore::StorageArea::~StorageArea):
        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::copy):
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::create):
        (WebCore::StorageAreaSync::StorageAreaSync):
        * storage/StorageAreaSync.h:
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::copy):
        (WebCore::StorageNamespaceImpl::storageArea):
        * storage/StorageNamespaceImpl.h:

2009-07-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add v8 implementation for DOM Storage ScriptObjectQuarantine.
        https://bugs.webkit.org/show_bug.cgi?id=27327

        Wrap the storage object with a generic object as is done elsewhere in
        the file (but continue to hit a NOTIMPLEMENTED if DOM_STORAGE is not
        enabled.

        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):

2009-07-17  Mads Ager  <ager@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=27394
        Fix access to global object wrappers after navigation of their
        frame in the V8 bindings.  This fixes selenium test failures.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::updateDocument):

2009-07-17  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build by removing implicit float <-> double conversions.

        * inspector/InspectorController.cpp:
        (WebCore::constrainedAttachedWindowHeight):

2009-07-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <rdar://problem/5712795> Win: Cannot change the height of the docked Web Inspector (14272)
        https://bugs.webkit.org/show_bug.cgi?id=14272
        
        Moved preference setting for attached inspector height and inspector height calculation from
        WebInspectorClient.mm into InspectorController.cpp, to make this code cross-platform and enable
        Windows resizing of attached inspector.

        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:

2009-07-17  Dan Bernstein  <mitz@apple.com>

        Another attempt at fixing the build after r46063

        * WebCore.xcodeproj/project.pbxproj: Made ExceptionCode.h a private
            header, because it is now included from htmlediting.h, which is
            a private header.

2009-07-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27396
        Moving cursor in Thai text sometimes jumps over two characters

        Test: editing/text-iterator/thai-cursor-movement.html

        * platform/text/TextBreakIteratorICU.cpp: (WebCore::cursorMovementIterator): Added a special
        case for five Thai characters, matching ICU/CLDR changes.

2009-07-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Some constructor objects exposed on Window have the wrong prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=27276

        Several Constructor classes were already being passed a global object
        during construction, but they were ignoring it for prototype lookup.
        I've fixed those to use the passed global object instead.

        Most of these Constructor classes should just be auto-generated, but I
        refrained from changing them over to auto-gen in this patch.

        Fixed CodeGeneratorJS to pass a global object to getDOMConstructor when
        available, otherwise default to deprecatedGlobalObjectForPrototype(exec)
        to match existing behavior.

        Test: fast/dom/prototype-inheritance.html

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor): use the existing globalObject pointer for prototype lookup
        * bindings/js/JSDOMBinding.h:
        (WebCore::deprecatedGlobalObjectForPrototype): Make it easy to detect where the wrong global object is being used.
        (WebCore::deprecatedGetDOMStructure):
        * bindings/js/JSDOMGlobalObject.h: remove error-prone getDOMConstructor, require passing JSDOMGlobalObject*
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::webKitPoint): pass "this" for the global object.
        (WebCore::JSDOMWindow::webKitCSSMatrix): pass "this" for the global object.
        (WebCore::JSDOMWindow::xsltProcessor): pass "this" for the global object.
        (WebCore::JSDOMWindow::worker): pass "this" for the global object.
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor): use the existing globalObject pointer for prototype lookup
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor): use the existing globalObject pointer for prototype lookup
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor): use the existing globalObject pointer for prototype lookup
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::JSWebKitCSSMatrixConstructor): add new globalObject parameter and use it
        * bindings/js/JSWebKitCSSMatrixConstructor.h:
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::JSWebKitPointConstructor::JSWebKitPointConstructor): add new globalObject parameter and use it
        * bindings/js/JSWebKitPointConstructor.h:
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::JSWorkerConstructor::JSWorkerConstructor): add new globalObject parameter and use it
        * bindings/js/JSWorkerConstructor.h:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor): use the existing globalObject pointer for prototype lookup
         -- XMLHttpRequest constructor was also missing a length.  Added one.
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        * bindings/js/JSXSLTProcessorConstructor.h:
        * bindings/scripts/CodeGeneratorJS.pm:

2009-07-17  Dan Bernstein  <mitz@apple.com>

        Build fix

        * editing/htmlediting.cpp:
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):

2009-07-17  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix for symbol lookup error.

        Move AbstractWorker from SHARED_WORKERS to WORKERS as Worker derives from it now
        Changed in http://trac.webkit.org/changeset/46048

        * GNUmakefile.am:

2009-07-17  Ryosuke Niwa  <ryosuke.niwa@gmail.com>

        Reviewed by Eric Seidel.

        htmlediting.cpp needs more utility functions to fix the bug 26816
        https://bugs.webkit.org/show_bug.cgi?id=27038

        In order to fix the bug 26816, we need several utility functions be added to htmlediting.cpp

        No tests because functions haven't been used anywhere yet.

        * dom/Range.cpp:
        (WebCore::Range::create):
        (WebCore::Range::comparePoint): added const qualifier
        (WebCore::Range::compareNode): added const qualifier
        * dom/Range.h:
        * editing/htmlediting.cpp:
        (WebCore::unsplittableElementForPosition): find the enclosing unsplittable element (editing root & table cell)
        (WebCore::positionBeforeNode): added ASSERT(node)
        (WebCore::positionAfterNode): added ASSERT(node)
        (WebCore::visiblePositionBeforeNode):
        (WebCore::visiblePositionAfterNode):
        (WebCore::createRange): create a range object from two visible positions
        (WebCore::extendRangeToWrappingNodes): extend range to include nodes that starts and ends at the boundaries
        (WebCore::canMergeLists): typo
        (WebCore::indexForVisiblePosition): added const qualifier
        (WebCore::isVisiblyAdjacent): typo
        (WebCore::isNodeVisiblyContainedWithin): determine if a node is inside a range or within the visible boundaries of the range
        * editing/htmlediting.h:

2009-07-17  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25551
        Added support for the "required" attribute, the valueMissing flag
        to the ValidityState object and :required/:optional CSS pseudoclasses.
        Part of HTML5 sec. Forms specs.
        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#attr-input-required

        Tests: fast/css/pseudo-required-optional-001.html
               fast/css/pseudo-required-optional-002.html
               fast/css/pseudo-required-optional-003.html
               fast/css/pseudo-required-optional-004.html
               fast/css/pseudo-required-optional-005.html
               fast/css/pseudo-required-optional-006.html
               fast/forms/ValidityState-valueMissing-001.html
               fast/forms/ValidityState-valueMissing-002.html
               fast/forms/ValidityState-valueMissing-003.html
               fast/forms/ValidityState-valueMissing-004.html
               fast/forms/ValidityState-valueMissing-005.html
               fast/forms/ValidityState-valueMissing-006.html
               fast/forms/ValidityState-valueMissing-007.html
               fast/forms/ValidityState-valueMissing-008.html
               fast/forms/ValidityState-valueMissing-009.html
               fast/forms/required-attribute-001.html
               fast/forms/required-attribute-002.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): pseudoRequired/pseudoOptional
        * css/CSSSelector.h:
        (WebCore::CSSSelector::): ditto
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): ditto
        * dom/Element.h:
        (WebCore::Element::isOptionalFormControl): check for optional controls
        (WebCore::Element::isRequiredFormControl): check for required controls
        * html/HTMLAttributeNames.in: required attribute
        * html/HTMLButtonElement.h:
        (WebCore::HTMLButtonElement::isOptionalFormControl): ditto
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::required): requiredAttr getter
        (WebCore::HTMLFormControlElement::setRequired): requiredAttr setter
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::valueMissing): method definition
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueMissing): validation code
        (WebCore::HTMLInputElement::isRequiredFormControl): ditto
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isOptionalFormControl): ditto
        * html/HTMLInputElement.idl: required DOM attribute
        * html/HTMLSelectElement.h:
        (WebCore::HTMLSelectElement::isOptionalFormControl): ditto
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::valueMissing): validation code
        (WebCore::HTMLTextAreaElement::isOptionalFormControl): ditto
        (WebCore::HTMLTextAreaElement::isRequiredFormControl): ditto
        * html/HTMLTextAreaElement.idl: required DOM attribute
        * html/ValidityState.cpp:
        * html/ValidityState.h:
        (WebCore::ValidityState::valueMissing): validation flag

2009-07-17  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27390 CSS custom 
        cursor hotspots should work in quirks mode
        - and corresponding <rdar://problem/6554340>

        Enable hotspots in quirks mode.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

        Update this manual test to reflect the fact that hotspots are now 
        expected to work in quirks mode.
        * manual-tests/css3-cursor-fallback-quirks.html:

2009-07-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

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

2009-07-17  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=27384
        Random crashes in appcache/update-cache.html test

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Reorder code to avoid using a handle
        after canceling it.

2009-07-17  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Need to refactor Worker to derive from AbstractWorker
        https://bugs.webkit.org/show_bug.cgi?id=26948

        Changed Worker to derive from AbstractWorker, which involved moving
        AbstractWorker files from being wrapped by ENABLE_SHARED_WORKERS to
        ENABLE_WORKERS.

        Removed obsolete functionality from the JS/V8 bindings that is now
        inherited from AbstractWorker.

        * WebCore.pro:
        Moved AbstractWorker files out of SHARED_WORKERS section and into WORKERS.
        * bindings/js/JSAbstractWorkerCustom.cpp:
        Changed to be wrapped by ENABLE(WORKERS), not ENABLE(SHARED_WORKERS).
        * bindings/js/JSWorkerCustom.cpp:
        Removed obsolete event listener code (now in base class)
        (WebCore::JSWorker::mark):
        No longer need to explicitly mark event listeners (handled by base class).
        * bindings/v8/V8Index.h:
        Moved AbstractWorker lines out of SHARED_WORKERS section and into WORKERS.
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp:
        Changed to be wrapped by ENABLE(WORKERS), not ENABLE(SHARED_WORKERS).
        * bindings/v8/custom/V8CustomBinding.h:
        Moved AbstractWorker lines out of SHARED_WORKERS section and into WORKERS.
        * bindings/v8/custom/V8WorkerCustom.cpp:
        Removed obsolete event listener code that now lives in the base class.
        (WebCore::V8WorkerConstructor): Cleaned up legacy style nits.
        * workers/AbstractWorker.cpp:
        Changed to be wrapped by ENABLE(WORKERS), not ENABLE(SHARED_WORKERS).
        * workers/AbstractWorker.h:
        Changed to be wrapped by ENABLE(WORKERS), not ENABLE(SHARED_WORKERS).
        * workers/Worker.cpp:
        Removed event listener code (now in base class).
        (WebCore::Worker::Worker): Now derives from AbstractWorker.
        (WebCore::Worker::notifyFinished): Calls dispatchLoadErrorEvent on base class.
        * workers/Worker.h:
        Removed APIs that now live in the base class.
        * workers/Worker.idl:
        Now derives from AbstractWorker.
        Removed APIs that live in the base class, and added a GenerateToJS flag.

2009-07-17  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27379
        Absolutely-positioned elements with a scrollbar wrap prematurely.  Make sure to include
        the vertical scrollbar width for overflow:scroll elements.

        Added fast/css/positioned-overflow-scroll.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcPrefWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcPrefWidths):

2009-07-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Need a DOM_STORAGE guard in DerivedSroucesAllInOne.cpp
        https://bugs.webkit.org/show_bug.cgi?id=27375

        In https://bugs.webkit.org/show_bug.cgi?id=27360 I added Storage.cpp
        and StorageEvent.cpp.  Unfortunately, until later this afternoon,
        DOM_STORAGE is not turned on by default in Chromium, and so these two
        files are never generated.  This breaks the compile.

        There are no other instances of guards in the file, which puzzles me...
        but I think adding guards is the right way to go about this.

        * bindings/v8/DerivedSourcesAllInOne.cpp:  Added the guard.

2009-07-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

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

        Let WebCore always enforce the connection-per-host limit itself.

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):

2009-07-17  Chris Marrin  <cmarrin@apple.com>

        Reviewed by David Hyatt.

        Some transitions don't work correctly on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=27356

        We only have code to do component animation using valueFunction.
        So on Leopard we always need to do matrix animation in hardware.
        This fix ensures that. 

        This is currently not testable because it appears only in the
        hardware animation and we can't yet do pixel tests while 
        hardware animating.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::animateTransform):

2009-07-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Gustavo Noronha.

        [GTK+] Crash in screenAvailable due a null Widget*

        JSDOMWindow::open called screenAvailableRect(0). The other
        Screen methods can be called with a null widget as well, fix the
        crashing test by checking for null.

        In screenRect and screenAvailableRect it is not tried to use
        a default screen as the existing implementation didn't try either
        in case of not having a toplevel widget.

        LayoutTests/fast/frames/crash-removed-iframe.html caused a crash.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual): New method to get a visual or return zero.
        (WebCore::screenDepth): Use getVisual.
        (WebCore::screenDepthPerComponent): Use getVisual.
        (WebCore::screenIsMonochrome): Use screenDepth which will do the null checking
        (WebCore::screenRect): Check for !widget.
        (WebCore::screenAvailableRect): Check for !widget.

2009-07-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix the include path for the Symbian port
        https://bugs.webkit.org/show_bug.cgi?id=27358

        * WebCore.pro:

2009-07-17  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Make it possible to set the plugin directories from the DRT.
        Part of https://bugs.webkit.org/show_bug.cgi?id=27215

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::installedPlugins): Now optionally takes
        a populate argument, so we can avoid loading system plugins from the
        DRT and thus avoid their strerr errors that can make tests fail.
        (WebCore::PluginDatabase::clear): Make it possible to clear the
        database. Called from setPluginDirectories.
        * plugins/PluginDatabase.h:
        (WebCore::PluginDatabase::setPluginDirectories): Make public

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        PluginViewMac: Stop the plugin when loading fails

        Also, prevent event propagation when in the stopped state

        * plugins/mac/PluginViewMac.cpp:

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        PluginViewMac: Allow query and set of drawing and event models

        We now support querying and setting of the drawing and event model,
        but we still only support the CoreGraphics drawing model, and the
        Carbon event model.

        If unsupported drawing or event models are detected we show the
        missing-plugin icon.

        * plugins/PluginView.cpp:
        * plugins/PluginView.h:
        * plugins/mac/PluginViewMac.cpp:

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Initialize two PluginView members using memset

        m_npWindow is used on all platforms, not just for XP_UNIX,
        so always initialize it. m_npCgContext on the other hand
        is only used for XP_MACOSX.

        * plugins/PluginView.cpp:

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Add more debug logging in PluginView

        * plugins/PluginView.cpp: Add debug for setValue
        * plugins/gtk/PluginViewGtk.cpp: Add debug for getValue
        * plugins/mac/PluginViewMac.cpp: Add debug for getValue and more
        * plugins/qt/PluginViewQt.cpp: Add debug for getValue
        * plugins/win/PluginViewWin.cpp: Add debug for getValue

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Holger Freyther.

        Use same license in PluginDebug.cpp as in the original PluginDebug.h

        * plugins/PluginDebug.cpp: Use license from PluginDebug.h

2009-07-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Add more debugging functionality for the WebCore NPAPI layer

        * GNUmakefile.am: Add PluginDebug.cpp
        * WebCore.gypi: Add PluginDebug.cpp
        * WebCore.pro: Add PluginDebug.cpp
        * WebCore.vcproj/WebCore.vcproj: Add PluginDebug.cpp
        * WebCoreSources.bkl: Add PluginDebug.cpp
        * plugins/PluginDebug.h: Move errorStrings to PluginDebug.cpp
        * plugins/PluginDebug.cpp: New file

2009-07-17  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by David Levin.

        Fix Chromium build with DOM_STORAGE enabled.
        https://bugs.webkit.org/show_bug.cgi?id=27360

        2 minor changes as noted below:

        * bindings/v8/DerivedSourcesAllInOne.cpp: Add the generated .cpp files.
        * storage/StorageAreaImpl.cpp:  #include "DOMWindow.h"

2009-07-16  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Add --web-sockets flag and ENABLE_WEB_SOCKETS define.
        https://bugs.webkit.org/show_bug.cgi?id=27206
        
        Add ENABLE_WEB_SOCKETS

        * Configurations/FeatureDefines.xcconfig: add ENABLE_WEB_SOCKETS
        * GNUmakefile.am: add ENABLE_WEB_SOCKETS
        * WebCore.vcproj/WebCoreCommon.vsprops: add ENABLE_WEB_SOCKETS
        * WebCore.vcproj/build-generated-files.sh: add ENABLE_WEB_SOCKETS

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        Added a third bunch of Haiku-specific files for WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=26952

        Adding five files, EventLoopHaiku.cpp, FileChooserHaiku.cpp,
        FileSystemHaiku.cpp, KeyboardCodes.h and MIMETypeRegistryHaiku.cpp

        * platform/haiku/EventLoopHaiku.cpp: Added.
        (WebCore::EventLoop::cycle):
        * platform/haiku/FileChooserHaiku.cpp: Added.
        (WebCore::FileChooser::FileChooser):
        (WebCore::FileChooser::basenameForWidth):
        * platform/haiku/FileSystemHaiku.cpp: Added.
        (WebCore::fileSystemRepresentation):
        (WebCore::homeDirectoryPath):
        (WebCore::openTemporaryFile):
        (WebCore::closeFile):
        (WebCore::writeToFile):
        (WebCore::unloadModule):
        (WebCore::listDirectory):
        * platform/haiku/KeyboardCodes.h: Added.
        * platform/haiku/MIMETypeRegistryHaiku.cpp: Added.
        (WebCore::):
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        Added a second bunch of Haiku-specific files for WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=26952

        Adding four files, ContextMenuHaiku.cpp, ContextMenuItemHaiku.cpp,
        DragDataHaiku.cpp and DragImageHaiku.cpp

        * platform/haiku/ContextMenuHaiku.cpp: Added.
        (WebCore::ContextMenuReceiver::ContextMenuReceiver):
        (WebCore::ContextMenuReceiver::HandleMessage):
        (WebCore::ContextMenuReceiver::Result):
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::itemCount):
        (WebCore::ContextMenu::insertItem):
        (WebCore::ContextMenu::platformDescription):
        (WebCore::ContextMenu::setPlatformDescription):
        * platform/haiku/ContextMenuItemHaiku.cpp: Added.
        (ContextMenuItem::ContextMenuItem):
        (ContextMenuItem::~ContextMenuItem):
        (ContextMenuItem::releasePlatformDescription):
        (ContextMenuItem::type):
        (ContextMenuItem::setType):
        (ContextMenuItem::action):
        (ContextMenuItem::setAction):
        (ContextMenuItem::title):
        (ContextMenuItem::setTitle):
        (ContextMenuItem::platformSubMenu):
        (ContextMenuItem::setSubMenu):
        (ContextMenuItem::setChecked):
        (ContextMenuItem::setEnabled):
        (ContextMenuItem::enabled):
        * platform/haiku/DragDataHaiku.cpp: Added.
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::containsColor):
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::asColor):
        (WebCore::DragData::createClipboard):
        (WebCore::DragData::containsCompatibleContent):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::asFragment):
        * platform/haiku/DragImageHaiku.cpp: Added.
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):

2009-07-16  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Fisher and Brett Wilson.

        Refactor Skia implementation of gradients and patterns.

        http://bugs.webkit.org/show_bug.cgi?id=26618

        The following layout tests were breaking on Chromium/Linux:

        LayoutTests/svg/custom/js-late-gradient-creation.svg (bad baseline PNG)
        LayoutTests/svg/custom/js-late-gradient-and-object.creation.svg
        LayoutTests/svg/custom/js-late-pattern-creation.svg (bad baseline PNG)
        LayoutTests/svg/custom/js-late-pattern-and-object-creation.svg

        I could've fixed these the easy way, by copying the same 5
        lines of code we use everywhere we need patterns or gradients, but
        I decided to fix it the hard way:  by refactoring the code so that
        PlatformContextSkia::setupPaintForFilling() and
        PlatformContextSkia::setupPaintForStroking() do the right thing,
        and also handle gradients and patterns.
        
        This required pushing the gradients and patterns set in 
        (generic) GraphicsContext::setFillPattern() and friends down into
        PlatformContextSkia.  For this, I followed the setPlatformXXX()
        pattern used elsewhere in GraphicsContext, and stubbed them out on
        the other platforms with #if !PLATFORM(SKIA).  This also required
        pushing changes to the gradientSpaceTransform from the Gradient into 
        GradientSkia.

        Since it's a Skia context, I decided to cache the values as
        SkShaders.  There were existing m_pattern and m_gradient SkShaders,
        but they were unused, and whose use was ambiguous, so I
        replaced them with one SkShader each for filling and stroking.

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::setGradientSpaceTransform):
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        (WebCore::GraphicsContext::setPlatformFillGradient):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokeGradient):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformFillGradient):
        (WebCore::GraphicsContext::setPlatformFillPattern):
        (WebCore::GraphicsContext::setPlatformStrokeGradient):
        (WebCore::GraphicsContext::setPlatformStrokePattern):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::State::State):
        (PlatformContextSkia::State::~State):
        (PlatformContextSkia::drawRect):
        (PlatformContextSkia::setupPaintCommon):
        (PlatformContextSkia::setupPaintForFilling):
        (PlatformContextSkia::setupPaintForStroking):
        (PlatformContextSkia::setFillColor):
        (PlatformContextSkia::setStrokeColor):
        (PlatformContextSkia::setStrokeShader):
        (PlatformContextSkia::setFillShader):
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::skiaDrawText):
        (WebCore::paintSkiaText):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::SVGPaintServer::teardown):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Oliver Hunt.

        Added Haiku-specific files for WebCore/platform/image-decoders/.
        https://bugs.webkit.org/show_bug.cgi?id=26949

        Adding a new file, ImageDecoderHaiku.cpp.

        * platform/image-decoders/haiku/ImageDecoderHaiku.cpp: Added.
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::hasAlpha):
        (WebCore::RGBA32Buffer::setHasAlpha):
        (WebCore::RGBA32Buffer::setStatus):
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::width):
        (WebCore::RGBA32Buffer::height):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added Haiku-specific files for WebCore/page/.
        https://bugs.webkit.org/show_bug.cgi?id=26949

        Adding three new files, DragControllerHaiku.cpp, EventHandlerHaiku.cpp
        and FrameHaiku.cpp

        * page/haiku/DragControllerHaiku.cpp: Added.
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::maxDragImageSize):
        (WebCore::DragController::cleanupAfterSystemDrag):
        * page/haiku/EventHandlerHaiku.cpp: Added.
        (WebCore::isKeyboardOptionTab):
        (WebCore::EventHandler::invertSenseOfTabsToLinks):
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::focusDocumentView):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::eventActivatedView):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::createDraggingClipboard):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::accessKeyModifiers):
        * page/haiku/FrameHaiku.cpp: Added.
        (WebCore::Frame::dragImageForSelection):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added Haiku-specific files for WebCore/editing/.
        https://bugs.webkit.org/show_bug.cgi?id=26949

        Adding one new file, EditorHaiku.cpp

        * editing/haiku/EditorHaiku.cpp: Added.
        (WebCore::Editor::newGeneralClipboard):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added Haiku-specific files for WebCore/bindings/js/.
        https://bugs.webkit.org/show_bug.cgi?id=26949

        Adding a new file, ScriptControllerHaiku.cpp

        * bindings/js/ScriptControllerHaiku.cpp: Added.
        (WebCore::ScriptController::createScriptInstanceForWidget):

2009-07-16  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        Added Haiku-specific files for WebCore/platform/text/.
        https://bugs.webkit.org/show_bug.cgi?id=26949

        Adding two new files, StringHaiku.cpp
        and TextBreakIteratorInternalICUHaiku.cpp

        * platform/text/haiku/StringHaiku.cpp: Added.
        (WebCore::String::String):
        (WebCore::String::operator BString):
        * platform/text/haiku/TextBreakIteratorInternalICUHaiku.cpp: Added.
        (WebCore::currentTextBreakLocaleID):

2009-07-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Sends the basename of a selected file for non-multipart form submission.
        <https://bugs.webkit.org/show_bug.cgi?id=26505>

        Test: fast/forms/get-file-upload.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):

2009-07-16  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        [V8] Centralize hidden property names
        https://bugs.webkit.org/show_bug.cgi?id=27359

        No behavior change.  Just moving these names to a central location.
        I'll move the rest of our hidden property names as I sweep though the
        bindings.

        * WebCore.gypi:
        * bindings/v8/V8HiddenPropertyName.cpp: Added.
        (WebCore::V8HiddenPropertyName::objectPrototype):
        (WebCore::V8HiddenPropertyName::isolatedWorld):
        * bindings/v8/V8HiddenPropertyName.h: Added.
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        (WebCore::V8IsolatedWorld::getEntered):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::getHiddenObjectPrototype):
        (WebCore::V8Proxy::installHiddenObjectPrototype):

2009-07-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r41238) Repainted portion of a scaled image does not line up with full image
        https://bugs.webkit.org/show_bug.cgi?id=26747
        rdar://problem/7009243

        Test: fast/repaint/background-misaligned.html

        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled): Moved a variable definition closer to where
        it is used.
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::BitmapImage::draw): In the subimage code path, compute a
        pixel-aligned source rect, because the subiamge is always pixel-aligned
        in source space, and adjust the destination rect to preserve the
        source -> destination mapping. Clip to the (original) destination rect
        to prevent bleeding out.

2009-07-16  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        Add a sessionStorageEnabled setting to the settings class.
        https://bugs.webkit.org/show_bug.cgi?id=27318

        Allow LocalStorage to be enabled without enabling SessionStorage at
        runtime.  There is a settings class setting for localStorage, but not
        for sessionStorage.  We want to be able to test one of these features
        without necessarily enabling the other.

        SessionStorage defaults to true so as to not change behavior and
        because there really aren't any security concerns around SessionStorage
        (unlike LocalsStorage).  The flag is needed in Chromium only because
        we want to enable the compile time flag in the default build, but don't
        want it on by default until it's been thoroughly tested.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::sessionStorage):  Check the new flag
        (WebCore::DOMWindow::localStorage):  A bit of cleanup
        * page/Settings.cpp:
        (WebCore::Settings::Settings):  Default the flag to true
        (WebCore::Settings::setSessionStorageEnabled):  Add the new flag
        * page/Settings.h:
        (WebCore::Settings::sessionStorageEnabled):  Get the new flag

2009-07-16  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Revert 45987.  Tests did not pass on Windows.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):

2009-07-16  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Added SHARED_WORKER flag to Windows build files, as well as associated .ccp/.h files.
        Added missing V8 bindings to the AllInOne file

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

        * WebCore.vcproj/WebCore.vcproj:
        Added missing files to build.
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        Added missing V8 bindings (V8AbstractWorker.cpp and V8SharedWorker.cpp)
        * DerivedSources.cpp
        Added missing JS bindings (JSAbstractWorker.cpp and JSSharedWorker.cpp)

2009-07-16  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by David Levin.

        Add a getter in MessagePortChannel for the PlatformMessagePortChannel.

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

        * dom/MessagePortChannel.h:
        (WebCore::MessagePortChannel::channel):

2009-07-16  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Darin Adler.

        Fix tooltip does not get its directionality from its element's directionality.
        https://bugs.webkit.org/show_bug.cgi?id=24187

        Per mitz's suggestion in comment #6, while getting the plain-text 
        title, we also get the directionality of the title. How to handle 
        the directionality is up to clients. Clients could ignore it, 
        or use attribute or unicode control characters to display the title
        as what they want.

        WARNING: NO TEST CASES ADDED OR CHANGED

        * WebCore.base.exp: Replace 2 names due to signature change.
        * loader/EmptyClients.h: 
        (WebCore::EmptyChromeClient::setToolTip): Add direction as 2nd parameter.
        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip): Calculate tooltip direction as well and pass it to client to take care when display tooltip.
        * page/ChromeClient.h: Add direction as 2nd parameter to pure virtual function setToolTip().
        * page/chromium/ChromeClientChromium.h:
        (WebCore::ChromeClientChromium::setToolTip): Add setToolTip() 
        temprarily to make chromium compile after pick up this webkit patch.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip): Besides getting the 
        spelling tooltip, get its directionality as well.
        (WebCore::HitTestResult::title): Besides getting the title, 
        get its directionality as well.
        * rendering/HitTestResult.h: Add 2 more methods.

2009-07-16  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Oliver Hunt.

        [CAIRO] pattern of a canvas-element changes after modifications on canvas-element
        https://bugs.webkit.org/show_bug.cgi?id=20578

        Copy pixel image in ImageBuffer::image() just like CG and Skia glue.

        Test: fast/canvas/canvas-pattern-modify.html

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (copySurface):
        (WebCore::ImageBuffer::image):

2009-07-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=27353
        Images mispositioned because of bug in percentage-based relative positioning.

        Added fast/css/nested-floating-relative-position-percentages.html

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

2009-07-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Sends the basename of a selected file for non-multipart form submission.
        <https://bugs.webkit.org/show_bug.cgi?id=26505>

        Test: fast/forms/get-file-upload.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):

2009-07-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Video size sometimes jumps just after the video starts loading
        https://bugs.webkit.org/show_bug.cgi?id=27352

        Ensure that the media player is at or after the 'HaveMetadata' state so that
        the instrinsic size is known before we create the layer for video. This avoids
        a flash caused by computing the video rect using the default intrinsic size, and then
        re-computing it when that size changes.
        
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::isReadyForRendering):
        (WebCore::MediaPlayerPrivate::updateStates):
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering):

2009-07-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Antti Koivisto.
        Patch by Brady Eidson and Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=26496
        <rdar://problem/7065391> Microsoft Outlook Web Access fails because XHR stream connection blocks script loading/revalidation

        After refreshing a page and when all CachedResources on that page are in validation mode, they got an exemption
        from the connection-per-host limit.  Removing that exemption makes the test case load smoothly after reloads.

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests): Remove the resourceIsCacheValidator exemption to the connection-per-host limit.

2009-07-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] V8IsolatedWorld::evaluate needs to call didCreateIsolatedScriptContext
        https://bugs.webkit.org/show_bug.cgi?id=27335

        evaluateInNewContext makes this delegate call.  evaluateInNewWorld
        needs to make the same call.  This does not appear to be testable with
        our current technology.

        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::evaluate):

2009-07-15  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Fix a typo: application/atom=xml -> application/atom+xml.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):

2009-07-16  Dean McNamee  <deanm@chromium.org>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=27292
        Improve handling of <canvas> path operations on an empty path.
        Implement Skia's Path::hasCurrentPoint().

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::lineTo):
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo):
        (WebCore::CanvasRenderingContext2D::bezierCurveTo):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::hasCurrentPoint):

2009-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Setting white-space and word-wrap via CSS in textarea doesn't override the wrap attribute
        https://bugs.webkit.org/show_bug.cgi?id=26254

        Make it so that setting white-space and word-wrap via CSS
        overrides the wrap attribute.

        This involves having the shadow div in the textarea inherit
        the CSS from its parent instead of hard-coding it in
        RenderTextControlMultiline.
        
        Committer note: Earlier I reverted this change because I did it incorrectly
        by leaving out css/html.css. In the patch, the filename was the old name
        css/html4.css and that led to my error.

        * css/html.css:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):

2009-07-15  James Hawkins  <jhawkins@google.com>

        Reviewed by Adam Barth.

        [V8] Remove a local variable that is shadowing a function parameter.
        https://bugs.webkit.org/show_bug.cgi?id=27309

        No test required as this modification does not change the current behavior.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):

2009-07-15  Adam Langley  <agl@google.com>

        No review: reverting previous change.

        Revert r45959:

        2009-07-15  Dumitru Daniliuc  <dumi@chromium.org>
        Reviewed by Dimitri Glazkov.

        Adding the Win SQLite VFS implementation for Chromium.

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


        The Chromium side of this patch was landed in 20839, but broke the build. It
        was reverted in r20840. Thus, I'm reverting this side of the patch too.

        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp: Removed.
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp: Removed.

2009-07-15  David Levin  <levin@chromium.org>

        Layout test fix, reverting previous change.

        Reverting r45962 as it caused several layout test failures.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):

2009-06-08  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Setting white-space and word-wrap via CSS in textarea doesn't override the wrap attribute
        https://bugs.webkit.org/show_bug.cgi?id=26254

        Make it so that setting white-space and word-wrap via CSS
        overrides the wrap attribute.

        This involves having the shadow div in the textarea inherit
        the CSS from its parent instead of hard-coding it in
        RenderTextControlMultiline.

        * css/html4.css:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::parseMappedAttribute):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):

2009-07-15  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adding the Win SQLite VFS implementation for Chromium.

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

        * platform/chromium/ChromiumBridge.h:
        * platform/sql/chromium: Added.
        * platform/sql/chromium/SQLiteFileSystemChromium.cpp: Added.
        * platform/sql/chromium/SQLiteFileSystemChromiumWin.cpp: Added.

2009-07-15  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Bug 25151 - workers that fail to load scripts not firing error event.
        https://bugs.webkit.org/show_bug.cgi?id=25151

        This fixes the problem that an error event is not fired when the worker
        script fails to load. Some reasons this may occur are an invalid URL for
        the worker script or a cross-origin redirect.

        We also moves the code to complete the URL and check its origin from
        Worker constructor to WorkerScriptLoader loading functions in order to
        move the exception throwing logic out of the scope of Worker constructor.
        Due to this change, we also remove the output ExceptionCode parameter
        in the worker constructor. Corresponding JS/V8 binding codes have been
        updated to reflect this change.

        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        (WebCore::Worker::create):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::toCrossOriginRedirectPolicy):
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::notifyLoadErrorTask):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        (WebCore::WorkerScriptLoader::didFail):
        (WebCore::WorkerScriptLoader::didFailRedirectCheck):
        (WebCore::WorkerScriptLoader::didReceiveAuthenticationCancellation):
        (WebCore::WorkerScriptLoader::notifyError):
        * workers/WorkerScriptLoader.h:
        (WebCore::):
        (WebCore::WorkerScriptLoader::url):

2009-07-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        text-shadow is not drawn for text with transparent colour
        https://bugs.webkit.org/show_bug.cgi?id=21374

        Test: fast/text/shadow-translucent-fill.html

        * rendering/InlineTextBox.cpp:
        (WebCore::paintTextWithShadows): If the text fill color is not opaque,
        paint all shadows separately from the text, by casting them from
        clipped-out opaque text.

2009-07-15  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build.

        * html/HTMLAreaElement.cpp:

2009-07-15  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Cleanup DOM Storage dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=27180

        DOM Storage had several unnecessary (and probably unintended)
        dependencies.  This patch replaces many includes of header files with
        forward declaration of classes, making some destructors explicit, and
        taking some factories out of the header files.

        This will allow things like StorageAreaSync to take a StorageAreaImpl*
        (as it should) rather than a StorageArea* which previously weren't
        possible because the dependencies were such a tangled mess.

        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::~LocalStorageTask):
        * storage/LocalStorageTask.h:
        * storage/Storage.cpp:
        (WebCore::Storage::~Storage):
        * storage/Storage.h:
        * storage/StorageArea.cpp:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::~StorageAreaSync):
        * storage/StorageAreaSync.h:
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        * storage/StorageEvent.h:
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        * storage/StorageNamespaceImpl.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::~StorageSyncManager):
        * storage/StorageSyncManager.h:

2009-07-15  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Incorrect animation when trying to duplicate effect of transform-origin
        https://bugs.webkit.org/show_bug.cgi?id=27310

        The bug is that matrix animation is being used when animating
        a list of transform functions that match in the from and to states.
        This sometimes works. But because of the way CA does matrix animation
        function lists like the one shown in the testcase animate incorrectly.

        This fixes the bug by always doing component animation
        as long as the function lists match. This allows CA
        to animate the components and then recompose the result
        into the correct matrix.

        Test: animations/transform-origin-vs-functions.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::animateTransform):

2009-07-15  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        Upstream the V8NPObject and NPV8Object build changes for WebCore.gypi.

        Add upstreamed V8 bindings files into WebCore.gypi so they can be seen
        downstream
        https://bugs.webkit.org/show_bug.cgi?id=27274

        Changes the build file for chromium.  Test built the chromium tree
        to verify.

        * WebCore.gypi:

2009-07-15  Mark Rowe  <mrowe@apple.com>

        I like it when the code compiles.

        * WebCore.base.exp:

2009-07-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Renamed parseURL to deprecatedParseURL.

        * bindings/js/JSAttrCustom.cpp:
        (WebCore::JSAttr::setValue): Renamed.
        * bindings/js/JSElementCustom.cpp:
        (WebCore::allowSettingSrcToJavascriptURL): Renamed.
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::allowSettingJavascriptURL): Renamed.
        * bindings/js/JSHTMLIFrameElementCustom.cpp:
        (WebCore::JSHTMLIFrameElement::setSrc): Renamed.
        * bindings/objc/DOM.mm:
        (-[DOMElement _getURLAttribute:]): Renamed.
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:]): Renamed.
        * bindings/v8/custom/V8CustomBinding.cpp:
        (WebCore::allowSettingFrameSrcToJavascriptUrl): Renamed.
        * css/CSSHelper.cpp:
        (WebCore::deprecatedParseURL): Renamed.
        * css/CSSHelper.h: Renamed and updated comment.
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler): Renamed.
        (WebCore::HTMLAnchorElement::parseMappedAttribute): Renamed.
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::parseMappedAttribute): Renamed.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute): Renamed.
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute): Renamed.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::parseMappedAttribute): Renamed.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute): Renamed.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute): Renamed.
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::sourceURI): Renamed.
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute): Renamed.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute): Renamed.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute): Renamed.
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::parseMappedAttribute): Renamed.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag): Renamed.
        * html/PreloadScanner.cpp:
        (WebCore::PreloadScanner::processAttribute): Renamed.
        (WebCore::PreloadScanner::emitCSSRule): Renamed.
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::declareAndWriteDragImage): Renamed.
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage): Renamed.
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage): Renamed.
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::declareAndWriteDragImage): Renamed.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL): Renamed.
        (WebCore::HitTestResult::absoluteMediaURL): Renamed.
        (WebCore::HitTestResult::absoluteLinkURL): Renamed.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): Renamed.
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI): Renamed.
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::defaultEventHandler): Renamed.
        * wml/WMLImageLoader.cpp:
        (WebCore::WMLImageLoader::sourceURI): Renamed.

2009-07-15  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        CSSHelper.h's parseURL is a function that no one should ever call
        Part 1: Eliminate callers in the CSS parser.
        https://bugs.webkit.org/show_bug.cgi?id=26599

        Test: fast/css/uri-token-parsing.html

        * css/CSSHelper.h: Added a comment explaining why nobody should ever call this
        function. A FIXME suggests a next step, which would be to rename it deprecatedParseURL.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Removed unneeded call to parseURL;
        CSSParser::text already takes care of parsing the URI token syntax, and the
        parseURL function does no good.
        (WebCore::CSSParser::parseContent): Ditto.
        (WebCore::CSSParser::parseFillImage): Ditto.
        (WebCore::CSSParser::parseFontFaceSrc): Ditto.
        (WebCore::CSSParser::parseBorderImage): Ditto.
        (WebCore::isCSSWhitespace): Added. Helper function that makes the text function
        easier to read.
        (WebCore::CSSParser::text): Tweak logic so that leading and trailing whitespace
        are both trimmed before removing the quote marks. Changed to use the
        isCSSWhitespace, isASCIIHexDigit, and toASCIIHexValue functions for clarity.

        * css/CSSParser.h: Removed stray "public:" in this header.

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::substring): Optimized the case where the substring covers
        the entire string, so we just share the StringImpl instead of making a new one.
        This case came up in earlier versions of the CSS parser changes above.
        (WebCore::StringImpl::substringCopy): Streamlined the logic here and made it
        not call substring any more. Before, this was relying on the substring function
        always making a copy of any non-empty substring.

2009-07-15  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        After double-clicking a word, using Shift-arrow to select behaves unpredictably
        https://bugs.webkit.org/show_bug.cgi?id=27177
        rdar://problem/7034324

        Test: editing/selection/extend-selection-after-double-click.html

        The bug was due to the m_lastChangeWasHorizontalExtension flag, which was not
        being cleared in many cases where it should have been.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection): Set m_lastChangeWasHorizontalExtension
        to false. This catches all sorts of cases that don't flow through the modify function.
        Before, the flag would reflect the last call to the modify function, which was not
        necessarily the last selection change.
        (WebCore::SelectionController::willBeModified): Rearrange function for clarity.
        Remove code that sets m_lastChangeWasHorizontalExtension; that is now handled elsewhere. 
        (WebCore::SelectionController::modify): Call setLastChangeWasHorizontalExtension after
        setSelection when setting up a trial selection controller, since setSelection now
        clears that flag. Also changed both trial selection controller cases to set the flag,
        although it's not strictly necessary in both cases. Added code to set
        m_lastChangeWasHorizontalExtension when extending the selection, which used to be
        handled in willBeModified. Now we need to do it after the selection change.

2009-07-15  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dimitri Glazkov.

        Need to update DOM Storage files in GYPI file.
        https://bugs.webkit.org/show_bug.cgi?id=27317

        Need to update DOM Storage files in the GYPI file.  They're pretty out
        of date and we're on the path towards enabling them for everyone!

        * WebCore.gypi:

2009-07-15  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26794
        Make Yacc-generated parsers to use fastMalloc/fastFree.
        
        Define YYMALLOC and YYFREE to fastMalloc and fastFree
        respectively.

        * css/CSSGrammar.y:
        * xml/XPathGrammar.y:

2009-07-15  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=27193
        Don't run in to anonymous blocks.  No other browsers do this, and our implementation of run-in
        is effectively broken as a result.

        No new tests. Changed fast/runin/001.html and fast/runin/generated.html to match new behavior.

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

2009-07-15  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Test: fast/js/instanceof-operator.html

        Fix for: Bug 25205 -  XMLHttpRequest instance is not an instanceof XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=25205

        In addition to for XMLHttpRequest, this also fixes for:
        - Audio
        - Image
        - MessageChannel
        - Option
        - WebKitCSSMatrix
        - WebKitPoint
        - Worker
        - XSLTProcessor

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSAudioConstructor.h:
        * bindings/js/JSDOMBinding.h:
        (WebCore::DOMConstructorObject::createStructure):
        (WebCore::DOMConstructorObject::DOMConstructorObject):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::JSImageConstructor::JSImageConstructor):
        * bindings/js/JSImageConstructor.h:
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::JSMessageChannelConstructor):
        * bindings/js/JSMessageChannelConstructor.h:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSOptionConstructor.h:
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::JSWebKitCSSMatrixConstructor::JSWebKitCSSMatrixConstructor):
        * bindings/js/JSWebKitCSSMatrixConstructor.h:
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::JSWebKitPointConstructor::JSWebKitPointConstructor):
        * bindings/js/JSWebKitPointConstructor.h:
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::JSWorkerConstructor::JSWorkerConstructor):
        * bindings/js/JSWorkerConstructor.h:
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::JSXMLHttpRequestConstructor::JSXMLHttpRequestConstructor):
        * bindings/js/JSXMLHttpRequestConstructor.h:
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::JSXSLTProcessorConstructor::JSXSLTProcessorConstructor):
        * bindings/js/JSXSLTProcessorConstructor.h:

2009-07-15  Kai Br�ning  <kai@granus.net>

        Reviewed by Dave Hyatt.

        CSS21 attribute selectors not dynamic for xml.
        https://bugs.webkit.org/show_bug.cgi?id=25072

        Moved the relevant test in StyledElement::attributeChanged()
        to a new function Element::recalcStyleIfNeededAfterAttributeChanged()
        so it can be called from both StyledElement::attributeChanged()
        and Element::attributeChanged().
        Refactored Element::attributeChanged() into
        Element::updateAfterAttributeChanged() and
        Element::recalcStyleIfNeededAfterAttributeChanged(), which are called
        separately from StyledElement::attributeChanged().

        Test: fast/css/attribute-selector-dynamic.xml

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::updateAfterAttributeChanged):
        (WebCore::Element::recalcStyleIfNeededAfterAttributeChanged):
        * dom/Element.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged):

2009-07-15  Alpha Lam  <hclam@chromium.org>

        Reviewed by David Levin.

        [V8] Layout test failures for drawImage in Canvas
        https://bugs.webkit.org/show_bug.cgi?id=27311

        Fixing several canvas layout tests failures due to a
        missing return statement in CanvasRenderingContext2DDrawImage() which
        was accidentally removed in r45929.

        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:

2009-07-15  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Eric Seidel.

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

        If the httpMethod() of the request passed to SubresourceLoader::create is not
        supported by the client we must expect to call didFail() while m_loader is still null.

        * loader/DocumentThreadableLoader.cpp:
        (DocumentThreadableLoader::didFail):Changed.

2009-07-15  Mark Rowe  <mrowe@apple.com>

        Fix the Mac build.

        * WebCore.base.exp:
        * css/MediaQueryEvaluator.cpp:
        * rendering/SVGRenderTreeAsText.cpp:
        * rendering/style/SVGRenderStyle.cpp:
        * svg/graphics/SVGPaintServer.cpp:

2009-07-07  Alpha Lam  <hclam@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] drawImage method of HTMLCanvasElement to accept HTMLVideoElement as argument
        https://bugs.webkit.org/show_bug.cgi?id=27170

        Changed CanvasRenderingContext2DDrawImage() to accept HTMLVideoElement
        as a parameter of drawImage() for HTMLCanvasElement.

        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:

2009-07-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix isolated world constructors
        https://bugs.webkit.org/show_bug.cgi?id=27287

        Don't enter V8Proxy::m_context before creating DOM constructors.
        Instead, use getWrapperContext to get the right context.

        After this patch, all my tests pass.  I'll enable the feature
        downstream and land the tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getConstructor):
        (WebCore::V8DOMWrapper::lookupDOMWrapper):
        * bindings/v8/V8DOMWrapper.h:
        * bindings/v8/V8IsolatedWorld.cpp:
        (WebCore::V8IsolatedWorld::evaluate):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::createWrapperFromCache):
        (WebCore::V8Proxy::isContextInitialized):
        (WebCore::V8Proxy::disposeContextHandles):
        (WebCore::V8Proxy::installDOMWindow):
        (WebCore::V8Proxy::initContextIfNeeded):
        (WebCore::V8Proxy::getHiddenObjectPrototype):
        (WebCore::V8Proxy::installHiddenObjectPrototype):
        * bindings/v8/V8Proxy.h:

2009-07-15  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Darin Adler.

        useless null-check statement in visible_units.cpp@logicalStartOfLine
        https://bugs.webkit.org/show_bug.cgi?id=27154

        Simple fix.

        * editing/visible_units.cpp:
        (WebCore::logicalStartOfLine): Doubled honorEditableBoundaryAtOrAfter() call removed.

2009-07-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27304
        WebKit should provide usage and eligibility information about the page cache.

        * WebCore.base.exp:

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::childFrameCount):
        * history/CachedFrame.h:

        * history/PageCache.cpp:
        (WebCore::PageCache::frameCount):
        (WebCore::PageCache::autoreleasedPageCount):
        * history/PageCache.h:
        (WebCore::PageCache::pageCount):

2009-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Levin.

        Chromium's canvas forgets its context after fillText again
        https://bugs.webkit.org/show_bug.cgi?id=27293

        No new tests because the test for this was already added in
        https://bugs.webkit.org/show_bug.cgi?id=26436

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeTextComposite):

2009-07-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

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

        Implement the new 'rem' unit from CSS3.

        Added some rem-* tests in fast/css.

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):
        (WebCore::unitFromString):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::lex):
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthInt):
        (WebCore::CSSPrimitiveValue::computeLengthIntForLength):
        (WebCore::CSSPrimitiveValue::computeLengthShort):
        (WebCore::CSSPrimitiveValue::computeLengthFloat):
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        (WebCore::CSSPrimitiveValue::cssText):
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::):
        (WebCore::CSSPrimitiveValue::isUnitTypeLength):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve):
        (WebCore::convertToLength):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapFillSize):
        (WebCore::CSSStyleSelector::mapFillXPosition):
        (WebCore::CSSStyleSelector::mapFillYPosition):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * css/CSSStyleSelector.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::device_heightMediaFeatureEval):
        (WebCore::device_widthMediaFeatureEval):
        (WebCore::heightMediaFeatureEval):
        (WebCore::widthMediaFeatureEval):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::setMatrixValue):
        * css/tokenizer.flex:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::usesRemUnits):
        (WebCore::Document::setUsesRemUnits):
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::cssPrimitiveToLength):
        * svg/graphics/SVGPaintServer.cpp:
        (WebCore::applyStrokeStyleToContext):
        (WebCore::dashArrayFromRenderingStyle):
        * svg/graphics/SVGPaintServer.h:

2009-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Remove extraneous qualifier, accidentally added in http://trac.webkit.org/changeset/45884.

        * bindings/v8/V8DOMWrapper.h: Removed extraneous qualifier.

2009-07-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Update bindings for ValiditeState patch.
        https://bugs.webkit.org/show_bug.cgi?id=19562

        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:

2009-07-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Cleanup - Remove obsolete code from the make system
        https://bugs.webkit.org/show_bug.cgi?id=27299

        * WebCore.pro:

2009-07-15  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Fix the build without media elements.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteMediaURL): Add #if ENABLE(VIDEO)
        markers around the body of the method.

2009-07-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Move storeLastActivePanel out of the
        ifdef ENABLE_JAVASCRIPT_DEBUGGER section in IDL;
        Add default panel for the first opening of the
        WebInspector.

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

        * inspector/InspectorController.cpp:
        (InspectorController::setWindowVisible):
        * inspector/InspectorController.idl:

2009-07-14  Darin Adler  <darin@apple.com>

        Try to fix Windows build.

        * bindings/scripts/CodeGeneratorCOM.pm: Add Reflect and ReflectURL support.

2009-07-14  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Oliver Hunt.

        HTMLMediaElement::supportsFullscreen() should return false
        https://bugs.webkit.org/show_bug.cgi?id=27284

        (Reverting a part of 45875)

        HTMLVideoElement::supportsFullscreen() will properly do the
        job, and check if the backend supports fullscreen.

        HTMLVideoElement is the only subclass to support fullscreen
        (conditionnaly). HTMLAudioElement fullscreen is not supported
        and is a different kind of fullscreen, if it comes to be wanted.

        No test can be done currently given that none of the media
        backends support fullscreen.

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::supportsFullscreen):

2009-07-14  Darin Adler  <darin@apple.com>

        Reviewed by Dimitri Glazkov.

        Next step in making DOM attribute getter/setters consistently use AtomicString
        https://bugs.webkit.org/show_bug.cgi?id=25425

        This covers eight DOM classes, and for each one of the classes:

        - Changes the IDL to use the Reflect syntax for all simple cases.
        - Removes unused functions in the classes, mainly newly unused ones that were
          used for reflection before.
        - Removes unneeded explicitly defined destructors.
        - Explicitly declares destructors as virtual.
        - Removes unneeded includes.
        - Makes members protected or private rather than public where possible.
        - Renames "doc" to "document".
        - Tweaks formatting to match our latest style in a few places.
        - Improves some FIXME comments.

        Over time we'll want to do this for all HTML DOM classes.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        * html/HTMLAnchorElement.h:
        (WebCore::HTMLAnchorElement::endTagRequirement):
        (WebCore::HTMLAnchorElement::tagPriority):
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::parseMappedAttribute):
        * html/HTMLAreaElement.h:
        (WebCore::HTMLAreaElement::endTagRequirement):
        (WebCore::HTMLAreaElement::tagPriority):
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::parseMappedAttribute):
        * html/HTMLBRElement.h:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::HTMLBaseElement):
        (WebCore::HTMLBaseElement::removedFromDocument):
        (WebCore::HTMLBaseElement::process):
        * html/HTMLBaseElement.h:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.cpp:
        (WebCore::HTMLBaseFontElement::HTMLBaseFontElement):
        * html/HTMLBaseFontElement.h:
        (WebCore::HTMLBaseFontElement::endTagRequirement):
        (WebCore::HTMLBaseFontElement::tagPriority):
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.cpp:
        (WebCore::HTMLBlockquoteElement::HTMLBlockquoteElement):
        * html/HTMLBlockquoteElement.h:
        (WebCore::HTMLBlockquoteElement::tagPriority):
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::HTMLBodyElement):
        (WebCore::HTMLBodyElement::addSubresourceAttributeURLs):
        * html/HTMLBodyElement.h:
        (WebCore::HTMLBodyElement::endTagRequirement):
        (WebCore::HTMLBodyElement::tagPriority):
        * html/HTMLBodyElement.idl:
        Made changes as described above.

        * loader/FrameLoader.cpp: Removed unneeded include of HTMLAnchorElement.h.

2009-07-14  Steve Falkenburg  <sfalken@apple.com>

        Reorganize JavaScriptCore headers into:
        API: include/JavaScriptCore/
        Private: include/private/JavaScriptCore/

        Reviewed by Darin Adler.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Change all Noncopyable inheriting visibility to public.
        https://bugs.webkit.org/show_bug.cgi?id=27225

        Change all Noncopyable inheriting visibility to public because
        it is needed to the custom allocation framework (bug #20422).

        * bindings/js/GCController.h:
        * bindings/js/WorkerScriptController.h:
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::):
        * bridge/runtime.h:
        * css/CSSSelector.h:
        * css/CSSSelectorList.h:
        * css/CSSStyleSelector.h:
        * dom/ClassNames.h:
        * dom/MessagePortChannel.h:
        * dom/XMLTokenizerLibxml2.cpp:
        * dom/XMLTokenizerScope.h:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SelectionController.h:
        * editing/TextIterator.cpp:
        * history/PageCache.h:
        * html/CanvasRenderingContext2D.h:
        * html/HTMLParser.h:
        * html/HTMLParserQuirks.h:
        * html/PreloadScanner.h:
        * loader/Cache.h:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/FrameLoader.h:
        * loader/ProgressTracker.h:
        * loader/ThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/archive/ArchiveResourceCollection.h:
        * loader/icon/IconDatabase.h:
        * loader/icon/IconLoader.h:
        * loader/icon/PageURLRecord.h:
        * loader/loader.h:
        * page/ContextMenuController.h:
        * page/EventHandler.h:
        * page/FrameTree.h:
        * page/Page.h:
        * page/PageGroup.h:
        * page/PageGroupLoadDeferrer.h:
        * page/mac/EventHandlerMac.mm:
        * platform/AutodrainedPool.h:
        * platform/ContextMenu.h:
        * platform/EventLoop.h:
        * platform/HostWindow.h:
        * platform/Pasteboard.h:
        * platform/PurgeableBuffer.h:
        * platform/RunLoopTimer.h:
        * platform/ThreadGlobalData.h:
        * platform/ThreadTimers.h:
        * platform/Timer.h:
        * platform/TreeShared.h:
        * platform/graphics/FontData.h:
        * platform/graphics/GlyphWidthMap.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/skia/GraphicsContextPlatformPrivate.h:
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/win/QTMovieWin.cpp:
        * platform/mac/LocalCurrentGraphicsContext.h:
        * platform/network/FormDataBuilder.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/text/StringBuffer.h:
        * platform/text/TextCodec.h:
        * platform/win/WindowMessageBroadcaster.h:
        * rendering/CounterNode.h:
        * rendering/LayoutState.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderView.h:
        * rendering/TransformState.h:
        * svg/SVGAnimatedProperty.h:
        * svg/SynchronizableTypeWrapper.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerRunLoop.cpp:
        * xml/XPathExpressionNode.h:
        * xml/XPathParser.h:
        * xml/XPathPredicate.h:
        * xml/XPathStep.h:

2009-07-14  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        Fails to save document state when navigating away from a page with a
        reference fragment.
        https://bugs.webkit.org/show_bug.cgi?id=27281

        Test: fast/history/saves-state-after-fragment-nav.html

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::isCurrentDocument): Use equalIgnoringRef
        to compare URLs.

2009-07-14  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Sam Weinig.

        Inspector: Remove Unintended Global Variables
        https://bugs.webkit.org/show_bug.cgi?id=27203

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype._ensureCommandLineAPIInstalled):
        * inspector/front-end/DatabasesPanel.js:
        (WebInspector.DatabasesPanel.prototype.dataGridForDOMStorage):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        * inspector/front-end/inspector.js:
        (WebInspector.animateStyle):

2009-07-14  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=19562
        Added build stuff and stub for the ValidityState class, part of HTML5
        section Forms:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#validitystate

        Test: fast/forms/ValidityState-001.html

        * DerivedSources.cpp: Inclusion of ValidityState files
        * DerivedSources.make: ditto
        * GNUmakefile.am: ditto
        * WebCore.gypi: ditto
        * WebCore.pro: ditto
        * WebCore.vcproj/WebCore.vcproj: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * WebCoreSources.bkl: ditto
        * html/HTMLButtonElement.idl: validity attribute
        * html/HTMLFieldSetElement.idl: ditto
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::validity): ValidityState getter
        * html/HTMLFormControlElement.h: ditto
        * html/HTMLInputElement.idl: validity attribute
        * html/HTMLSelectElement.idl: ditto
        * html/HTMLTextAreaElement.idl: ditto
        * html/ValidityState.cpp: Added.
        (WebCore::ValidityState::ValidityState):
        (WebCore::ValidityState::valid): validation flag
        * html/ValidityState.h: Added.
        (WebCore::ValidityState::create): validation flag
        (WebCore::ValidityState::control): ditto
        (WebCore::ValidityState::valueMissing): ditto
        (WebCore::ValidityState::typeMismatch): ditto
        (WebCore::ValidityState::patternMismatch): ditto
        (WebCore::ValidityState::tooLong): ditto
        (WebCore::ValidityState::rangeUnderflow): ditto
        (WebCore::ValidityState::rangeOverflow): ditto
        (WebCore::ValidityState::stepMismatch): ditto
        (WebCore::ValidityState::customError): ditto
        * html/ValidityState.idl: Added.

2009-07-14  Ryosuke Niwa  <rniwa@google.com>

        Reviewed by Eric Seidel.

        Outdenting a line inside a blockquote tag does nothing
        https://bugs.webkit.org/show_bug.cgi?id=25316

        The bug was caused by the code checking whether the blockquote is created by WebKit or not.
        We simply remove this code to be consistent with Firefox and Internet Explorer.
        Also, enclosingBlockFlow == enclosingNode in outdentParagraph isn't a sufficient condition to insert
        the placeholder before the enclosingNode because there could be contents before the current paragraph.
        Instead, we should split the enclosingNode (which is a blockquote) at the starting position of outdentation.
        It turned out that this solves the bug 25315 also: https://bugs.webkit.org/show_bug.cgi?id=25315

        Test: editing/execCommand/outdent-regular-blockquote.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::isIndentBlockquote): no longer checks whether a blockquote is created by WebKit or not.
        (WebCore::IndentOutdentCommand::outdentParagraph): takes care of the case enclosingBlockFlow == enclosingNode

2009-07-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix isolated world wrappers for Node prototypes
        https://bugs.webkit.org/show_bug.cgi?id=27277

        This change does two things:

        1) We bypass the wrapper cache in the isolated world.  This is because
           the wrapper template cache has prototypes that lead to the main
           world.  We can add a template cache for the isolated world if
           performance warrants.

        2) We introduce a smarter way to grab the wrapper context for a frame
           that is aware that proxy <-> context do not stand in one-to-one
           correspondence.  This generalizes our solution for the node wrapper
           case to prototypes.

        The net result is that Node wrappers get the right prototypes.  As
        before, tests to follow.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        (WebCore::V8DOMWrapper::getWrapperContext):
        * bindings/v8/V8DOMWrapper.h:

2009-07-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix isolated world wrappers for Nodes
        https://bugs.webkit.org/show_bug.cgi?id=27271

        Previously, we keepy a pointer to the DOMMap on V8Proxy, but this
        caused us to miss the branch in V8DOMMap.cpp for isolated worlds.

        I have tests, but I can't land them until I get this feature under
        control.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::V8Proxy):

2009-07-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix isolated world crash on getting window.location
        https://bugs.webkit.org/show_bug.cgi?id=27268

        I have a test for this locally, but it requires a compile-time hack to
        run.  Once I get the feature's stability under control, we can turn the
        feature on and add the tests.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        * bindings/v8/V8IsolatedWorld.h:
        (WebCore::V8IsolatedWorld::context):

2009-07-14  Brent Fulgham  <bfulgham@webkit.org>

        Correct failing tests after r45875.  The original patch did not
        test the m_player member for null, causing crashes.  This will
        happen fairly frequently in real use.  Was this original patch
        ever tested?
        https://bugs.webkit.org/show_bug.cgi?id=27246

        Test via existing media tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::supportsFullscreen): Check for null pointer.
        (WebCore::HTMLMediaElement::supportsSave): Check for null pointer.

2009-07-14  Avi Drissman  <avi@chromium.org>

        Reviewed by Darin Fisher.

        Explicitly mark the HTML generated for the Mac as being UTF-8 encoded.
        The Windows clipboard format is explicitly documented as being UTF-8,
        and all Linux apps assume UTF-8. On the Mac, though, unless otherwise
        indicated, Windows-1252 is assumed, which is wrong.

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

        No new tests.

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::writeRange):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection):

2009-07-14  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Dimitri Glazkov.

        Upstream V8NPObject.h and V8NPObject.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=27103

        This just upstreams the files from the chromium code base. Only
        minor changes to formatting and similar were done, so no testing
        is required because nothing really changed.  Code verified to compile.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::bindToWindowObject):
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/v8/V8NPObject.cpp: Added.
        (npObjectInvokeImpl):
        (npObjectMethodHandler):
        (npObjectInvokeDefaultHandler):
        (weakTemplateCallback):
        (npObjectGetProperty):
        (npObjectNamedPropertyGetter):
        (npObjectIndexedPropertyGetter):
        (npObjectGetNamedProperty):
        (npObjectGetIndexedProperty):
        (npObjectSetProperty):
        (npObjectNamedPropertySetter):
        (npObjectIndexedPropertySetter):
        (npObjectSetNamedProperty):
        (npObjectSetIndexedProperty):
        (weakNPObjectCallback):
        (createV8ObjectForNPObject):
        (forgetV8ObjectForNPObject):
        * bindings/v8/V8NPObject.h: Added.
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):


2009-07-14  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Darin Adler.

        Add HTMLMediaElement::supportSave() and a
        HitTestResult::absoluteMediaURL() functions
        https://bugs.webkit.org/show_bug.cgi?id=27246

        Added an implementation of supportsSave() into HTMLMediaElement
        that delegates to MediaPlayerPrivateImpl so that the media engine
        is able to signal whether or not a media source supports saving.

        Also added a function to HitTestResult that allows for retrieval
        of the currentSrc associated with the "hit" media element. 
        
        These functions are just pipeing with no visible UI change so there
        are no related layout test changes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::supportsFullscreen): 
        (WebCore::HTMLMediaElement::supportsSave):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::supportsSave):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::supportsFullscreen):
        (WebCore::MediaPlayerPrivateInterface::supportsSave):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::altDisplayString):
        (WebCore::HitTestResult::absoluteMediaURL):
        * rendering/HitTestResult.h:

2009-07-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        [V8] Implement Reflect and ReflectURL attribute support.
        https://bugs.webkit.org/show_bug.cgi?id=27273

        * bindings/scripts/CodeGeneratorV8.pm: Added support for Reflect and ReflectURL attributes.

2009-07-14  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27266
        Add hasCurrentPoint() to WebCore::Path.
        This fixes Skia-based Chromium regression caused by the fix for
        https://bugs.webkit.org/show_bug.cgi?id=27187.
        For Skia, the new method always returns 'true', pending actual implementation.
        This means Chromium still will differ from Gecko behavior, but at least its Canvas
        will not be completely broken.

        Existing Canvas Layout Tests should pass in Chromium after this change.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::lineTo): insteand of Path::isEmpty() test for hasCurrentPoint().
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo): ditto.
        (WebCore::CanvasRenderingContext2D::bezierCurveTo): ditto.

        * platform/graphics/Path.h:
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::hasCurrentPoint):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::isEmpty):
        (WebCore::Path::hasCurrentPoint):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::hasCurrentPoint):
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::hasCurrentPoint):
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::hasCurrentPoint):
        All these files add a Path::hasCurrentPoint() for various platforms.

2009-07-14  Nate Chapin  <japhet@chromium.org>

        Reviewed by Sam Weinig.

        Upstream RGBColor from src.chromium.org.

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

        * WebCore.gypi: Add RGBColor
        * css/RGBColor.cpp: Added.
        (WebCore::RGBColor::create):
        (WebCore::RGBColor::red):
        (WebCore::RGBColor::green):
        (WebCore::RGBColor::blue):
        * css/RGBColor.h: Added.
        (WebCore::RGBColor::RGBColor):

2009-07-10  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Rename the didCreate/DestroyScriptContext calls to make it
        clear that that those refer to the frame's contxt.  Add another
        similar call for when creating contexts via evaluateInNewContext.
        https://bugs.webkit.org/show_bug.cgi?id=27104

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::disposeContextHandles):
        (WebCore::V8Proxy::initContextIfNeeded):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didCreateScriptContextForFrame):
        (WebCore::EmptyFrameLoaderClient::didDestroyScriptContextForFrame):
        (WebCore::EmptyFrameLoaderClient::didCreateIsolatedScriptContext):
        * loader/FrameLoaderClient.h:

2009-07-14  Brent Fulgham  <bfulgham@webkit.org>

        Revert http://trac.webkit.org/changeset/45864 after
        breaking of Windows build.

        * storage/LocalStorageTask.cpp:
        * storage/LocalStorageTask.h:
        * storage/Storage.cpp:
        * storage/Storage.h:
        * storage/StorageArea.cpp:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        * storage/StorageAreaSync.h:
        * storage/StorageEvent.cpp:
        * storage/StorageEvent.h:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        * storage/StorageNamespaceImpl.h:
        * storage/StorageSyncManager.cpp:
        * storage/StorageSyncManager.h:

2009-07-11  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        Cleanup DOM Storage dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=27180

        DOM Storage had several unnecessary (and probably unintended)
        dependencies.  This patch replaces many includes of header files with
        forward declaration of classes, making some destructors explicit, and
        taking some factories out of the header files.

        This will allow things like StorageAreaSync to take a StorageAreaImpl*
        (as it should) rather than a StorageArea* which previously weren't
        possible because the dependencies were such a tangled mess.

        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::~LocalStorageTask):
        * storage/LocalStorageTask.h:
        * storage/Storage.cpp:
        (WebCore::Storage::~Storage):
        * storage/Storage.h:
        * storage/StorageArea.cpp:
        * storage/StorageArea.h:
        * storage/StorageAreaImpl.cpp:
        * storage/StorageAreaImpl.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::~StorageAreaSync):
        * storage/StorageAreaSync.h:
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::create):
        (WebCore::StorageEvent::StorageEvent):
        * storage/StorageEvent.h:
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceImpl.cpp:
        * storage/StorageNamespaceImpl.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::~StorageSyncManager):
        * storage/StorageSyncManager.h:


2009-07-14  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by David Hyatt.

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

        Check to make sure the view is attached to a frame() in the visibleContentsResized()
        method as it can be triggered before the view is attached by Frame::createView(...)
        setting various values such as setScrollBarModes(...) for example.  An ASSERT is
        triggered when a view is layout before being attached to a frame().

        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentsResized):
        * page/FrameView.h:

2009-07-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: show last opened panel when invoking inspector.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setWindowVisible):
        (WebCore::InspectorController::storeLastActivePanel):
        (WebCore::InspectorController::specialPanelForJSName):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::Setting::Setting):
        * inspector/InspectorController.idl:
        * inspector/front-end/inspector.js:
        (WebInspector.set currentPanel):
        (WebInspector.loaded):

2009-07-14  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Speed up access to NodeList length.
        https://bugs.webkit.org/show_bug.cgi?id=27264

        That's a minimal alternation of the code.

        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER): 1) use AtomicString for comparison, 2) use
        v8::Integer::New instead of v8::Number::New.

2009-07-14  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dimitri Glazkov.

        Do not do unnecessary conversions from v8::Handle<v8::Value> to
        v8::Handle<v8::Object> and accompanying changes.
        https://bugs.webkit.org/show_bug.cgi?id=26953

        Three things:

        1) do not cast from v8::Value to v8::Object if unnecessary---casts are cheap,
        but are not free (they check for emptiness of handle);
        2) inline conversion from wrapper to node;
        3) simplify case to an ASSERT.

        This is just a refactoring, so no new tests are needed.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::convertToSVGPODTypeImpl):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8Proxy::convertDOMWrapperToNative):
        (WebCore::V8Proxy::convertToNativeObject):
        (WebCore::V8Proxy::convertToNativeEvent):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toCanvasStyle):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomBinding.cpp:
        (WebCore::V8Custom::GetTargetFrame):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::V8Custom::ClearTimeoutImpl):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::INDEXED_ACCESS_CHECK):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-14  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Straight quotes should match fancy quotes in in-page search
        https://bugs.webkit.org/show_bug.cgi?id=27217

        Tests: fast/text/find-quotes.html

        * editing/TextIterator.cpp:
        (WebCore::foldQuoteMark): Added.
        (WebCore::foldQuoteMarks): Added.
        (WebCore::SearchBuffer::SearchBuffer): Call foldQuoteMarks on the target string.
        (WebCore::SearchBuffer::append): Call foldQuoteMarks on characters as they are
        added to the search buffer.

        * platform/text/CharacterNames.h: Added more quotation mark character names.
        Sorted character names with the sort tool.

2009-07-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: handle debugger shortcuts while on source frame or on
        script file selector.

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

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._loaded):

2009-07-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Use standard HashCountedSet instead of a hand rolled one
        in HTMLDocument.

        * html/HTMLDocument.cpp:
        (WebCore::addItemToMap):
        (WebCore::removeItemFromMap):
        * html/HTMLDocument.h:

2009-07-13  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler and Maciej Stachowiak.

        Implement HTML5 draggable
        https://bugs.webkit.org/show_bug.cgi?id=26262

        This adds support for the HTML5 draggable attribute and its DOM binding. It maps the draggable property
        to the CSS properties -webkit-user-drag and -webkit-user-select respectively.

        Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#the-draggable-attribute

        Test: fast/html/draggable.html

        * css/html.css:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::draggable):
        * html/HTMLAnchorElement.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::draggable):
        (WebCore::HTMLElement::setDraggable):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::draggable):
        * html/HTMLImageElement.h:

2009-07-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Image rendered as layer contents looks different from image rendered via CG.
        <rdar://problem/7048830> 
        
        Fix a visible color profile difference between between images rendered via Core Graphics
        and those rendered via a compositing layer, by assigning the GenericRGB profile to
        untagged images (which come through as having the DeviceRGB profile) when they are set
        as layer contents.

        Test: compositing/color-matching/image-color-matching.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToImage):

2009-07-13  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=27220
        Assertion failure in createSearcher() (usearch_open() status is U_USING_DEFAULT_WARNING)

        * editing/TextIterator.cpp:
        (WebCore::createSearcher): Add U_USING_DEFAULT_WARNING as a possible status code
        in the assertion. Affects only the assertion.

2009-07-13  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26925
        <rdar://problem/7027850> URL Fragment Breaks Application Cache Loads

        Test: http/tests/appcache/main-resource-hash.html

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::resourceForURL):
        (WebCore::ApplicationCache::resourceForRequest):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::cacheForMainRequest):
        (WebCore::ApplicationCacheGroup::fallbackCacheForMainRequest):
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::addEntry):
        Remove URL fragment at appcache code borders.

        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::create):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::findOrCreateCacheGroup):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        Assert that there is no URL fragment in URL at key points in appcache code.

2009-07-13  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=27166
        rdar://problem/7015857
        Find for strings composed entirely of spaces doesn't work

        Test: fast/text/find-spaces.html

        * editing/TextIterator.cpp:
        (WebCore::findPlainText): Removed unneeded special case.
        The empty string case already works correctly.

2009-07-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker.

        Remove NPPVpluginPrivateModeBool, it was removed from the spec.
        
        * bridge/npapi.h:

2009-07-13  Feng Qian  <feng@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27237

        Make V8DOMMap.h compiling with gcc option -Werror=non=virtual-dtor.  

        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::WeakReferenceMap):
        (WebCore::WeakReferenceMap::~WeakReferenceMap):

2009-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        Remove an accidental add of bidi.(cpp|h) to WebCore.gypi.

        * WebCore.gypi: Removed bidi.cpp and bidi.h

2009-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        Update WebCore.gyp in preparation to hooking it up.

        * WebCore.gypi: Added files that were mid-stream while switching over.

2009-07-13  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, another small fix for Chromium build.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):

2009-07-13  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, fix Chromium build bustage.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::JavaScriptConsoleMessage::addToPage):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::handleConsoleMessage):

2009-07-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=27234
        <rdar://problem/7054356>

        Add null page check in HTMLDocument::hasFocus.

        Test: fast/dom/HTMLDocument/hasFocus-frameless-crash.html

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::hasFocus): Add page null check.
        (WebCore::HTMLDocument::createTokenizer): Cleanup page null check.

2009-07-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Disable continuous spell checking in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=27131

        * inspector/front-end/inspector.html: Added spellcheck="false" to the
            main-panels and console-prompt containers.

2009-07-13  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium Linux: fix assertion when rendering google.com.kh

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

        Some shapers (i.e. Khmer) will produce cluster logs which report that
        /no/ code points contributed to certain glyphs. Because of this, we
        take any code point which contributed to the glyph in question, or any
        subsequent glyph.  If we run off the end, then we take the last code
        point.

        Added LayoutTests/fast/text/international/khmar-selection.html

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::offsetForPositionForComplexText):

2009-07-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        spellcheck="false" is ignored
        <rdar://problem/7054177>

        * editing/Editor.cpp:
        (WebCore::markMisspellingsOrBadGrammar): Moved code to check the
            spellcheck attribute from here...
        (WebCore::Editor::spellCheckingEnabledInFocusedNode): ...to here.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Bail out
            if spell chcking is disabled by the spellcheck attribute.
        * editing/Editor.h:

2009-07-13  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Add new configuration flag for redistributable Windows build.
        https://bugs.webkit.org/show_bug.cgi=27087
        
        * WebCore.vcproj/WebCore.vcproj: Add new WinCairo.vsprops to
          Debug_Cairo and Release_Cairo builds.
        * config.h: Check for presence of WIN_CAIRO and select appropriate
          configuration.  Defaults to standard Apple build.

2009-07-13  Peter Kasting  <pkasting@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=19562
        Back out previous patch for this bug (too many problems).

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLButtonElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::form):
        * html/HTMLInputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/ValidityState.cpp: Removed.
        * html/ValidityState.h: Removed.
        * html/ValidityState.idl: Removed.

2009-07-13  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add HTMLAllCollection to WebCore.gypi.

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

        * WebCore.gypi: Add HTMLAllCollection.

2009-07-13  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Add a missing check for constructor call in WebKitCSSMatrixConstructor.
        https://bugs.webkit.org/show_bug.cgi?id=27218

        Test: fast/css/matrix-as-function-crash.html

        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL): Added a check for constructor call.

2009-07-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed make dist build fix.

        * GNUmakefile.am:

2009-07-13  Cédric Luthi  <cedric.luthi@gmail.com>

        Reviewed by Tor Arne Vestbø.

        Fix NPWindow clip rect in PluginViewMac

        The rect should be in window-coordinates. This bug can be observed
        with Flash 10 here: http://www.permadi.com/tutorial/cursorTracker/

        * plugins/mac/PluginViewMac.cpp:

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Fix Qt implementation of WebCore::directoryName to return the absolute
        directory name instead of the base file name.

        * platform/qt/FileSystemQt.cpp:
        (WebCore::directoryName):

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Fix WebCore::Path::isEmpty() for the Qt port to return true
        if there is no element in the path.

        QPainterPath::isEmpty() returns also true if there is one single
        MoveTo element inside, which makes sense but doesn't patch Webcore's
        is-empty definition.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::isEmpty): Use elementCount() == 0.

2009-07-13  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Dimitri Glazkov.

        Upstream fixes to NPV8Object.cpp that make ~30 layout tests pass.
        https://bugs.webkit.org/show_bug.cgi?id=27127

        There were a number of bugs introduced during the last upstreaming
        effort that broke around 30 layout tests.  This fixes those bugs.
        It also has compile fixes to match the recent cutting apart of
        V8Proxy.

        * bindings/v8/NPV8Object.cpp:
        (freeV8NPObject):
        (npCreateV8ScriptObject):
        (NPN_Invoke):
        (NPN_InvokeDefault):
        (NPN_EvaluateHelper):
        (NPN_SetException):
        (NPN_Construct):

2009-07-13  Mads Ager  <ager@chromium.org>

        Reviewed by Adam Barth.

        Fix memory leak in the V8 binding layer. 
        https://bugs.webkit.org/show_bug.cgi?id=27163

        Reinitializing the context is not necessary when clearing the proxy for navigation
        and it will lead us to hold on to an empty context for each frame.

        Test for empty context instead of empty global object handle when
        updating the document for a context.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::clearForNavigation):
        (WebCore::V8Proxy::updateDocument):

2009-07-13  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Correct the logic to determine if a V8 callback returns a value.
        https://bugs.webkit.org/show_bug.cgi?id=27155

        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallback):
        - Don't crash if result.IsEmpty().

2009-07-13  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Add ENABLE(SHARED_WORKERS) flag and define SharedWorker APIs
        https://bugs.webkit.org/show_bug.cgi?id=26932

        Initial IDL definition and bindings for SharedWorkers.

        * Configurations/FeatureDefines.xcconfig:
        Added new files for SharedWorker support.
        * DerivedSources.make:
        Added new files for SharedWorker support.
        * GNUmakefile.am:
        Added new files for SharedWorker support.
        * WebCore.gypi:
        Added new files for SharedWorker support.
        * WebCore.pro:
        Added new files for SharedWorker support.
        * WebCore.xcodeproj/project.pbxproj:
        Added new files for SharedWorker support.
        * bindings/js/JSAbstractWorkerCustom.cpp: Added.
        (WebCore::JSAbstractWorker::mark):
        Custom mark handler that marks the event listeners.
        (WebCore::JSAbstractWorker::addEventListener):
        (WebCore::JSAbstractWorker::removeEventListener):
        (WebCore::JSAbstractWorker::toJS):
        Custom toJS handler which differentiates between various subclasses.
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::sharedWorker):
        SharedWorker constructor (only enabled when SHARED_WORKERS is
        enabled).
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        (WebCore::toEventTarget):
        Added support for converting to/from SharedWorkers.
        * bindings/js/JSSharedWorkerConstructor.cpp: Added.
        (WebCore::JSSharedWorkerConstructor::JSSharedWorkerConstructor):
        (WebCore::constructSharedWorker):
        (WebCore::JSSharedWorkerConstructor::getConstructData):
        * bindings/js/JSSharedWorkerConstructor.h: Added.
        (WebCore::JSSharedWorkerConstructor::classInfo):
        * bindings/js/JSSharedWorkerCustom.cpp: Added.
        (WebCore::JSSharedWorker::mark):
        Custom mark function that marks the internal MessagePort.
        * bindings/v8/DOMObjectsInclude.h:
        Updated to include new header files.
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * bindings/v8/custom/V8AbstractWorkerCustom.cpp: Added.
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        V8 handlers for add/removeEventListener().
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8SharedWorkerCustom.cpp: Added.
        (WebCore::CALLBACK_FUNC_DECL):
        Custom constructor for SharedWorker.
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toSharedWorker):
        * dom/EventTarget.h:
        * page/DOMWindow.idl:
        * workers/AbstractWorker.cpp: Added.
        (WebCore::AbstractWorker::AbstractWorker):
        Common base class for SharedWorker and (soon) Worker. The functions below were copied from Worker.cpp.
        This is the first step in refactoring Worker to derive from AbstractWorker to enable code sharing.
        (WebCore::AbstractWorker::~AbstractWorker):
        (WebCore::AbstractWorker::addEventListener):
        (WebCore::AbstractWorker::removeEventListener):
        (WebCore::AbstractWorker::dispatchEvent):
        (WebCore::AbstractWorker::dispatchLoadErrorEvent):
        (WebCore::AbstractWorker::dispatchScriptErrorEvent):
        * workers/AbstractWorker.h: Added.
        Definitions of functionality shared by Worker.h and SharedWorker.h. In a future patch, Worker will derive from AbstractWorker.
        (WebCore::AbstractWorker::scriptExecutionContext):
        (WebCore::AbstractWorker::setOnerror):
        (WebCore::AbstractWorker::onerror):
        (WebCore::AbstractWorker::eventListeners):
        (WebCore::AbstractWorker::refEventTarget):
        (WebCore::AbstractWorker::derefEventTarget):
        * workers/AbstractWorker.idl: Added.
        * workers/SharedWorker.cpp: Added.
        (WebCore::SharedWorker::SharedWorker):
        (WebCore::SharedWorker::~SharedWorker):
        * workers/SharedWorker.h: Added.
        (WebCore::SharedWorker::create):
        (WebCore::SharedWorker::port):
        (WebCore::SharedWorker::toSharedWorker):
        * workers/SharedWorker.idl: Added.

2009-07-13  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Cleanup - Remove prf install target
        https://bugs.webkit.org/show_bug.cgi?id=27191

        qtwebkit.prf has been removed; this cleans up the related
        install target as well.

        * WebCore.pro: Remove prf install target

2009-07-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Oliver Hunt.

        Facebook Chat is broken due to XSS auditor
        https://bugs.webkit.org/show_bug.cgi?id=27179

        Instead of just using the script's URL as to detect an XSS attack, we
        now use a bit of context before the URL.  In particular, we use the
        bytes from the beginning of the attribute name to the end of the
        attribute value.  In virtually all injection attacks, the attacker
        would need to supply the attribute name as well as the attribute value.
        However, in the Facebook false positive, the attribute name is not
        present in the URL.

        Tests: http/tests/security/xssAuditor/script-tag-src-redirect-safe.html
               http/tests/security/xssAuditor/script-tag-with-source-double-quote.html
               http/tests/security/xssAuditor/script-tag-with-source-no-quote.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        * html/HTMLTokenizer.h:
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        * page/XSSAuditor.h:

2009-07-12  Keishi Hattori  <casey.hattori@gmail.com>

        Reviewed by Timothy Hatcher.

        Refactor ConsoleMessage to add MessageType attribute.
        https://bugs.webkit.org/show_bug.cgi?id=20625

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::printErrorMessage):
        * dom/Document.cpp:
        (WebCore::Document::reportException):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::endGroup):
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        (WebCore::InspectorController::addStartProfilingMessageToConsole):
        (WebCore::InspectorController::count):
        * inspector/InspectorController.h:
        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype.addMessage):
        (WebInspector.ConsoleMessage): Added type property.
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleMessage.prototype.toString):
        (WebInspector.ConsoleMessage.prototype.isEqual):
        (WebInspector.ConsoleCommandResult):
        (WebInspector.ConsoleGroup.prototype.addMessage):
        (WebInspector.ConsoleGroup.prototype._titleClicked):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._addTip):
        (WebInspector.Resource.prototype._checkWarning):
        * inspector/front-end/inspector.css: Changed ".console-group-title-level" to ".console-group-title"
        * inspector/front-end/inspector.js:
        (WebInspector.addMessageToConsole):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::printAccessDeniedMessage):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::addMessageToConsole):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportLocalLoadFailed):
        (WebCore::FrameLoader::shouldAllowNavigation):
        * page/ChromeClient.h:
        * page/Console.cpp:
        (WebCore::printMessageSourceAndLevelPrefix):
        (WebCore::Console::addMessage):
        (WebCore::Console::error):
        (WebCore::Console::log):
        (WebCore::Console::dir):
        (WebCore::Console::trace):
        (WebCore::Console::assertCondition):
        (WebCore::Console::timeEnd):
        (WebCore::Console::warn):
        * page/Console.h: Added MessageType enum.
        (WebCore::):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        * wml/WMLErrorHandling.cpp:
        (WebCore::reportWMLError):
        * workers/GenericWorkerTask.h: Added GenericWorkerTask8 for the extra argument.
        (WebCore::GenericWorkerTask8::create):
        (WebCore::GenericWorkerTask8::GenericWorkerTask8):
        (WebCore::GenericWorkerTask8::performTask):
        (WebCore::createCallbackTask):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::postConsoleMessageTask):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::reportUnsafeUsage):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):

2009-07-12  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Upstream UndetectableHTMLCollection.idl as HTMLAllCollection.idl.

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMObjectsInclude.h:
        * bindings/v8/DerivedSourcesAllInOne.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8Index.cpp:
        * bindings/v8/V8Index.h:
        * dom/HTMLAllCollection.idl: Added.

2009-07-12  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Maciej Stachowiak.

        Inspector: Duplicate Computation in Autocompletion
        https://bugs.webkit.org/show_bug.cgi?id=26778

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._completionsReady):

2009-07-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=27196
        Rename bidi.cpp to RenderBlockLineLayout.cpp and remove bidi.h

        * GNUmakefile.am: Updated.
        * WebCore.gypi: Updated.
        * WebCore.pro: Updated.
        * WebCore.vcproj/WebCore.vcproj: Updated.
        * WebCore.xcodeproj/project.pbxproj: Updated.
        * WebCoreSources.bkl: Updated.
        * rendering/RenderBlock.h: Removed unnecessary forward declaration and
            updated comments.
        * rendering/RenderBlockLineLayout.cpp: Copied from WebCore/rendering/bidi.cpp.
            Removed unnecessary #include statements.
        (WebCore::BidiRun::BidiRun): Moved here from bidi.h.
        (WebCore::RenderBlock::layoutInlineChildren): Removed outdated comment.
        * rendering/bidi.cpp: Removed.
        * rendering/bidi.h: Removed.

2009-07-12  Dan Bernstein  <mitz@apple.com>

        - Windows build fix

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):

2009-07-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - Image cleanup

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData): Use the data() accessor
        instead of the m_data member.
        (WebCore::BitmapImage::dataChanged): Ditto.
        * platform/graphics/Image.h: Re-ordered #includes and class
        declarations. Removed the drawPatternCallback() declaration. Made member
        variables private.
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::drawPatternCallback): Changed this from a member function to a
        static function.
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged): Use the data() accessor
        instead of the m_data member.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): Ditto.

2009-07-12  Daniel Bates  <dbates@intudata.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27189
        
        Fixes insufficient check in XSSAuditor::canSetBaseElementURL that caused 
        XSSAuditor to incorrectly block HTML Base elements whose base path coincided 
        with the URL of the page.

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

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canSetBaseElementURL): Changed conditional to only call 
        XSSAuditor::findInRequest() if the host in the page URL disagrees with the host 
        in the base element URL.

2009-07-12  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Text searching with ICU should take the user's default locale into account
        https://bugs.webkit.org/show_bug.cgi?id=27184
        rdar://problem/6812121

        No simple way to test this since it's dependent on user locale.
        After this, the user's default locale is used only on Mac.

        * editing/TextIterator.cpp:
        (WebCore::createSearcher): Pass result of the currentSearchLocaleID
        function as the locale.

        * platform/text/TextBreakIteratorInternalICU.h: Added declaration of
        currentSearchLocaleID function.

        * platform/text/android/TextBreakIteratorInternalICU.cpp:
        (WebCore::currentSearchLocaleID): Added. Returns the empty string.
        * platform/text/chromium/TextBreakIteratorInternalICUChromium.cpp:
        (WebCore::currentSearchLocaleID): Ditto.
        * platform/text/gtk/TextBreakIteratorInternalICUGtk.cpp:
        (WebCore::currentSearchLocaleID): Ditto.

        * platform/text/mac/TextBreakIteratorInternalICUMac.mm:
        (WebCore::textBreakLocalePreference): Added. Returns the value of
        the AppleTextBreakLocale preference.
        (WebCore::topLanguagePreference): Added. Returns the value of the
        first item in the AppleLanguages preference.
        (WebCore::canonicalLanguageIdentifier): Added. Cover for the
        CFLocaleCreateCanonicalLanguageIdentifierFromString function.
        (WebCore::getLocale): Added. Transfers the locale from a CFStringRef
        into a buffer.
        (WebCore::getSearchLocale): Added. Calls topLanguagePreference,
        canonicalLanguageIdentifier, and getLocale.
        (WebCore::currentSearchLocaleID): Added. Calls getSearchLocale once.
        (WebCore::getTextBreakLocale): Changed to call
        textBreakLocalePreference, topLanguagePreference,
        canonicalLanguageIdentifier, and getLocale.

        * platform/text/win/TextBreakIteratorInternalICUWin.cpp:
        (WebCore::currentSearchLocaleID): Added. Returns the empty string.
        * platform/wx/TemporaryLinkStubs.cpp:
        (WebCore::currentSearchLocaleID): Ditto.

2009-07-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Create a PangoLayout that properly represents the visual
        appearance of the text in the web page so that the line boundary
        modes of getText{At,Before,After}Offset work correctly.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (UTF16ToUTF8):
        (g_substr):
        (convertUniCharToUTF8):
        (getPangoLayoutForAtk):

2009-07-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Simon Fraser.

        Bug 27187 - Match Gecko behaviour for canvas path mutation APIs on an empty path
        <https://bugs.webkit.org/show_bug.cgi?id=27187>

        Simple API change, check for the empty path and add appropriate point if necessary.

        Test: fast/canvas/canvas-modify-emptyPath.html

        * Info.plist:
        * WebCore.xcodeproj/project.pbxproj:
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::lineTo):
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo):
        (WebCore::CanvasRenderingContext2D::bezierCurveTo):

2009-07-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        HTMLMediaElement.canPlayType "maybe" and "probably" reversed
        https://bugs.webkit.org/show_bug.cgi?id=27186

        * platform/graphics/gtk/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):
            Return "probably" if type has codecs parameter.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::supportsType):
            Ditto.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::supportsType):
            Ditto.

2009-07-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Mark Rowe.

        A worker-thread inspired follow-up for:
        https://bugs.webkit.org/show_bug.cgi?id=26496 and <rdar://problem/7046520>
        REGRESSION: XHR stream connection blocks iFrame loading and resource downloading

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously): Don't perform the XHR compensation when the XHR
          is running on a worker thread. Accessing the global Cache data structures from a non-main thread is
          not currently supported.

2009-07-11  Simon Fraser  <simon.fraser@apple.com>

        Enable support for accelerated compositing and 3d transforms on Leopard.
        <https://bugs.webkit.org/show_bug.cgi?id=20166>
        <rdar://problem/6120614>

        Reviewed by Oliver Hunt.

        * Configurations/FeatureDefines.xcconfig:

2009-07-11  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build after r45724.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMethod::QtRuntimeMethod):

2009-07-10  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

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

        Implements support for HTML entities, so XSSAuditor can protect against attacks
        encoded with HTML entities.

        Tests: http/tests/security/xssAuditor/inline-event-HTML-entities.html
               http/tests/security/xssAuditor/javascript-link-HTML-entities-control-char.html
               http/tests/security/xssAuditor/javascript-link-HTML-entities-named.html
               http/tests/security/xssAuditor/javascript-link-HTML-entities-null-char.html
               http/tests/security/xssAuditor/javascript-link-HTML-entities.html
               http/tests/security/xssAuditor/link-onclick-entities.html
               http/tests/security/xssAuditor/script-tag-entities.html
               http/tests/security/xssAuditor/script-tag-with-source-entities.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL):
        (WebCore::XSSAuditor::decodeURL): Modified to call WebCore::XSSAuditor::decodeHTMLEntities
        to decode HTML entities.
        (WebCore::XSSAuditor::decodeHTMLEntities): Added method to decode HTML entities.
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h:

2009-07-10  David Kilzer  <ddkilzer@apple.com>

        Bug 27007: Build fixes when ICONDATABASE is disabled

        <https://bugs.webkit.org/show_bug.cgi?id=27007>

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Added IconDatabaseNone.cpp
        to the project.
        * loader/icon/IconDatabase.cpp: Added
        #if ENABLE(ICONDATABASE)/#endif macro guard.
        * loader/icon/IconDatabase.h: Removed three public methods from
        #if ENABLE(ICONDATABASE)/#endif macro so that they may be
        stubbed out in IconDatabaseNone.cpp.
        * loader/icon/IconDatabaseNone.cpp: Added
        #if !ENABLE(ICONDATABASE)/#endif macro guard.
        (WebCore::IconDatabase::importIconURLForPageURL): Added.
        (WebCore::IconDatabase::importIconDataForIconURL): Added.
        (WebCore::IconDatabase::shouldStopThreadActivity): Added.

2009-07-10  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

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

        Fixes issue where JavaScript URLs that contain null- and non-null control characters can
        bypass XSSAuditor.

        Tests: http/tests/security/xssAuditor/javascript-link-control-char.html
               http/tests/security/xssAuditor/javascript-link-null-char.html
               http/tests/security/xssAuditor/javascript-link.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Separated out logic for JavaScript URLs from 
        inline scripts. For JavaScript URLs, calls XSSAuditor::canEvaluateJavaScriptURL.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluate): Made similar changes to evaluate() as in
        bindings/js/ScriptController.cpp.
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canEvaluateJavaScriptURL): Separated out logic for JavaScript URLs
        into its own method.
        * page/XSSAuditor.h:

2009-07-10  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Kilzer.

        WebKit needs a style linting tool
        https://bugs.webkit.org/show_bug.cgi?id=25884

        Fix bunch of style issues by autofix of cpplint.
        This patch is created to demonstrate the autofix of cpplint.py.

        No new testcases because it's a style fix

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseMediaQuery):
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::parseValue):
        (WebCore::skipCommaInDashboardRegion):
        (WebCore::CSSParser::parseDashboardRegions):
        (WebCore::ShadowParseContext::commitValue):
        (WebCore::ShadowParseContext::commitLength):
        (WebCore::ShadowParseContext::commitColor):
        (WebCore::BorderImageParseContext::commitNumber):
        (WebCore::BorderImageParseContext::commitWidth):
        (WebCore::BorderImageParseContext::commitRule):
        (WebCore::BorderImageParseContext::commitBorderImage):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::text):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/MediaList.cpp:
        (WebCore::MediaList::deleteMedium):
        * css/MediaQuery.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::parseAspectRatio):
        * css/MediaQueryEvaluator.h:
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::operator==):
        * css/WebKitCSSMatrix.h:
        * dom/Comment.h:
        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Document.h:
        (WebCore::Document::setHasDashboardRegions):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::nodeName):
        * dom/DocumentFragment.h:
        * dom/DynamicNodeList.h:
        * dom/EditingText.h:
        * dom/Element.cpp:
        (WebCore::Element::dispatchAttrAdditionEvent):
        * dom/NamedAttrMap.cpp:
        (WebCore::NamedNodeMap::item):
        * dom/Node.cpp:
        (WebCore::Node::nodeValue):
        (WebCore::Node::nodeIndex):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::create):
        * dom/Notation.h:
        * dom/ProcessingInstruction.h:
        * dom/Range.cpp:
        (WebCore::Range::processContents):
        * dom/StyledElement.cpp:
        (WebCore::toHex):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::~PendingStartElementNSCallback):
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::call):
        (WebCore::PendingCallbacks::):
        (WebCore::OffsetBuffer::readOutBytes):
        (WebCore::handleElementNamespaces):
        (WebCore::handleElementAttributes):
        (WebCore::attributesStartElementNsHandler):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::attributesStartElementNsHandler):
        (WebCore::XMLTokenizer::parseStartElement):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::removeNode):
        * editing/Editor.cpp:
        (WebCore::Editor::pasteAsPlainText):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::directionOfEnclosingBlock):
        * editing/SmartReplaceICU.cpp:
        (WebCore::addAllCodePoints):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::icon):
        (WebCore::HistoryItem::adoptVisitCounts):
        * html/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyFillColor):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setActive):
        (WebCore::HTMLAnchorElement::isLiveLink):
        * html/HTMLAppletElement.h:
        * html/HTMLAudioElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBaseFontElement.h:
        * html/HTMLDListElement.h:
        * html/HTMLDirectoryElement.h:
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::HTMLFieldSetElement):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::reset):
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::parseMappedAttribute):
        * html/HTMLHeadElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::setLoadManually):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::selection):
        * html/HTMLIsIndexElement.h:
        * html/HTMLMarqueeElement.cpp:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::):
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.h:
        * html/HTMLModElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::childrenChanged):
        * html/HTMLParamElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::deleteRow):
        * html/HTMLTitleElement.h:
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseNonHTMLText):
        (WebCore::HTMLTokenizer::parseEntity):
        (WebCore::HTMLTokenizer::parseTag):
        (WebCore::HTMLTokenizer::write):
        * html/HTMLUListElement.h:
        * html/HTMLVideoElement.h:
        * html/TimeRanges.h:
        (WebCore::TimeRanges::Range::Range):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableResourceTracking):
        (WebCore::InspectorController::disableResourceTracking):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::newInspectorJSONObject):
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::defaultKeyboardEventHandler):
        * page/Frame.cpp:
        (WebCore::Frame::jsDefaultStatusBarText):
        * page/android/DragControllerAndroid.cpp:
        (WebCore::DragController::dragOperation):
        * page/android/EventHandlerAndroid.cpp:
        (WebCore::EventHandler::tabsToAllControls):
        (WebCore::EventHandler::eventActivatedView):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::dragOperation):
        * page/qt/DragControllerQt.cpp:
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/win/FrameWin.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::mouseEventOffsetToThumb):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setVerticalAlignLength):
        (WebCore::InheritedFlags::setUnicodeBidi):
        (WebCore::InheritedFlags::setCursor):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/style/StyleInheritedData.h:
        (WebCore::StyleInheritedData::operator!=):
        * storage/DatabaseTask.h:
        * svg/GradientAttributes.h:
        * svg/LinearGradientAttributes.h:
        * svg/PatternAttributes.h:
        * svg/RadialGradientAttributes.h:
        * svg/SVGAnimatedPathData.h:
        * svg/SVGAnimatedPoints.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGElementInstance.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::parseMappedAttribute):
        * svg/SVGList.h:
        * svg/SVGListTraits.h:
        (WebCore::):
        * svg/SVGMPathElement.h:
        * svg/SVGMetadataElement.h:
        * svg/SVGParserUtilities.cpp:
        (WebCore::SVGPathParser::parseSVG):
        (WebCore::SVGPathParser::calculateArc):
        * svg/SVGPathElement.h:
        * svg/SVGPathSegClosePath.h:
        * svg/SVGSVGElement.h:
        * svg/SVGSetElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::parseMappedAttribute):
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGTransformable.cpp:
        (WebCore::):
        * svg/SVGViewSpec.cpp:
        (WebCore::):
        * svg/animation/SMILTime.cpp:
        (WebCore::operator+):
        (WebCore::operator-):
        (WebCore::operator*):
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGResource.cpp:
        (WebCore::clientMap):
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::value):
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::value):
        * workers/WorkerRunLoop.cpp:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dropProtection):
        * xml/XPathPath.h:

2009-07-10  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7049066>.
        Update SnowLeopard media controller layout.

        * css/mediaControlsQT.css:
            Update for new layout.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::movieLoadType):
            Added to replace isStreaming.
        * html/HTMLMediaElement.h:
            Declare movieLoadType, remove isStreaming.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlStatusDisplayElement::update):
            Use movieLoadType instead of isStreaming.
        (WebCore::MediaControlTimelineContainerElement::rendererIsNeeded):
            MediaControlElement is the base class, not HTMLInputElement.
        (WebCore::MediaControlStatusDisplayElement::rendererIsNeeded):
            Ditto.
        (WebCore::MediaControlRewindButtonElement::rendererIsNeeded):
            Don't display rewind button for live streams.
        (WebCore::MediaControlReturnToRealtimeButtonElement::rendererIsNeeded):
            MediaControlInputElement is the base class, not HTMLInputElement.
        * rendering/MediaControlElements.h:

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::getMediaUIPartStateFlags):
            New, return wkDrawMediaUIPart flags.
        (WebCore::RenderThemeMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeMac::paintMediaMuteButton):
        (WebCore::RenderThemeMac::paintMediaPlayButton):
        (WebCore::RenderThemeMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaSliderThumb):
        (WebCore::RenderThemeMac::paintMediaRewindButton):
        (WebCore::RenderThemeMac::paintMediaReturnToRealtimeButton):
        (WebCore::RenderThemeMac::paintMediaControlsBackground):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):
            Use getMediaUIPartStateFlags.

2009-07-10  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=19562
        Added build stuff and stub for the ValidityState class, part of HTML5
        section Forms:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#validitystate

        Test: fast/forms/ValidityState-001.html

        * DerivedSources.cpp: Fix aimed to include ValidityState files
        * DerivedSources.make: ditto
        * GNUmakefile.am: ditto
        * WebCore.gypi: ditto
        * WebCore.pro: ditto
        * WebCore.vcproj/WebCore.vcproj: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * WebCoreSources.bkl: ditto
        * html/HTMLButtonElement.idl: "validity" attribute
        * html/HTMLFieldSetElement.idl: ditto
        * html/HTMLFormControlElement.cpp: object getter
        (WebCore::HTMLFormControlElement::validity):
        * html/HTMLFormControlElement.h: ditto
        * html/HTMLInputElement.idl: "validity" attribute
        * html/HTMLSelectElement.idl: ditto
        * html/HTMLTextAreaElement.idl: ditto
        * html/ValidityState.cpp: Added.
        (WebCore::ValidityState::ValidityState):
        (WebCore::ValidityState::valid): validation flag
        * html/ValidityState.h: Added.
        (WebCore::ValidityState::create): creation routine
        (WebCore::ValidityState::control): ValidityState's parent getter
        (WebCore::ValidityState::valueMissing): validation flag
        (WebCore::ValidityState::typeMismatch): ditto
        (WebCore::ValidityState::patternMismatch): ditto
        (WebCore::ValidityState::tooLong): ditto
        (WebCore::ValidityState::rangeUnderflow): ditto
        (WebCore::ValidityState::rangeOverflow): ditto
        (WebCore::ValidityState::stepMismatch): ditto
        (WebCore::ValidityState::customError): ditto
        * html/ValidityState.idl: Added.

2009-07-10  Brady Eidson  <beidson@apple.com>

        Style cleanup over my last patch.

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

2009-07-10  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Geoffrey Garen.

        * inspector/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::dynamicGlobalObject):
        * inspector/JavaScriptCallFrame.h: New helper method, used below.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::detach): In the special case
        where we detach from a window currently executing JavaScript,
        manually tear down our representation of the JavaScript
        call stack, since we won't get any more callbacks from JavaScriptCore
        to automatically tear it down. It's too bad that WebCore is
        responsible for this kind of tracking -- in the future, it would
        be nice if more of the breakpoint handling was inside of JavaScriptCore.

2009-07-10  Brady Eidson  <beidson@apple.com>

        Reviewed by Antti Koivisto.

        https://bugs.webkit.org/show_bug.cgi?id=26496 and <rdar://problem/7046520>
        REGRESSION: XHR stream connection blocks iFrame loading and resource downloading

        With this test we ended up going over the maximum-connections-per-host limit that CFNetwork expected.
        When that happened, the first request that was over the limit ended up in a bizarre state where it 
        wasn't fully serviced until after the long running XHR was complete.

        Loader and Loader::Host work together to try to not exceed the max-connection limit but non-cache
        resources - such as XHR - could still end up causing this limit to be exceeded.

        This fix adds a workaround specifically for XHR while we hash out a more thorough solution that will
        handle this at the resource handle level.

        * loader/loader.cpp:
        (WebCore::Loader::nonCacheRequestInFlight):
        (WebCore::Loader::nonCacheRequestComplete):
        (WebCore::Loader::Host::Host):
        (WebCore::Loader::Host::nonCacheRequestInFlight):
        (WebCore::Loader::Host::nonCacheRequestComplete):
        (WebCore::Loader::Host::servePendingRequests): Take nonCacheRequestsInFlight into account.
        * loader/loader.h:
        (WebCore::Loader::Host::processingResource): Take nonCacheRequestsInFlight into account.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest): 
        (WebCore::XMLHttpRequest::loadRequestAsynchronously): Bump the nonCacheRequestInFlight count.
        (WebCore::XMLHttpRequest::didFail): Decrement that count if the Loader was notified.
        (WebCore::XMLHttpRequest::didFinishLoading): Ditto.

2009-07-10  Antti Koivisto  <antti@apple.com>

        Try to unbreak non-Mac build.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::formDidFocus):
        (WebCore::ChromeClient::formDidBlur):

2009-07-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        The rest of the fix for <rdar://problem/7038831> REGRESSION (TOT): 
        In Mail, a crash occurs at WebCore::Widget::afterMouseDown() after 
        clicking To Do's close box

        Make the Widget* in passMouseDownEventToWidget() a RefPtr.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseDownEventToWidget):

2009-07-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        rename getDOMStructure calls w/o JSGlobalObject* to deprecatedGetDOMStructure
        https://bugs.webkit.org/show_bug.cgi?id=27157

        This is the first step to fixing
        https://bugs.webkit.org/show_bug.cgi?id=27088

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.h:
        (WebCore::deprecatedGetDOMStructure):
        (WebCore::createDOMObjectWrapper):
        (WebCore::createDOMNodeWrapper):
        * bindings/js/JSNamedNodesCollection.cpp:
        (WebCore::JSNamedNodesCollection::JSNamedNodesCollection):
        * bindings/js/JSRGBColor.cpp:
        (WebCore::JSRGBColor::JSRGBColor):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::RuntimeArray):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::RuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::RuntimeObjectImp::RuntimeObjectImp):

2009-07-10  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Antti Koivisto.

        Add delegate methods about focus and blur and state change
        https://bugs.webkit.org/show_bug.cgi?id=27153

        Call the appropriate new ChromeClient methods for focus and blur.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchFocusEvent):
        (WebCore::HTMLFormControlElement::dispatchBlurEvent):
        * html/HTMLFormControlElement.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::formDidFocus):
        (WebCore::EmptyChromeClient::formDidBlur):
        * page/ChromeClient.h:

2009-07-10  Steve Falkenburg  <sfalken@apple.com>

        <rdar://problem/7048741> REGRESSION: Error about missing SwMenuX.dll opening pages with Shockwave
        
        Use altered search path while loading plug-ins. This modifies the DLL search order
        to look in the directory containing the plug-in even if a call to SetDllDirectory
        was previously made. Use of SetDllDirectory removes the current directory from the search path,
        breaking the previous strategy for locating any dependent DLLs of the plug-in.
        
        Reviewed by Jon Honeycutt.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::load): Use LoadLibraryEx with LOAD_WITH_ALTERED_SEARCH_PATH

2009-07-10  Adam Roben  <aroben@apple.com>

        Sort all our Xcode projects

        Accomplished using sort-Xcode-project-file.

        Requested by Dave Kilzer.

        * WebCore.xcodeproj/project.pbxproj:

2009-07-10  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

        Chromium Linux: use disabled images for disabled widgets.

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

        Previously, checkboxes and radio controls rendered the same even if disabled.
        The Chromium side of this change is r20224.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintCheckbox):
        (WebCore::RenderThemeChromiumSkia::paintRadio):

2009-07-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan.

        Fix crash when changing the zoom level in http://iphone.akamai.com/
        <rdar://problem/7029077>

        RenderLayerBacking's paintIntoLayer() method called updateLayerListsIfNeeded(),
        which could potentially destroy that compositing layer, causing a crash.
        Prevent this from happening by not doing a compositing update from paintIntoLayer().

        The existing updateLayerListsIfNeeded() was renamed to updateCompositingAndLayerListsIfNeeded(),
        and still does the compositing update. The new updateLayerListsIfNeeded() does not touch
        compositing layers, and is still called from paintIntoLayer().
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::updateLayerListsIfNeeded):
        (WebCore::RenderLayer::updateCompositingAndLayerListsIfNeeded):
        * rendering/RenderLayer.h:

2009-07-10  Drew Wilson  <atwilson@google.com>

        Reviewed by Darin Adler.

        Need to remove UsesManualToJSImplementation() in favor of CustomToJS.
        https://bugs.webkit.org/show_bug.cgi?id=27010

        Added support for CustomToJS IDL attribute to replace the hard-coded class list in UsesManualToJSImplementation().

        This is just a cleanup of existing functionality, so existing LayoutTests adequately cover this patch.

        * bindings/scripts/CodeGeneratorJS.pm:
        Removed UsesManualToJSImplementation(), added support for CustomToJS attribute.
        * css/CSSRule.idl:
        * css/CSSValue.idl:
        * css/StyleSheet.idl:
        * dom/Document.idl:
        * dom/Event.idl:
        * dom/Node.idl:
        * html/ImageData.idl:
        * svg/SVGElementInstance.idl:
        * svg/SVGPathSeg.idl:
        Added CustomToJS attribute to all the above IDL files.

2009-07-10  Dan Bernstein  <mitz@apple.com>

        - fix the build by reverting the ill-advised r45711

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

2009-07-09  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        Updated WebCore.base.exp to add some needed functions.

        * WebCore.base.exp:

2009-07-10  Dan Bernstein  <mitz@apple.com>

        - address a review comment from Simon Fraser which I forgot to include
          in the last check-in

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToAnchor): Pass true to getRect() for
        maximum transform friendliness!

2009-07-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=27137
          <rdar://problem/7043124> REGRESSION (r44311): Reproducible crash due
          to infinite recursion into FrameLoader::gotoAnchor() ->
          FrameView::layout()

        Test: fast/loader/goto-anchor-infinite-layout.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::gotoAnchor): Moved the code to update layout,
        find the renderer to scroll to, and scroll from here to methods on
        FrameView, and replaced it with a call to
        FrameView::maintainScrollPositionAtAnchor().
        (WebCore::FrameLoader::completed): Call maintainScrollPositionAtAnchor()
        instead of setLockedToAnchor().

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Removed initialization of
        m_lockedToAnchor.
        (WebCore::FrameView::reset): Reset m_maintainScrollPositionAnchor instead
        of m_lockedToAnchor.
        (WebCore::FrameView::layout): Removed the code related to scrolling to
        the anchor from here, because scrolling can trigger events which
        invalidate the layout, and as such, belongs with the post-layout tasks.
        (WebCore::FrameView::maintainScrollPositionAtAnchor): Added. When called
        with a node scrolls the view to the top of that node and maintains it
        scrolled to the top of the node during subsequent layouts, until
        this function is called with 0 or other things trigger scrolling.
        (WebCore::FrameView::scrollRectIntoViewRecursively): Reset
        m_maintainScrollPositionAnchor.
        (WebCore::FrameView::setScrollPosition): Ditto.
        (WebCore::FrameView::scrollToAnchor): Added. Scrolls to the top of
        m_maintainScrollPositionAnchor, if it is set.
        (WebCore::FrameView::performPostLayoutTasks): Call scrollToAnchor().
        (WebCore::FrameView::setWasScrolledByUser): Reset
        m_maintainScrollPositionAnchor.

        * page/FrameView.h: Removed lockedToAnchor(), setLockedToAnchor(),
        and m_lockedToAnchor. Added maintainScrollPositionAtAnchor() and
        m_maintainScrollPositionAnchor.

2009-07-04  Sriram Yadavalli  <sriram.yadavalli@nokia.com>

        Reviewed by Simon Hausmann.

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

        QtWebKit fails in loading www.nytimes.com in Windows/Linux

        QNetworkReplyHandler is ignoring content associated with 401 error.
        This causes the XHR response handling to fail.

        Simon: Added also ProxyAuthenticationRequiredError, to handle the same
        case when going through proxies, as suggested by Prasanth.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):

2009-07-10  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Enable HTML 5 Messaging to fix message channel Qt DRT failures in
        fast/events.

        * WebCore.pro:

2009-07-09  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Maciej Stachowiak.

        added InlineBox::isLeaf()
        firstLeafChild()/lastLeafChild() not virtual and not callable on InlineBox anymore.
        firstLeafChild()/lastLeafChild() will no longer return a node outside of the given subtree.   
        Removed firstLeafChildAfterBox()/lastLeafChildBeforeBox()
        Removed potentially quadratic behavior if all nodes before/after a given box are empty InlineFlowBoxes

        Currently, these methods are called on RootInlineBox objects only, so above changes should not have
        any observable effect (only the removal of the square performance behavior could apply, 
        but the conditions for that are probably of a rather theoretical nature).

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::nextLeafChild):
        (WebCore::InlineBox::prevLeafChild):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::isLeaf):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::firstLeafChild):
        (WebCore::InlineFlowBox::lastLeafChild):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::firstChild):
        (WebCore::InlineFlowBox::lastChild):
        (WebCore::InlineFlowBox::isLeaf):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::closestLeafChildForXPos):

2009-07-09  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Maciej Stachowiak.

        Added InlineBox::baselinePosition() and lineHeight() methods
        (adapted remaining code accordingly to use those methods)

        No change in functionality.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::baselinePosition):
        (WebCore::InlineBox::lineHeight):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesVertically):

2009-07-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 27142 - canPlayType() should return empty string for unsupported content
        <https://bugs.webkit.org/show_bug.cgi?id=27142>

        Return "" instead of "no" for unsupport media types. 

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):

2009-07-09  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Maciej Stachowiak.

        Implement the part of HTML5 spec that deals with parsing of <rp> and <rt> tags
        in that their end tags are optional if followed by <rp>/<rt>.

        Also specify a new accessibility role "annotation" for <rp> and <rt>.

        Affected code parts are not enclosed in #IF ENABLE(RUBY), since the parsing
        is not affected by whether ruby is rendered properly or not (in fact, it may 
        be more profound without ruby layouting, since the contents of <rp> are not hidden).

        Test: fast/ruby/parse-rp.html

        * accessibility/AccessibilityObject.h:
        (WebCore::):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::roleValue):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::endTagRequirement):
        (WebCore::HTMLElement::tagPriority):
        (WebCore::inlineTagList):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::rpCreateErrorCheck):
        (WebCore::HTMLParser::rtCreateErrorCheck):
        (WebCore::HTMLParser::getNode):
        * html/HTMLParser.h:
        * html/HTMLTagNames.in:

2009-07-09  Dmitry Titov  <dimich@chromium.org>

        Not reviewed, fix for previous commit.

        The change http://trac.webkit.org/changeset/45695 did not correctly
        enabled GTL and QT build flags. This caused layout tests failure.
        This is speculative fix for those failures.

        * GNUmakefile.am: added ENABLE_CHANNEL_MESSAGING flag.
        * WebCore.pro: ditto.
        * page/DOMWindow.idl: touched to cause recompile.
        * workers/WorkerContext.idl: ditto.

2009-07-09  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

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

        Turned on CHANNEL_MESSAGING by default because the MessageChannel API
        is now implemented for Web Workers and is reasonably stable.

        Tests: fast/events/message-channel-gc-2.html
               fast/events/message-channel-gc-3.html
               fast/events/message-channel-gc-4.html
               fast/events/message-channel-gc.html
               fast/events/message-channel-listener-circular-ownership.html
               fast/events/message-port-clone.html
               fast/events/message-port-constructor-for-deleted-document.html
               fast/events/message-port-deleted-document.html
               fast/events/message-port-deleted-frame.html
               fast/events/message-port-inactive-document.html
               fast/events/message-port-no-wrapper.html
               fast/events/message-port.html
               fast/workers/worker-cloneport.html
               fast/workers/worker-messageport-gc.html
               fast/workers/worker-messageport.html

        * Configurations/FeatureDefines.xcconfig: Turned on ENABLE_CHANNEL_MESSAGING.
        * WebCore/WebCore.vcproj/WebCoreCommon.vsprops: ditto.
        * WebCore/WebCore.vcproj/build-generated-files.sh: ditto.
        * WebCore/page/DOMWindow.idl: touch the file to cause re-generation of headers.
        * WebCore/workers/WorkerContext.idl: ditto.


2009-07-09  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        Full page zoom breaks remaining and elapsed time display in the <video> controller.
        https://bugs.webkit.org/show_bug.cgi?id=27123

        We are changing the size of the time remaining and time elapsed field, to
        automatically hide them, when the controller is too short.

        Because we toggle the size between 0 and the previous value of the
        controller, we miss any width change that may occur during full page zoom,
        and we fail to restore a correct width.

        This change fixes that problem by using a cloned style on which we
        set the width to 0, and restoring the previous style when going back to
        the normal width.

        We take care about properly using the cloned style or the pseudo style,
        by overriding styleForElement().

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::styleForElement):
        (WebCore::MediaControlElement::attach):
        (WebCore::MediaControlElement::updateStyle):
        (WebCore::MediaControlInputElement::styleForElement):
        (WebCore::MediaControlInputElement::attach):
        (WebCore::MediaControlInputElement::updateStyle):
        (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement):
        (WebCore::MediaControlTimeDisplayElement::styleForElement):
        (WebCore::MediaControlTimeDisplayElement::setVisible):
        * rendering/MediaControlElements.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::shouldShowTimeDisplayControls): Make sure
        we take in account the zoom level when deciding if we should hide the 
        ellapsed and remaining time.

2009-07-09  Michael Nordman  <michaeln@google.com>

        Reviewed by Darin Adler.

        Fix chromium build bustage due to Widget being a RefCounted class.
        https://bugs.webkit.org/show_bug.cgi?id=27139

        * platform/chromium/PopupMenuChromium.cpp:
        * platform/chromium/PopupMenuChromium.h:

2009-07-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27130 - Need to implement ARIA role="toolbar"
        https://bugs.webkit.org/show_bug.cgi?id=27130

        Test: platform/mac/accessibility/aria-toolbar.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::RoleEntry::):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper roleDescription]):

2009-07-09  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Upstream WebCore.gypi, the project file for Chromium build.
        https://bugs.webkit.org/show_bug.cgi?id=27135

        * WebCore.gypi: Added.

2009-07-09  Jon Honeycutt  <jhoneycutt@apple.com>

        A more robust fix for <rdar://problem/6930280> Reproducible crash at
        USA Today photo gallery

        Reviewed by Steve Falkenburg.

        * plugins/win/PluginMessageThrottlerWin.cpp:
        (WebCore::PluginMessageThrottlerWin::messageThrottleTimerFired):
        Protect the PluginView from destruction before calling its window proc.

2009-07-09  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/6978804> WER #16: Repro Access Violation in
        WebCore::PluginView::bindingInstance (1310178023)

        Reviewed by Darin Adler.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::bindingInstance):
        Protect the PluginView from destruction before calling NPN_GetValue. If
        the renderer for the PluginView was destroyed during the call, and the
        PluginView's ref count is now 1, return null.

2009-07-09  Jon Honeycutt  <jhoneycutt@apple.com>

        Speculative fix for <rdar://problem/6991251> WER #13: Crash in
        WebKit!WebCore::PluginView::performRequest+203 (1311461169)

        Reviewed by Darin Adler.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest):
        Protect the PluginView from destruction before performing a load.
        Removed some trailing whitespace.

2009-07-09  Jon Honeycutt  <jhoneycutt@apple.com>

        Build fix.

        * inspector/JavaScriptDebugServer.cpp:
        (WebCore::JavaScriptDebugServer::setJavaScriptPaused):

2009-07-09  Beth Dakin and Jon Honeycutt <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Make Widget RefCounted to fix or make fixable:

        <rdar://problem/7038831> REGRESSION (TOT): In Mail, a crash occurs 
        at WebCore::Widget::afterMouseDown() after clicking To Do's close 
        box
        <rdar://problem/6978804> WER #16: Repro Access Violation in 
        WebCore::PluginView::bindingInstance (1310178023)
        -and-
        <rdar://problem/6991251> WER #13: Crash in WebKit!
        WebCore::PluginView::performRequest+203 (1311461169) 

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::createPlugin):
        Changed to return PassRefPtr
        (WebCore::EmptyFrameLoaderClient::createJavaAppletWidget):
        Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe):
        (WebCore::FrameLoader::loadPlugin):
        Make the widget variable a RefPtr. Use .get() when passing it to
        RenderPart::setWidget().
        (WebCore::FrameLoader::createJavaAppletWidget):
        Make the widget variable a RefPtr.

        * loader/FrameLoader.h:
        Changed the return type of createJavaAppletWidget().

        * loader/FrameLoaderClient.h:
        Change the return types of createPlugin() and 
        createJavaAppletWidget().

        * page/Frame.cpp:
        (WebCore::Frame::createView):
        No need to call .get() since setWidget() takes a RefPtr.

        * page/FrameView.cpp:
        (WebCore::FrameView::layoutIfNeededRecursive):
        children() now returns a HashSet of RefPtrs.

        * page/FrameView.h:
        Remove inheritance from RefCounted; we pick this up from ScrollView
        through Widget.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::addChild):
        addChild() now takes a PassRefPtr and m_children now keeps a 
        HashSet of RefPtrs.

        * platform/ScrollView.h:
        ScrollView constructor is now protected.
        (WebCore::ScrollView::children):
        m_children is now a HashSet of RefPtrs.

        * platform/Scrollbar.h:
        Remove inheritance from RefCounted; we pick this up from ScrollView
        through Widget.

        * platform/Widget.h:
        Inherit from RefCounted. Cleaned up some whitespace. Make m_widget 
        a RefPtr.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::create):
        Adopt the PluginView when returning it.

        * plugins/PluginView.h:
        Changed create() to return a PassRefPtr.

        * rendering/RenderApplet.cpp:
        Receive result in a RefPtr when calling createJavaAppletWidget().

        * rendering/RenderPart.cpp:
        (WebCore::RenderPart::setWidget): 
        setWidget() now takes a PassRefPtr. Also removed the manual ref of 
        FrameViews. This is handled by having m_widget be a RefPtr. Removed 
        deleteWidget().

        * rendering/RenderPart.h:
        Removed override of deleteWidget().

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):
        (WebCore::RenderWidget::setWidget):
        (WebCore::RenderWidget::paint):
        (WebCore::RenderWidget::setOverlapTestResult):
        (WebCore::RenderWidget::updateWidgetPosition):
        Use .get().
        (WebCore::RenderWidget::clearWidget):
        Don't call deleteWidget(). It was removed. 

        * rendering/RenderWidget.h:
        Removed deleteWidget(). Made m_widget a RefPtr.
        (WebCore::RenderWidget::widget):
        Use .get().

2009-07-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 27129 - AX: possible assertion for a non-native image in accessibility
        https://bugs.webkit.org/show_bug.cgi?id=27129 

        It's possible for an image that is not really an image to assert, because its renderer
        is turned into a RenderImage.

        Test: accessibility/non-native-image-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::RoleEntry::):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper roleDescription]):

2009-07-09  Simon Fraser  <simon.fraser@apple.com>

        Build fix for SnowLeopard.
        
        Avoid using the contentsTransform methods if not on Leopard, because
        we don't need to call them.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::updateContentsTransform):
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer setNeedsDisplayInRect:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer setNeedsDisplayInRect:]):

2009-07-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        Improve the appearance of text in compositing layers when -[CALayer geometryFlipped]
        is not available.
        <rdar://problem/6120614>

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsOrientation):
        (WebCore::GraphicsLayer::contentsOrientation):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        Add a m_contentsOrientation member and getter/setter to control whether
        the contents of this layer have a transform applied to them before display.

        * platform/graphics/mac/GraphicsLayerCA.h:
        New method to return the default contents orientation.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::flipTransform):
        Convenience method to return a transform with a Y flip.

        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::setSize):
        After the size changes we have to update the contentsTransform.

        (WebCore::GraphicsLayerCA::setGeometryOrientation):
        (WebCore::GraphicsLayerCA::geometryOrientation):
        If -setGeometryFlipped: is not available, use a children transform.
        
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        Tiled layers have issues with flipped contentsTransform, so just use
        top-down drawing for them. Call updateContentsTransform() to set the
        new contents transform after swapping layers.
        
        (WebCore::GraphicsLayerCA::defaultContentsOrientation):
        Use bottom-up when -geometryFlipped is not available, otherwise top-down.
        
        (WebCore::GraphicsLayerCA::updateContentsTransform):
        Set the layer contents transform based on contentsOrientation().

        (WebCore::GraphicsLayerCA::setContentsLayer):
        We have to manually flip contents layers if we're not using -geometryFlipped.
        
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        Do early return if layerContents is nil. Flip the CTM if the layer has
        bottom-up coordinates, so that CG sees a CTM with no flip.
        Do the CGContextRestoreGState() after drawing the debug indicator.
        
        (-[WebLayer setNeedsDisplayInRect:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer setNeedsDisplayInRect:]):
        Need to map the dirty rect through the contentsTransform.

2009-07-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        <rdar://problem/6921671> Visit counter shouldn't be incremented by redirects.

        Can't test this functionality with layout tests.

        * WebCore.base.exp:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::recordVisitAtTime):
        (WebCore::HistoryItem::visited):
        * history/HistoryItem.h:
        Only increase visit count if explicitly told to. Now, some visits change last access time,
        but do not increase visit count.

2009-07-09  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7046098> MediaControllerThemeQT requires QuickTime 7.6.3

        Require QuickTime 7.6.3 or higher to enable the new media controller UI.

        * rendering/RenderThemeMac.mm:
        (WebCore::mediaControllerTheme):

2009-07-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Remove incorrect comment.

        * page/MouseEventWithHitTestResults.h:

2009-07-09  Mads Ager  <ager@chromium.org>

        Reviewed by Dimitri Glazkov.

        Update the V8 bindings codegenerator to use the RGBColor::create
        method to handle refcounts for RGBColor objects correctly.
        
       * bindings/scripts/CodeGeneratorV8.pm: Use RGBColor::create to create RGBColor objects.

2009-07-09  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Crash in RenderMedia::styleDidChange.
        <rdar://problem/7044313> CrashTracer: quicklook crashed generating thumbnail for page with 
        media element (RenderMedia::styleDidChange 115)

        Speculative fix for crash in styleDidChange. Null check controller elements before tell
        them to update style.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::styleDidChange):

2009-07-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        [V8] Move V8DOMWrapper to its own file
        https://bugs.webkit.org/show_bug.cgi?id=27121

        * bindings/v8/V8DOMWrapper.cpp: Added.
        (WebCore::GetToStringName):
        (WebCore::ConstructorToString):
        (WebCore::V8DOMWrapper::convertSVGElementInstanceToV8Object):
        (WebCore::V8DOMWrapper::convertSVGObjectWithContextToV8Object):
        (WebCore::V8DOMWrapper::domObjectHasJSWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        (WebCore::V8DOMWrapper::domWrapperType):
        (WebCore::V8DOMWrapper::convertToNativeObjectImpl):
        (WebCore::V8DOMWrapper::convertToSVGPODTypeImpl):
        (WebCore::V8DOMWrapper::lookupDOMWrapper):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNodeHelper):
        (WebCore::V8DOMWrapper::wrapNativeNodeFilter):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::setDOMWrapper):
        (WebCore::V8DOMWrapper::maybeDOMWrapper):
        (WebCore::V8DOMWrapper::isDOMEventWrapper):
        (WebCore::V8DOMWrapper::isWrapperOfType):
        (WebCore::V8DOMWrapper::htmlElementType):
        (WebCore::V8DOMWrapper::svgElementType):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        (WebCore::V8DOMWrapper::convertDOMImplementationToV8Object):
        (WebCore::V8DOMWrapper::convertStyleSheetToV8Object):
        (WebCore::V8DOMWrapper::convertCSSValueToV8Object):
        (WebCore::V8DOMWrapper::convertCSSRuleToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        * bindings/v8/V8DOMWrapper.h: Added.
        (WebCore::V8DOMWrapper::convertDOMWrapperToNative):
        (WebCore::V8DOMWrapper::wrapCPointer):
        (WebCore::V8DOMWrapper::extractCPointer):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNode):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::convertToNativeObject):
        (WebCore::V8DOMWrapper::convertToNativeEvent):
        (WebCore::V8DOMWrapper::extractCPointerImpl):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:

2009-07-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Adele Peterson.

        Crash in setFocusedFrame.
        <rdar://7032869> Crashing in setFocusedFrame on blogger.com.

        Speculative fix for crasher in setFocusedFrame.  Make sure to ref both frames and fire
        the events only after the local member has been updated.

        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedFrame):

2009-07-09  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adele Peterson.

        Possible crashes when mouse clicks not dispatched because range input destroyed while 
        thumb is being dragged (e.g. scrub to end of movie)
        <rdar://problem/7037494> 
        https://bugs.webkit.org/show_bug.cgi?id=27101

        Some shadow nodes "capture" all mouse events from mouseDown to mouseUp so they continue to 
        get mouse events even when the mouse is moved outside of the node. This is done by putting
        EventHandler into a mode where it sends all mouse events to the node regardless of the
        actual mouse position. The mode is set on mouseDown and cleared on mouseUp but if the
        node is deleted while in this mode, the mouseUp is never sent and EventHandler continues
        to try to send events to the deleted node. This sometimes results in a crash, and sometimes
        in a page that doesn't respond to click events.

        Tests: fast/forms/search-delete-while-cancel-button-clicked.html
               fast/forms/slider-delete-while-dragging-thumb.html
               media/audio-delete-while-slider-thumb-clicked.html
               media/audio-delete-while-step-button-clicked.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlSeekButtonElement::detach):
            New, call setCapturingMouseEventsNode if capturing mouse events.
        * rendering/MediaControlElements.h:
            Declare detach().

        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::detach):
            New, call setCapturingMouseEventsNode if capturing mouse events.

        * rendering/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::detach):
            New, call setCapturingMouseEventsNode if capturing mouse events.
        * rendering/TextControlInnerElements.h:
            Declare detach().

2009-07-09  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Dimitri Glazkov.

        Enter the Frame's context before creating new objects in setContextDebugId.

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

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setContextDebugId):

2009-07-09  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * WebCore.pro: Add new storage impl files to the build.

2009-07-08  Adam Barth  <abarth@webkit.org>

        Rubber stamped by Eric Seidel.

        [V8] Move DOM wrapper functions in V8Proxy to V8DOMWrapper
        https://bugs.webkit.org/show_bug.cgi?id=27107

        This patch is just renaming.  Code motion will occur next.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::getReceiverObject):
        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/V8Collection.h:
        (WebCore::getV8Object):
        (WebCore::getNamedPropertyOfCollection):
        (WebCore::nodeCollectionNamedPropertyGetter):
        (WebCore::getIndexedPropertyOfCollection):
        (WebCore::nodeCollectionIndexedPropertyGetter):
        (WebCore::nodeCollectionIndexedPropertyEnumerator):
        (WebCore::collectionIndexedPropertyEnumerator):
        (WebCore::collectionStringOrNullIndexedPropertyGetter):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::DOMData::handleWeakObject):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/V8GCController.cpp:
        (WebCore::enumerateDOMObjectMap):
        (WebCore::DOMObjectVisitor::visitDOMWrapper):
        (WebCore::GCPrologueVisitor::visitDOMWrapper):
        (WebCore::GCEpilogueVisitor::visitDOMWrapper):
        * bindings/v8/V8Helpers.cpp:
        (WebCore::wrapNPObject):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8DOMWrapper::convertSVGElementInstanceToV8Object):
        (WebCore::V8DOMWrapper::convertSVGObjectWithContextToV8Object):
        (WebCore::V8DOMWrapper::domObjectHasJSWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::getConstructor):
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8Proxy::retrieveWindow):
        (WebCore::V8Proxy::updateDocumentWrapperCache):
        (WebCore::V8Proxy::clearForNavigation):
        (WebCore::V8Proxy::installDOMWindow):
        (WebCore::setDOMExceptionHelper):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        (WebCore::V8DOMWrapper::domWrapperType):
        (WebCore::V8DOMWrapper::convertToNativeObjectImpl):
        (WebCore::V8DOMWrapper::convertToSVGPODTypeImpl):
        (WebCore::V8DOMWrapper::lookupDOMWrapper):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNodeHelper):
        (WebCore::V8DOMWrapper::wrapNativeNodeFilter):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::setDOMWrapper):
        (WebCore::V8DOMWrapper::maybeDOMWrapper):
        (WebCore::V8DOMWrapper::isDOMEventWrapper):
        (WebCore::V8DOMWrapper::isWrapperOfType):
        (WebCore::V8DOMWrapper::htmlElementType):
        (WebCore::V8DOMWrapper::svgElementType):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        (WebCore::V8DOMWrapper::convertDOMImplementationToV8Object):
        (WebCore::V8DOMWrapper::convertStyleSheetToV8Object):
        (WebCore::V8DOMWrapper::convertCSSValueToV8Object):
        (WebCore::V8DOMWrapper::convertCSSRuleToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        (WebCore::V8Proxy::bindJsObjectToWindow):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8DOMWrapper::convertDOMWrapperToNative):
        (WebCore::V8DOMWrapper::wrapCPointer):
        (WebCore::V8DOMWrapper::extractCPointer):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNode):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::convertToNativeObject):
        (WebCore::V8DOMWrapper::convertToNativeEvent):
        (WebCore::V8DOMWrapper::extractCPointerImpl):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8Proxy::constructDOMObject):
        (WebCore::toV8):
        * bindings/v8/V8SVGPODTypeWrapper.h:
        (WebCore::V8SVGPODTypeUtil::toSVGPODType):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::retrieve):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::GetConstructor):
        (WebCore::WorkerContextExecutionProxy::ToV8Object):
        (WebCore::WorkerContextExecutionProxy::EventToV8Object):
        (WebCore::WorkerContextExecutionProxy::toV8):
        * bindings/v8/custom/V8AttrCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toV8):
        (WebCore::toCanvasStyle):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ClientRectListCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomBinding.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::V8Custom::GetTargetFrame):
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        (WebCore::V8CustomSQLStatementCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        (WebCore::V8CustomSQLTransactionCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        (WebCore::V8CustomSQLTransactionErrorCallback::handleEvent):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::V8Custom::ClearTimeoutImpl):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::INDEXED_ACCESS_CHECK):
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::removeElement):
        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Custom::v8StorageNamedPropertyEnumerator):
        (WebCore::storageGetter):
        (WebCore::storageSetter):
        (WebCore::storageDeleter):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::SetTimeoutOrInterval):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-08  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        Make sure we can click outside the slider thumb and start dragging.
        https://bugs.webkit.org/show_bug.cgi?id=26229

        Previously we were assuming that if the thumb hasn't been clicked, we
        wouldn't issue any value change upon dragging.

        We need to handle the two different cases:
        - Clicked in the thumb, we need to make sure the cursor is always pointing
        the same slider thumb point.
        - Clicked outside, the cursor should always be pointing to the center of
        the thumb.

        For simplicity, we don't remember the original point of the mouse down,
        but a vector between that point and the thumb.

        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::SliderThumbElement):
        (WebCore::SliderThumbElement::defaultEventHandler):
        (WebCore::RenderSlider::mouseEventVectorToThumb): Utility function.
        * rendering/RenderSlider.h:

2009-07-08  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

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

        Don't display "loading" in the <video> controller when
        there is no src specified.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlStatusDisplayElement::update): The only
        way to find out if we have an element is currentSrc(). networkState()
        will always report LOADING according to the spec.

2009-07-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [V8] Move V8GCController functions to their own file
        https://bugs.webkit.org/show_bug.cgi?id=27102

        * bindings/v8/V8GCController.cpp: Added.
        * bindings/v8/V8GCController.h: Added.
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:

2009-07-08  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Split StorageArea and StorageNamespace into an interface and implementation.
        https://bugs.webkit.org/show_bug.cgi?id=27072

        I need to split StorageNamespace and StorageArea into an interface and
        implementation.  In a later patch, I'll implement a proxy interface
        that'll run inside the Chromium renderer process.

        Additionally, fix the alphabetical ordering of files I recently added
        in the project files.

        This is a continuation of other refactoring work:
        https://bugs.webkit.org/show_bug.cgi?id=25376

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::create):
        * storage/StorageArea.h:
        (WebCore::StorageArea::~StorageArea):
        * storage/StorageAreaImpl.cpp: Copied from WebCore/storage/StorageArea.cpp.
        (WebCore::StorageAreaImpl::create):
        (WebCore::StorageAreaImpl::~StorageAreaImpl):
        (WebCore::StorageAreaImpl::StorageAreaImpl):
        (WebCore::StorageAreaImpl::copy):
        (WebCore::StorageAreaImpl::length):
        (WebCore::StorageAreaImpl::key):
        (WebCore::StorageAreaImpl::getItem):
        (WebCore::StorageAreaImpl::setItem):
        (WebCore::StorageAreaImpl::removeItem):
        (WebCore::StorageAreaImpl::clear):
        (WebCore::StorageAreaImpl::contains):
        (WebCore::StorageAreaImpl::importItem):
        (WebCore::StorageAreaImpl::securityOrigin):
        (WebCore::StorageAreaImpl::close):
        (WebCore::StorageAreaImpl::blockUntilImportComplete):
        (WebCore::StorageAreaImpl::dispatchStorageEvent):
        * storage/StorageAreaImpl.h: Copied from WebCore/storage/StorageArea.h.
        * storage/StorageAreaSync.h:
        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::localStorageNamespace):
        (WebCore::StorageNamespace::sessionStorageNamespace):
        * storage/StorageNamespace.h:
        (WebCore::StorageNamespace::~StorageNamespace):
        * storage/StorageNamespaceImpl.cpp: Copied from WebCore/storage/StorageNamespace.cpp.
        (WebCore::StorageNamespaceImpl::localStorageNamespace):
        (WebCore::StorageNamespaceImpl::sessionStorageNamespace):
        (WebCore::StorageNamespaceImpl::StorageNamespaceImpl):
        (WebCore::StorageNamespaceImpl::~StorageNamespaceImpl):
        (WebCore::StorageNamespaceImpl::copy):
        (WebCore::StorageNamespaceImpl::storageArea):
        (WebCore::StorageNamespaceImpl::close):
        * storage/StorageNamespaceImpl.h: Copied from WebCore/storage/StorageNamespace.h.

2009-07-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [V8] Move garbage collector related functions from V8Proxy to V8GCController
        https://bugs.webkit.org/show_bug.cgi?id=26967

        This patch just moves the functions around in V8Proxy.  We'll actually
        move them to a separate file in another patch.

        * bindings/v8/NPV8Object.cpp:
        (freeV8NPObject):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::~ScheduledAction):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::gcProtectJSWrapper):
        (WebCore::ScriptController::gcUnprotectJSWrapper):
        * bindings/v8/ScriptInstance.cpp:
        (WebCore::V8ScriptInstance::clear):
        (WebCore::V8ScriptInstance::set):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::operator=):
        (WebCore::ScriptValue::clear):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::disposeListenerObject):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::~V8LazyEventListener):
        (WebCore::V8LazyEventListener::getListenerFunction):
        (WebCore::V8LazyEventListener::getWrappedListenerFunction):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::V8NodeFilterCondition):
        (WebCore::V8NodeFilterCondition::~V8NodeFilterCondition):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8GCController::registerGlobalHandle):
        (WebCore::V8GCController::unregisterGlobalHandle):
        (WebCore::V8GCController::gcProtect):
        (WebCore::V8GCController::gcUnprotect):
        (WebCore::V8Proxy::destroyGlobal):
        (WebCore::V8Proxy::updateDocumentWrapper):
        (WebCore::V8Proxy::clearDocumentWrapper):
        (WebCore::V8Proxy::disposeContextHandles):
        (WebCore::V8Proxy::initContextIfNeeded):
        * bindings/v8/V8Proxy.h:
        (WebCore::):
        (WebCore::GlobalHandleInfo::GlobalHandleInfo):
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):

2009-07-08  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.
        
        https://bugs.webkit.org/show_bug.cgi?id=26918
        
        Prevents injection of HTML Base tag.

        Tests: http/tests/security/xssAuditor/base-href-control-char.html
               http/tests/security/xssAuditor/base-href-null-char.html
               http/tests/security/xssAuditor/base-href-safe.html
               http/tests/security/xssAuditor/base-href-safe2.html
               http/tests/security/xssAuditor/base-href-scheme-relative.html
               http/tests/security/xssAuditor/base-href.html

        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::parseMappedAttribute):
        (WebCore::HTMLBaseElement::process): Modified to call XSSAuditor::canSetBaseElementURL
        to determine if it is safe to use base element URL.
        * html/HTMLBaseElement.h: Added field m_hrefAttrValue to store unparsed base element URL.
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canSetBaseElementURL):
        * page/XSSAuditor.h:

2009-07-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Upstream V8 npruntime bindings.

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

        * bindings/v8/npruntime.cpp: Upstreamed from src.chromium.org.
        (StringKey::operator==):
        (StringKey::StringKeyHash::hash):
        (StringKey::StringKeyHash::equal):
        (StringKeyHashTraits::constructDeletedValue):
        (StringKeyHashTraits::isDeletedValue):
        (getStringIdentifierMap):
        (getIntIdentifierMap):
        * bindings/v8/npruntime_impl.h: Upstreamed from src.chromium.org.
        * bindings/v8/npruntime_internal.h: Upstreamed from src.chromium.org.
        * bindings/v8/npruntime_priv.h: Upstreamed from src.chromium.org.

2009-07-08  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Fisher.

        Extending the PlatformFileHandle definition from PLATFORM(WIN) to
        PLATFORM(WIN_OS)

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

        * platform/FileSystem.h:

2009-07-08  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.
        
        https://bugs.webkit.org/show_bug.cgi?id=27071
        
        Resolves issue when HTTP parameters contain null- and  non-null-control- characters.

        Tests: http/tests/security/xssAuditor/anchor-url-dom-write-location-inline-event-null-char.html
               http/tests/security/xssAuditor/embed-tag-control-char.html
               http/tests/security/xssAuditor/embed-tag-null-char.html
               http/tests/security/xssAuditor/embed-tag.html
               http/tests/security/xssAuditor/link-onclick-control-char.html
               http/tests/security/xssAuditor/link-onclick-null-char.html
               http/tests/security/xssAuditor/object-embed-tag-control-char.html
               http/tests/security/xssAuditor/object-embed-tag-null-char.html
               http/tests/security/xssAuditor/object-embed-tag.html
               http/tests/security/xssAuditor/object-tag.html
               http/tests/security/xssAuditor/script-tag-post-control-char.html
               http/tests/security/xssAuditor/script-tag-post-null-char.html
               http/tests/security/xssAuditor/script-tag-with-source-control-char.html
               http/tests/security/xssAuditor/script-tag-with-source-null-char.html

        * page/XSSAuditor.cpp:
        (WebCore::isNonNullControlCharacter): Called by XSSAuditor::decodeURL.
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::decodeURL): Added parameters matchNullCharacters,
        and matchNonNullControlCharacters.
        (WebCore::XSSAuditor::findInRequest): Added parameters matchNullCharacters,
        and matchNonNullControlCharacters.
        * page/XSSAuditor.h:

2009-07-08  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add DerivesSourcesAllInOne.cpp to help with release windows compilation.
        https://bugs.webkit.org/show_bug.cgi?id=27093

        This is specific for v8, no change in behavior.

        * bindings/v8/DerivedSourcesAllInOne.cpp: Added.

2009-07-08  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

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

        Make sure the Media controller doesn't fade in for no reason.
        This is happening because a update() call to the controller
        panel may reset the opacity to 1.0, given that it reloads the
        style.

        We also add a different fade in and fade out time to soften
        the fade out effect.

        No test case because this depends on how the movie is loaded.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
        (WebCore::RenderMedia::updateControls):
        (WebCore::RenderMedia::updateControlVisibility): Simplify
        , and make sure we stop the timer if there is no animation
        to do.
        (WebCore::RenderMedia::opacityAnimationTimerFired): 
        * rendering/RenderMedia.h:

2009-07-08  David Kilzer  <ddkilzer@apple.com>

        Bug 27081: Wrap RunLoopTimerCF.cpp in PLATFORM(MAC) && HAVE(RUNLOOP_TIMER)

        <https://bugs.webkit.org/show_bug.cgi?id=27081>

        Reviewed by Timothy Hatcher.

        * platform/cf/RunLoopTimerCF.cpp: This code is only used on
        Mac OS X when HAVE(RUNLOOP_TIMER) is enabled, so wrap the code
        in that macro as well.

2009-07-08  Greg Bolsinga  <bolsinga@apple.com>

        Reviewed by Darin Adler.

        Add -[WebView _isProcessingUserGesture]
        https://bugs.webkit.org/show_bug.cgi?id=27084

        Rename FrameLoader::userGestureHint() to FrameLoader::isProcessingUserGesture()
        for clarity.

        * WebCore.base.exp: Add WebCore::FrameLoader::isProcessingUserGesture()
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::processingUserGesture):
        * loader/FrameLoader.cpp: 
        (WebCore::FrameLoader::requestFrame):
        (WebCore::FrameLoader::isProcessingUserGesture):
        * loader/FrameLoader.h:

2009-07-08  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed (an earlier version) by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=27090
        Remove lockBackForwardList argument from HTMLFormElement::submit()

        No change in behavior, so no tests.

        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::submit):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):
        * html/HTMLFormElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::scheduleFormSubmission):
        * loader/FrameLoader.h:
        Don't pass lockBackForwardList around when it's known to be false.

2009-07-08  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Adam Barth.

        Fix V8 idl codegen to use unique constant names
        <https://bugs.webkit.org/show_bug.cgi?id=27089>

        Embed the interface name in the global constant names so coagulating all
        the .cc files into one compile unit works with V8 bindings.

        Nothing added; Still compiles and pass tests.

        * bindings/scripts/CodeGeneratorV8.pm:

2009-07-08  Brent Fulgham  <bfulgham@webkit.org>

        Build fix: Add missing #includes for Windows (cURL) build.
        The <winsock2.h> and <windows.h> headers were not being
        included in Windows cURL builds.

        * platform/network/ResourceHandleInternal.h:
        * platform/network/curl/ResourceHandleManager.h:

2009-07-08  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Kilzer.

        WebKit needs a style linting tool
        https://bugs.webkit.org/show_bug.cgi?id=25884

        Fix bunch of style issues in WebCore/rendering.
        This patch is created to demonstrate cpplint.py.

        No testcase because it's just a style fixes.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::layout):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeEllipsisBox):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * rendering/MediaControlElements.h:
        * rendering/RenderArena.cpp:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::startDelayUpdateScrollInfo):
        (WebCore::RenderBlock::finishDelayUpdateScrollInfo):
        (WebCore::RenderBlock::updateScrollInfoAfterLayout):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::newLine):
        (WebCore::RenderBlock::floatBottom):
        (WebCore::RenderBlock::leftBottom):
        (WebCore::RenderBlock::rightBottom):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcReplacedWidthUsing):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::layoutLegend):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::FlexBoxIterator):
        (WebCore::FlexBoxIterator::reset):
        (WebCore::FlexBoxIterator::first):
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderFrameSet.cpp:
        (WebCore::borderStartEdgeColor):
        * rendering/RenderFrameSet.h:
        * rendering/RenderImage.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateVisibilityStatus):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::calculateRects):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::panScroll):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::updateMarqueeStyle):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::localCaretRect):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::adjustRectsForAspectRatio):
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::outerBorderBottom):
        * rendering/RenderTableCol.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::itemIsSeparator):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::supportsHover):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::supportsFocusRing):
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::SVGCharacterLayoutInfo::addStackContent):
        * rendering/SVGCharacterLayoutInfo.h:
        * rendering/TextControlInnerElements.h:
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):

2009-07-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Reduce complexity of lifetime management in DynamicNodeList caches
        <https://bugs.webkit.org/show_bug.cgi?id=27068>

        Switch the Cache object used by DynamicNodeList into a normal
        refcounted object rather than having a weird flag controlled
        refcounting system, where positive refcount did not automatically
        imply the cache object would actually still be live.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::DynamicNodeList):
        (WebCore::DynamicNodeList::~DynamicNodeList):
        (WebCore::DynamicNodeList::Caches::Caches):
        (WebCore::DynamicNodeList::Caches::create):
        * dom/DynamicNodeList.h:
        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        (WebCore::Node::getElementsByTagNameNS):
        (WebCore::Node::getElementsByName):
        (WebCore::Node::getElementsByClassName):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::NodeListsNodeData::isEmpty):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::NodeListsNodeData):

2009-07-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.
        
        -webkit-perspective should be a Length
        https://bugs.webkit.org/show_bug.cgi?id=27066
        
        -webkit-perspective should not take a magic valueless number, but should
        be a normal Length value which responds to zooming. Treat valueless numbers
        as pixels for backward compatibility.
        
        Test: transforms/3d/general/perspective-units.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2009-07-07  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

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

        We need to make sure that when we reattach, we also reattach
        the children in every MediaControlElement. Else we may end up
        having no remaining or elapsed time.

        We have to handle that, because we are using a special shadow
        tree in the DOM, and that we are ourselves handling
        attaching/detaching the renderer.

        The strategy here is to try to implement ::attach(), and try
        to reuse as much code as we can from the super class, including
        children attachement.

        Test: media/controls-after-reload.html

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::styleForElement): Code factoring.
        (WebCore::MediaControlElement::rendererIsNeeded): Code factoring.
        (WebCore::MediaControlElement::attach): Implement attach
        and call super class so that children are also attached.
        (WebCore::MediaControlElement::updateStyle): Use attach()
        (WebCore::MediaControlInputElement::styleForElement): Code factoring.
        (WebCore::MediaControlInputElement::rendererIsNeeded): Code factoring.
        (WebCore::MediaControlInputElement::attach): See above.
        (WebCore::MediaControlInputElement::updateStyle): Use attach()
        * rendering/MediaControlElements.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls): Directly run attach() on
        the m_panel, which is a root node for our shadow tree.

2009-07-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Repaint issue after layer drops out of composited mode.
        <https://bugs.webkit.org/show_bug.cgi?id=27022>

        RenderLayers cache repaint rects in the form of m_repaintRect and m_outlineBox,
        and expect these to stay valid from one style change to the next. These rects
        are relative to the repaint container, so if a layer stops being composited,
        we need to recompute them.
        
        Test: compositing/repaint/layer-repaint-rects.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeRepaintRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2009-07-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt and Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=26963
          <rdar://problem/7030998> Reproducible crash at
          FontCache::getFontData() when a custom font is used in a pseudo-style

        Test: fast/css/pseudo-cache-stale.html

        * dom/Element.cpp:
        (WebCore::Element::pseudoStyleCacheIsInvalid): Added. Given the old
        style and the new style, goes over cached pseudo-styles in the old
        style and re-resolves the same style types off the new style. If any of
        the new pseudo-styles is different from the currently cached
        corresponding style, returns true. Otherwise, returns false.
        (WebCore::Element::recalcStyle): Validate the pseudo-style cache before
        deciding to keep the existing style.
        * dom/Element.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::uncachedFirstLineStyle): Added this version that
        returns an uncached first-line style based off the given style.
        (WebCore::RenderObject::getUncachedPseudoStyle): Added the 'ownStyle'
        parameter.
        * rendering/RenderObject.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getPseudoStyleCache): Added. Returns the cached
        pseudo-styles in the passed-in vector.
        * rendering/style/RenderStyle.h:

2009-07-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=27042
          <rdar://problem/7010981> Incomplete painting of newly created floats

        Tests: fast/repaint/float-in-new-block-with-layout-delta.html
               fast/repaint/float-new-in-block.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren): If the child has never been
        laid out before, paint its overhanging floats in addition to itself.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatWithRect::FloatWithRect): Added and
        initialized a boolean everHadLayout member.
        * rendering/bidi.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Paint floats that have
        never been laid out before and did not move from (0, 0).

2009-07-07  Brady Eidson  <beidson@apple.com>

        Contributions from both Darin Adler and Brady Eidson.
        Reviewed by Darin Adler.

        <rdar://problem/7024039> REGRESSION (r42158): Back-forward navigation does not work correctly on nytimes.com

        In r42158 we lost some exclusions to making back/forward items for subframe navigations when a main frame
        navigation was still in progress.

        This patch makes things even better than it used to be by:
        - Locking back/forward history at the time the navigation is scheduled, not after the load has committed.
        - Locking back/forward history if *any* ancestor frame is still loading instead of just the main frame.

        Test: fast/loader/subframe-navigate-during-main-frame-load.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): Move out the history locking logic into a standalone function so it can be
          used from multiple sites.
        (WebCore::mustLockBackForwardList): Returns true if any ancestor frame is still loading.
        (WebCore::FrameLoader::scheduleLocationChange): Respect mustLockBackForwardList() in addition to the passed in
          lockBackForwardList flag.
        (WebCore::FrameLoader::scheduleFormSubmission): Ditto.

2009-07-07  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Upstream DOMObjectsInclude.h from src.chromium.org.

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

        * bindings/v8/DOMObjectsInclude.h: Added.

2009-07-07  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Relanding r45559, which was rolled back at r45574.

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

        * bindings/scripts/CodeGeneratorV8.pm: Updated a function name in auto-generated bindings.
        * bindings/v8/V8Binding.cpp: Moved from src.chromium.org.
        * bindings/v8/V8Binding.h: Contents moved from src.chromium.org.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getListenerFunction):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::handleConsoleMessage):
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::sourceName):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::handleConsoleMessage):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-07  Gregory Hughes  <gfhughesVO+webkit@gmail.com>

        Reviewed by Darin Adler.

        AX: Some webpages do not send AXLoadComplete
        https://bugs.webkit.org/show_bug.cgi?id=26995

        When sending the AXLayoutComplete notification it is possible
        that the AXObjectCache was cleared, resulting in no valid
        object to send the notification to. This fix ensures that an
        AX object is created and cached if one does not already exist.

        Not able to add a test because notifications get sent after the layout test is completed.

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

2009-07-06  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

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

        Make sure that the CSS properties letter-spacing, word-spacing,
        line-height, text-transform, text-indent, text-shadow,
        text-decoration and color do not affect the media element controls,
        that display text.

        Controls that display text are only present in when the theme
        MediaControllerThemeQT is being used.

        Test: media/controls-styling.html

        * css/mediaControlsQT.css:
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::updateStyle): Special case for
        text-decoration. text-decoration can't be overriden from CSS, because
        text-decoration is additive for historical reasons.

2009-07-07  Albert Wong  <ajwong@chromium.org>

        Not reviewed, Chromium build fix.

        Add in missing header fix syntax issue that crept into last patch.
        https://bugs.webkit.org/show_bug.cgi?id=27027

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintMediaFullscreenButton):

2009-07-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Make use of geometry information to decide which layers become composited.

        <rdar://problem/7011947>
        <https://bugs.webkit.org/show_bug.cgi?id=27021>
        
        In addition to looking at painting order, also, optionally, take layer
        overlap into account when deciding which RenderLayers need to be composited.

        No testcase because DRT doesn't dump which layers are composited.
        
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
        Removed the unused CompositingUpdate parameter, and just do an early return
        when there is no view.
        
        * rendering/RenderLayer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rendererContentChanged):
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
        (WebCore::RenderLayer::styleChanged):
        (WebCore::RenderLayer::mustOverlapCompositedLayers):
        (WebCore::RenderLayer::setMustOverlapCompositedLayers):
        Change "overlay" to "overlap" for consistency with the use of "overlap"
        elsewhere.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        compositingLayersNeedUpdate() renamed to compositingLayersNeedRebuild().
        
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        Tell the compositor that we started an accelerated animation or transition.
        
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::compositingLayersNeedRebuild):
        Renamed, since it's explicitly about changes in hierarchy now.
        
        (WebCore::RenderLayerCompositor::setCompositingConsultsOverlap):
        (WebCore::RenderLayerCompositor::compositingConsultsOverlap):
        New getter and setter for whether compositing should take overlap into account.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        Add m_compositingConsultsOverlap, re-order some member variables.
        
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingEnabledFlag):
        Whitespace cleanup and method rename.
        
        (WebCore::RenderLayerCompositor::setCompositingLayersNeedRebuild):
        Method and variable renaming.
        
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        Now we have to run through the layer hierarchy every time if looking
        at overlap, because changes in layout can now alter compositing behavior.
        We minimize work by tracking whether we actually need to change the layer
        hierarchy via needLayerRebuild.
        
        (WebCore::RenderLayerCompositor::updateBacking):
        3D transforms turn off overlap mode.
        
        (WebCore::RenderLayerCompositor::layerWasAdded):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        Method rename.
        
        (WebCore::RenderLayerCompositor::addToOverlapMap):
        (WebCore::RenderLayerCompositor::overlapsCompositedLayers):
        Utility methods to add a layer to the overlapMap (computing the absolute
        bounding box only if we haven't already done so), and testing the map
        entries.
        
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        If a layer would composite only because it comes after other compositing
        layers in the painting order, then consult the overlap map to determine whether
        it overlaps, and thus actually needs to composite.
        
        Add layers to the map when they must be composited.
        
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        Only do re-parenting work if the updateHierarchy flag is set.
        
        (WebCore::RenderLayerCompositor::didStartAcceleratedAnimation):
        When we start an accelerated transition or animation, we stop looking at
        overlap because we can no longer guarantee correct front-to-back ordering while the
        accelerated animation is running.

        (WebCore::RenderLayerCompositor::needsToBeComposited):
        Method renames.
        
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setMaximalOutlineSize):
        Add comment indicating that this could be optimized.

2009-07-14  Anton Muhin  <antonm@chromium.org>

        Reviewed by Darin Fisher.

        Speed up creation of V8 wrappers for DOM nodes.

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

        This patch doesn't require new tests as it a set of refactorings
        to speed up wrapper creation.  

        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/V8Proxy.h:

2009-07-07  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        [GTK] textarea height property works only if other property are defined
        https://bugs.webkit.org/show_bug.cgi?id=18984

        Let WebCore handle textarea's metrics instead of readjusting it RenderthemeGtk.

        Test: fast/forms/textarea-metrics.html

        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk.h:

2009-07-07  Ben Murdoch  <benm@google.com>

        Reviewed by Antti Koivisto.

        HTML5 Database becomes locked if a transaction is in progress when the page is refreshed.
        https://bugs.webkit.org/show_bug.cgi?id=25711

        Fix for https://bugs.webkit.org/show_bug.cgi?id=25711 where web
        storage databases could become locked until the browser is shut
        down if the page is refreshed whilst a transaction is in progress.

        Test: storage/database-lock-after-reload.html

        * storage/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::close): add code to inform the database thread we've closed the database.
        (WebCore::Database::performOpenAndVerify): add code to inform the database thread we've opened a database.
        * storage/Database.h:
        (WebCore::Database::opened): return true iff the underlying sqlite database has been opened but not closed.
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread): Before the database thread terminates, close any databases that ran transactions in this thread.
        (WebCore::DatabaseThread::recordDatabaseOpen): Records a database that executed a transaction in this thread.
        (WebCore::DatabaseThread::recordDatabaseClosed): Removes a database from the set of open databases.
        * storage/DatabaseThread.h:
        (WebCore::DatabaseThread::getThreadID): return the thread id for the database thread.

2009-07-07  Jiahua Huang  <jhuangjiahua@gmail.com>

        Reviewed by Jan Alonzo.

        [Gtk] Paste of rich text from firefox results garbled markup
        https://bugs.webkit.org/show_bug.cgi?id=26791

        Fix problem with UTF-16 clipboard pasted.

        * manual-tests/gtk/paste-richtext-from-firefox.html: Added.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::documentFragment):

2009-07-07  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Change 'Continue debug' shortcut from F5 to F8 for consistency with Firebug.

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

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

2009-07-06  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Maciej Stachowiak.

        Update RenderThemeChromiumMac for wkDrawMediaUIPart and wkDrawMediaSlider API
        change.

        Fix compile RenderThemeChromiumMac.mm due to API changes from r45572
        https://bugs.webkit.org/show_bug.cgi?id=27018

        This is mainly an API change update to fix the chromium compile.  It
        also has a small fix of a typo in RenderThemeMac.mm.

        Compilation against the head of chromium trunk passed.  Since this is
        a compile fix, that should be sufficient.

        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::):
        (WebCore::RenderThemeChromiumMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):
        * rendering/RenderThemeMac.mm:
        (WebCore::):

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        Bug 27002: Build fix when DASHBOARD_SUPPORT is disabled with -Wunused-parameter

        <https://bugs.webkit.org/show_bug.cgi?id=27002>

        Reviewed by Geoff Garen.

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::prepareGradientForDashboard):
        Mark gradient as an unused parameter when DASHBOARD_SUPPORT is
        disabled.

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        Bug 27001: Fix improper use of PassRefPtr<Node> to RefPtr<Node>

        <https://bugs.webkit.org/show_bug.cgi?id=27001>

        Reviewed by Geoff Garen.

        PassRefPtr<> should only be used for arguments to functions that
        take ownership of the object, or as return values from functions
        that relinquish ownership of the object.

        * editing/Editor.cpp:
        (WebCore::Editor::increaseSelectionListLevelOrdered): Changed
        stack-allocated PassRefPtr<Node> to RefPtr<Node> and call
        release() on returned object.
        (WebCore::Editor::increaseSelectionListLevelUnordered): Ditto.

2009-07-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7035474> Make new media controller UI default on SnowLeopard

        * rendering/RenderThemeMac.mm:
        (WebCore::mediaControllerTheme):
            New media controller UI is enabled by default on SnowLeopard.

2009-07-06  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        Roll out r45559 to fix Chromium canary.

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

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp: Removed.
        * bindings/v8/V8Binding.h:
        (WebCore::toInt32):
        (WebCore::toWebCoreString):
        (WebCore::fromWebCoreString):
        (WebCore::toWebCoreStringWithNullCheck):
        (WebCore::isUndefinedOrNull):
        (WebCore::v8Boolean):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getListenerFunction):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::handleConsoleMessage):
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::sourceName):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::handleConsoleMessage):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7008093> Media controller can’t be used to scrub when movie is 
        narrow — track is too narrow

        Do not show media controller time display elements when the a movie is too narrow.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
            The 'state' parameter to wkDrawMediaUIPart is now an unsigned bitfield.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement):
            Give current time and time remaining controls a common base class.
        (WebCore::MediaControlTimeDisplayElement::setVisible):
            New method, hide and show the element.
        * rendering/MediaControlElements.h:

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
            Initialize m_previousVisible.
        (WebCore::RenderMedia::layout):
            Show/hide the time display elements as the movie width changes.
        (WebCore::RenderMedia::createCurrentTimeDisplay):
        (WebCore::RenderMedia::createTimeRemainingDisplay):
            Base class is now MediaControlTimeDisplayElement, not MediaControlElement.
        (WebCore::RenderMedia::shouldShowTimeDisplayControls):
            New, decide if time display elements should be visible or not.
        * rendering/RenderMedia.h:

        * rendering/RenderThemeMac.mm:
        (WebCore::):
        (WebCore::RenderThemeMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeMac::paintMediaMuteButton):
        (WebCore::RenderThemeMac::paintMediaPlayButton):
        (WebCore::RenderThemeMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaSliderThumb):
        (WebCore::RenderThemeMac::paintMediaRewindButton):
        (WebCore::RenderThemeMac::paintMediaReturnToRealtimeButton):
        (WebCore::RenderThemeMac::paintMediaControlsBackground):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):
            The 'state' parameter to wkDrawMediaUIPart is now an unsigned bitfield.

2009-07-06  David Kilzer  <ddkilzer@apple.com>

        Bug 27000: Minor clean up to runtime_root.{cpp|h}

        <https://bugs.webkit.org/show_bug.cgi?id=27000>

        Reviewed by Geoff Garen.

        * bridge/runtime_root.cpp: Added blank line between license and
        the first #include statement.
        * bridge/runtime_root.h: Added comment to #endif.

2009-07-06  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Maciej Stachowiak.

        generalize the special height treatment for SVG (to be re-used for ruby):
            renamed InlineBox::m_isSVG to m_hasVirtualHeight
            renamed InlineBox::isSVG() to hasVirtualHeight()
            renamed InlineBox::setIsSVG() to setHasVirtualHeight()

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::height):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::isText):
        (WebCore::InlineBox::setIsText):
        (WebCore::InlineBox::isSVGRootInlineBox):
        (WebCore::InlineBox::hasVirtualHeight):
        (WebCore::InlineBox::setHasVirtualHeight):
        (WebCore::InlineBox::virtualHeight):
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createFlowBox):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createTextBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createRootBox):
        * rendering/SVGInlineFlowBox.h:
        (WebCore::SVGInlineFlowBox::virtualHeight):
        * rendering/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::virtualHeight):
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::virtualHeight):

2009-07-06  Alice Liu  <alice.liu@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(r45285): focus rings are black on windows safari
        https://bugs.webkit.org/show_bug.cgi?id=26821
        <rdar://problem/7018252>

        Add a mechanism for setting a custom focus ring color, and relocate the 
        determination of focus ring color to base class RenderTheme.

        No new tests.  Already-existing tests run in pixel mode would have caught this regression

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue): Move the responsibility
        of determining focus color to base class RenderTheme.
        * rendering/RenderTheme.cpp:
        (WebCore::customFocusRingColor): Added static local.
        (WebCore::RenderTheme::setCustomFocusRingColor): Added
        (WebCore::RenderTheme::focusRingColor): Use custom color over platform color.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformFocusRingColor): default implementation, black color
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderTheme::themeForPage): Circumstances that lead to returning the RenderThemeWin
        are the same under which we want to use the focus ring color from SafariTheme.
        (WebCore::RenderThemeSafari::platformFocusRingColor): Renamed from focusRingColor
        * rendering/RenderThemeSafari.h:

        Renaming focusRingColor to platformFocusRingColor in these files:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::platformFocusRingColor):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::platformFocusRingColor):
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformFocusRingColor):

        Cleanup leftover from removal of WebCore::Color in r45285 in these files:
        * WebCore.order:
        * platform/graphics/Color.h:

2009-07-06  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by David Hyatt.

        Bug 15135: REGRESSION (r19843-r19850): Changing a flexbox's
        contents makes its container scroll to the top
        https://bugs.webkit.org/show_bug.cgi?id=15135

        Delay updateing scroll bar of descendants of flexbox until their
        positions are determined.  In this way we can prevent descendants
        of flexible boxes from changing positions of their scrollbars
        using tentative positions.

        Test: fast/flexbox/repaint-scrollbar.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::startDelayUpdateScrollInfo):
        (WebCore::RenderBlock::finishDelayUpdateScrollInfo):
        (WebCore::RenderBlock::updateScrollInfoAfterLayout):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):

2009-07-06  Hironori Bono  <hbono@chromium.org>

        Reviewed by Maciej Stachowiak.

        Make unconfirmed IME text affect textarea's value.
        This matches input and contentEditable elements as well
        IE and Firefox.

        This fixes https://bugs.webkit.org/show_bug.cgi?id=25061.

        Input elements would go down this code path because it
        would always get a null compositionNode from frame->editor().
        Special casing compositionNodes is wrong because we explicitly
        want unconfirmed IME input in the textarea's value (assuming we
        want to match IE and Firefox here).

        This change is originally created by Ojan Vafai <ojan@chromium.org> and
        I just changed its manual tests with an automated test on his behalf.

        Test: platform/mac/editing/input/text-control-ime-input.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::text):
        (WebCore::RenderTextControl::textWithHardLineBreaks):

2009-07-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Peterson.

        Add the ability for wheel events to latch to a node.
        
        * WebCore.base.exp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::wheelEvent):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2009-07-06  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a bunch of layout test crahses in Chromium caused by a bad usage of DEFINE_STATIC_LOCAL.

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

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8ValueToWebCoreString): Use a regular static declaration instead of DEFINE_STATIC_LOCAL.

2009-07-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: suggest global properties based on async evaluation.

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

        Before this change, empty string was evaluated to the global object
        (or scope chain object) synchronously. This is now fixed and global
        object is evaluated using the same control flow.

        * inspector/front-end/Console.js:
        (WebInspector.Console.prototype.completions):
        (WebInspector.Console.prototype._evalInInspectedWindow):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._variablesInScope):

2009-07-06  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        Fix crash when indenting in an empty table cell.
        https://bugs.webkit.org/show_bug.cgi?id=26872

        The crash is that we would call splitTreeToNode where the node
        and the nodeToSplitTo were the same node.

        Test: editing/execCommand/indent-empty-table-cell.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::splitTreeToNode):
        Added an assert in that node and nodeToSplitTo
        are different nodes to make this assumption explicit.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::isAtUnsplittableElement):
        (WebCore::IndentOutdentCommand::indentRegion):
        * editing/IndentOutdentCommand.h:

2009-07-06  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Upstream V8Binding and update some function names.

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

        * bindings/scripts/CodeGeneratorV8.pm: Update function names in auto-generated files.
        * bindings/v8/V8Binding.cpp: Upstreamed from src.chromium.org.
        * bindings/v8/V8Binding.h: Upstreamed from src.chromium.org.
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::getListenerFunction):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::handleConsoleMessage):
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::sourceName):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::handleConsoleMessage):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::removeElement):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::SetTimeoutOrInterval):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-07-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        Use soup's content sniffing
        https://bugs.webkit.org/show_bug.cgi?id=26982

        Drop our hackish content sniffing code, and use the new libsoup
        feature to do that job for us.

        Testing this is in a cross-platform way is not obvious or possible
        while we are using platform-specific code for sniffing.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):
        (WebCore::contentSniffedCallback):
        (WebCore::gotChunkCallback):
        (WebCore::ResourceHandle::startHttp):

2009-07-05  Antonio Gomes  <antonio.gomes@openbossa.org>

        Reviewed by Darin Adler.

        REGRESSION (r40499): fast/dom/cssTarget-crash.html fails
        https://bugs.webkit.org/show_bug.cgi?id=20342

        Re-added code removed by commit r40499.
        Without this, both Qt and Mac were crashing while running the test.

        Note that this does not entirely fix the bug. It fixes the WebCore
        crash, but the test no longer seems to work due to loader changes.
        So this patch does not reenable the test. The test probably has to
        be rewritten.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removedFromDocument): Re-added code to
        set the CSS target of the document to 0.

2009-07-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

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

        When one transition finishes slightly before another the longer
        one will fire a second time. This is because the second
        ImplicitAnmation object is culled too early, before its final
        RenderStyle is in place. This is done by cleanupFinishedAnimations()
        so I got rid of that method completely and now cleanup each
        transition or animation at the point where I am setting the final
        style, or when I detect that the transition or animation has been
        terminated early (which happens when you remove it from the style).

        Test: transitions/extra-transition.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        * page/animation/CompositeAnimation.h:

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::getTimeToNextEvent):
        Avoid a divide by zero if m_animation->duration() is zero, which can happen
        if the duration is changed to zero while the animation is running.

2009-07-05  Simon Fraser  <simon.fraser@apple.com>

        Revert the previous commit because it broke the
        animations/transition-and-animation-1.html
        testcase.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::getTimeToNextEvent):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::cleanupFinishedAnimations):
        * page/animation/CompositeAnimation.h:

2009-07-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

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

        When one transition finishes slightly before another the longer
        one will fire a second time. This is because the second 
        ImplicitAnmation object is culled too early, before its final
        RenderStyle is in place. This is done by cleanupFinishedAnimations()
        so I got rid of that method completely and now cleanup each 
        transition or animation at the point where I am setting the final
        style, or when I detect that the transition or animation has been
        terminated early (which happens when you remove it from the style).

        Test: transitions/extra-transition.html

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        * page/animation/CompositeAnimation.h:

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::getTimeToNextEvent):
        Avoid a divide by zero if m_animation->duration() is zero, which can happen
        if the duration is changed to zero while the animation is running.

2009-07-05  Lars Knoll  <lars.knoll@nokia.com>

        Reviewed by Maciej Stachowiak.

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

        Fix run-time crashes in JavaScriptCore with the Metrowerks compiler on Symbian.

        The Metrowerks compiler on the Symbian platform moves the globally
        defined Hashtables into read-only memory, despite one of the members
        being mutable. This causes crashes at run-time due to write access to
        read-only memory.

        Avoid the use of const with this compiler by introducing the
        JSC_CONST_HASHTABLE macro.

        Based on idea by Norbert Leser.

        * bindings/scripts/CodeGeneratorJS.pm: Use JSC_CONST_HASHTABLE for hash tables
        define in the bindings.

2009-07-05  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Maciej Stachowiak.

        Bug 26897 - Dynamic SVG images do not display correctly
        https://bugs.webkit.org/show_bug.cgi?id=26897

        Use repaint() to fix a rendering problem with a SVG image embedded in xhtml.

        Test: svg/custom/createImageElement2.xhtml

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):

2009-07-05  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26960
        [Gtk] caret offset not updated when selecting text

        Report the caret offset from the end of the selection so it works
        correctly for multi-char selections too (ie, anything that is not
        the zero width caret).

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_caret_offset):

2009-07-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed link fix for Qt.

        Fix Qt link error by adding two new localized strings

        In r45474 two new strings got added to LocalizedStrings.h add
        the definition of them to Qt.

        * platform/qt/Localizations.cpp:
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):

2009-07-03  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r44670-r44680): Typing is suprisingly slow in password field on reddit.com
        https://bugs.webkit.org/show_bug.cgi?id=26959
        rdar://problem/7029882

        The code to handle iteration boundaries was malfunctioning when the boundary was
        at the edge of a shadow tree. This happens all the time with <input> elements.

        It's not immediately obvious how to make a regression test for this since the
        symptom was a performance problem, not incorrect behavior. I'll add a test if I
        figure out a way to make one.

        * editing/TextIterator.cpp:
        (WebCore::parentCrossingShadowBoundaries): Renamed from parentOrShadowParent.
        (WebCore::depthCrossingShadowBoundaries): Updated for name change.
        (WebCore::nextInPreOrderCrossingShadowBoundaries): Added.
        (WebCore::previousInPostOrderCrossingShadowBoundaries): Added.
        (WebCore::setUpFullyClippedStack): Updated for name change.
        (WebCore::TextIterator::TextIterator): Updated for name change. Use
        nextInPreOrderCrossingShadowBoundaries instead of Range::pastLastNode to fix the bug.
        (WebCore::TextIterator::advance): Updated for name change.
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        Tweaked formatting.
        (WebCore::SimplifiedBackwardsTextIterator::advance): Ditto. Changed code that
        initializes m_pastStartNode to use previousInPostOrderCrossingShadowBoundaries.
        (WebCore::SimplifiedBackwardsTextIterator::handleNonTextNode): Tweaked formatting.
        (WebCore::SimplifiedBackwardsTextIterator::exitNode): Ditto.

2009-07-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Background audio stops playing when JS GC runs
        https://bugs.webkit.org/show_bug.cgi?id=26956
        
        Ensure we keep the Audio object around while it is playing, so that it
        doesn't get collected.
        
        Not testable because there's no way to know whether the audio keeps
        playing without holding a reference to it.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::isObservableThroughDOM):

2009-07-02  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26814
        [Gtk] Caret-moved events are not issued for the correct offset
        when text is selected forward

        Report the caret offset from the end of the selection, otherwise
        we'll report the same offset when moving the caret while
        modififying the selection (eg, with Shift Right).

        * editing/gtk/SelectionControllerGtk.cpp:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):

2009-07-02  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26815
        [Gtk] text-selection-changed events are not issued for the correct
        object when the selection spans multiple objects

        Get the focused node from the end of the selection, not the start,
        so we can detect when we cross object boundaries.

        * editing/gtk/SelectionControllerGtk.cpp:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

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

        Fix the media controls hit tests. They may lose click events.

        Test cases already covered in the video-controls-zoomed tests.

        Don't trust wkHitTestMediaUIPart for the tests. We are accurate enough.

        * rendering/RenderThemeMac.h: Remove hitTestMediaControlPart.
        * rendering/RenderThemeMac.mm: Remove hitTestMediaControlPart.

2009-07-02  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by Eric Seidel.

        RenderBlock and RenderInline have confusingly named object creation methods:
        RenderBlock::createRootBox/createRootInlineBox
        RenderInline::createFlowBox/createInlineFlowBox
        where the 2nd method in both cases just calls the first and then appends the created object.
        I therefore renamed those methods to something IMHO more informative:
        
        createRootBox()         -> createRootInlineBox()
        createRootInlineBox()   -> createAndAppendRootInlineBox();
        createFlowBox()         -> createInlineFlowBox();
        createInlineFlowBox()   -> createAndAppendInlineFlowBox();

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

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createRootInlineBox):
        (WebCore::RenderBlock::createAndAppendRootInlineBox):
        * rendering/RenderBlock.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::createInlineFlowBox):
        (WebCore::RenderInline::createAndAppendInlineFlowBox):
        * rendering/RenderInline.h:
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineFlowBox):
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createRootInlineBox):
        * rendering/RenderSVGText.h:
        * rendering/bidi.cpp:
        (WebCore::createInlineBoxForRenderer):

2009-07-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Fix typo in the resource panel enabler caption.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):

2009-07-02  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Adam Roben.

        [Win] HTML5 Drag and drop, dragend is not fired when pressing Esc
        https://bugs.webkit.org/show_bug.cgi?id=26699

        * manual-tests/drag-escape.html: Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragSourceEndedAt):

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser. 
        
        https://bugs.webkit.org/show_bug.cgi?id=26944

        Make sure we support full page zoom in video controls.

        This is tracked by a the video-controls-zoom test case.

        * css/mediaControlsQT.css: Make sure we don't have any inherited margin.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::updateStyle): Propagate the style to the innertext.
        * rendering/RenderThemeMac.mm: Adjust the painting rect.
        (WebCore::getUnzoomedRectAndAdjustCurrentContext):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Fix the Gtk build after r45474. The localized strings should
        have been added there.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

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

        Media controller is rendered badly at http://www.mozilla.com/en-US/firefox/video/firefox-3.5.html

        We fix two things:
        - We use px instead of em, because px is used everywhere else
        and because 0.09em hit the font size limit.
        - We use -webkit-box instead of inline-block because in strict mode
        inline-block has a different behavior.

        Test: media/controls-strict.html

        * css/mediaControlsQT.css:

2009-07-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        TextIterator should use hasOverflowClip when checking for overflow instead of looking at the style.
        https://bugs.webkit.org/show_bug.cgi?id=26942

        * editing/TextIterator.cpp:
        (WebCore::fullyClipsContents):

2009-07-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Fix for <rdar://problem/5230700>
        Remove local .xhtml file workaround

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit): Work around is no longer necessary.

2009-07-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Sort, add functions used by WebKit.
        
        * WebCore.base.exp:

2009-07-02  Brady Eidson  <beidson@apple.com>

        Rubberstamped by Sam Weinig.

        More of <rdar://problem/6969425> Safari 4.0 doesn't recognize text/plain files if their extension is unknown.

        * platform/network/mac/WebCoreURLResponse.mm:
        (webNSURLResponseMIMEType): Give Tiger a chance to query the UTI machinery.

2009-07-02  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium Linux: fix complex text rendering with line break characters.

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

        If the CSS white-space property is inhibiting line breaking, we might
        find end-of-line characters rendered via the complex text path. Fonts
        don't provide glyphs for these code points so, if we find one, we
        simulate the space glyph being interposed in this case.  Because the
        input is variable-length per code point, we walk the input in step
        with the output.

        Covered by:
            LayoutTests/fast/text/international/bidi-linebreak-002.html
            LayoutTests/fast/text/international/bidi-linebreak-003.html
            LayoutTests/fast/text/international/hindi-whitespace.html

        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::stringToGlyphs):

2009-07-02  Victor Wang  <victorw@chromium.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=26521
        Expose file size to chromium.

        Implement getFileSize() for Chromium.

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::getFileSize):

2009-07-02  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        * bindings/v8/V8SVGPODTypeWrapper.h: Lost a space in nested template argument list.

2009-07-02  Simon Fraser  <simon.fraser@apple.com>

        Build fix: add missing #include.

        * platform/mac/ThemeMac.mm:

2009-07-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/7028682> ThemeMac::paintRadio() throws Obj-C exceptions when zoomed

        Add BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS guards around code
        that can possibly throw Objective-C exceptions when drawing Mac form controls.

        * platform/mac/ThemeMac.mm:
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintButton):
        (WebCore::ThemeMac::inflateControlPaintRect):

2009-07-02  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Upstream V8SVGPODTypeWrapper.

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

        * bindings/scripts/CodeGeneratorV8.pm: Update function being renamed in V8SVGPODTypeWrapper.h.
        * bindings/v8/V8SVGPODTypeWrapper.h: Upstreamed from src.chromium.org.

2009-07-02  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Adds an abstraction layer between the DB classes and the file
        system, which allows us to add our own logic for storing, opening,
        deleting, etc. databases.

        The patch was tested using the tests in WebCore/storage.

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

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open): Delegating the job of opening DB files to SQLiteFileSystem to allow use of custom VFSs.
        * platform/sql/SQLiteFileSystem.cpp: Added.
        * platform/sql/SQLiteFileSystem.h: Added.
        * platform/win/FileSystemWin.cpp:
        (WebCore::directoryName): Implemented.
        * storage/Database.cpp:
        (WebCore::Database::databaseSize): The code that returns the size of a DB file moved to SQLiteFileSystem.
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::DatabaseTracker): Added the ability to register a custom SQLite VFS.
        (WebCore::DatabaseTracker::trackerDatabasePath): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::openTrackerDatabase): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::originPath): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::fullPathForDatabase): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::usageForDatabase): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::deleteOrigin): DB file-related operations moved to SQLiteFileSystem.
        (WebCore::DatabaseTracker::deleteDatabaseFile): DB file-related operations moved to SQLiteFileSystem.
        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::diskUsage): DB file-related operations moved to SQLiteFileSystem.

2009-07-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Always clip replaced elements to border radii.
        https://bugs.webkit.org/show_bug.cgi?id=26933

        Make sure to always clip replaced elements to border radii, even when overflow is visible.
        Stop defaulting those elements to overflow:hidden in the UA sheet, since it is now no longer
        necessary.

        Covered by existing tests (since the UA default changing keeps the behavior exactly the same).

        * css/html.css:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint):

2009-07-02  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Simon Fraser.

        convertFromScrollbarToContainingView and friends should be in ScrollView
        https://bugs.webkit.org/show_bug.cgi?id=26929

        This is breaking Chromium's build because PopupMenuChromium inherits
        from ScrollView, but these functions are pure virtual in it.  I could
        put it directly in PopupMenuChromium, but that seems a bit silly since
        the functions are fairly generic.

        Passes existing layout tests.

        * page/FrameView.cpp:  Remove the 4 functions Hyatt just added
        (IntRect WebCore::FrameView::convertFromScrollbarToContainingView):
        (IntRect WebCore::FrameView::convertFromContainingViewToScrollBar):
        (IntPoint WebCore::FrameView::convertFromScrollbarToContainingView):
        (IntPoint WebCore::FrameView::convertFromContainingViewToScrollBar):
        * page/FrameView.h: ditto
        * platform/ScrollView.cpp:  Move the 4 functions from FrameView here
        (IntRect WebCore::ScrollView::convertFromScrollbarToContainingView):
        (IntRect WebCore::ScrollView::convertFromContainingViewToScrollBar):
        (IntPoint WebCore::ScrollView::convertFromScrollbarToContainingView):
        (IntPoint WebCore::ScrollView::convertFromContainingViewToScrollBar):
        * platform/ScrollView.h: ditto

2009-07-02  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Darin Fisher.

        Fix https://bugs.webkit.org/show_bug.cgi?id=26088 - TransparencyWin 
        doesn't handle errors well at all; revise it to fail silently 
        (drawing nothing), and bulletproof FontChromiumWin to handle the
        failure accordingly.

        Tests: fast/text/text-large-negative-letter-spacing-with-opacity.html
               fast/text/text-letter-spacing.html

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::initializeForGDI):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareFontPainter::~TransparencyAwareFontPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::TransparencyAwareGlyphPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::~TransparencyAwareGlyphPainter):
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::TransparencyWin):
        (WebCore::TransparencyWin::setupLayerForNoLayer):
        (WebCore::TransparencyWin::setupLayerForOpaqueCompositeLayer):
        (WebCore::TransparencyWin::setupLayerForWhiteLayer):
        (WebCore::TransparencyWin::setupTransformForKeepTransform):
        (WebCore::TransparencyWin::setupTransformForScaleTransform):
        (WebCore::TransparencyWin::initializeNewContext):
        (WebCore::TransparencyWin::compositeOpaqueComposite):
        (WebCore::TransparencyWin::compositeTextComposite):
        (WebCore::TransparencyWin::makeLayerOpaque):
        * platform/graphics/chromium/TransparencyWin.h:
        (WebCore::TransparencyWin::platformContext):

2009-07-02  Eric Carlson  <eric.carlson@apple.com>

        Change #import to #include to fix non-ObjC builds.

        * rendering/MediaControlElements.cpp:

2009-07-02  Anders Carlsson  <andersca@apple.com>

        Build fix.
        
        * platform/network/mac/WebCoreURLResponse.mm:
        (mimeTypeFromUTITree):

2009-07-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Fix for bug 22119, clicks in the scrollbars of transformed content don't work.  Add new
        conversion methods for going across parent/child widget boundaries that can be implemented
        by the FrameView and ScrollbarClient to be transform-aware.

        Test cases added in platform/mac/fast/forms and platform/mac/fast/overflow.

        * WebCore.base.exp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::convertFromScrollbarToContainingView):
        (WebCore::FrameView::convertFromContainingViewToScrollbar):
        (WebCore::FrameView::convertFromRenderer):
        (WebCore::FrameView::convertToRenderer):
        (WebCore::FrameView::convertToContainingView):
        (WebCore::FrameView::convertFromContainingView):
        * page/FrameView.h:
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::convertToContainingView):
        (WebCore::Scrollbar::convertFromContainingView):
        * platform/Scrollbar.h:
        * platform/ScrollbarClient.h:
        (WebCore::ScrollbarClient::convertFromScrollbarToContainingView):
        (WebCore::ScrollbarClient::convertFromContainingViewToScrollbar):
        * platform/Widget.cpp:
        (WebCore::Widget::convertFromContainingWindow):
        (WebCore::Widget::convertToContainingWindow):
        (WebCore::Widget::convertFromRootToContainingWindow):
        (WebCore::Widget::convertFromContainingWindowToRoot):
        (WebCore::Widget::convertToContainingView):
        (WebCore::Widget::convertFromContainingView):
        * platform/Widget.h:
        * platform/graphics/IntPoint.h:
        (WebCore::IntPoint::move):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::convertFromRootToContainingWindow):
        (WebCore::Widget::convertFromContainingWindowToRoot):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isPointInOverflowControl):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::convertFromScrollbarToContainingView):
        (WebCore::RenderDataGrid::convertFromContainingViewToScrollbar):
        * rendering/RenderDataGrid.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::convertFromScrollbarToContainingView):
        (WebCore::RenderLayer::convertFromContainingViewToScrollbar):
        (WebCore::RenderLayer::scrollbarOffset):
        (WebCore::RenderLayer::hitTestOverflowControls):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isPointInOverflowControl):
        (WebCore::RenderListBox::convertFromScrollbarToContainingView):
        (WebCore::RenderListBox::convertFromContainingViewToScrollbar):
        * rendering/RenderListBox.h:

2009-07-02  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt and Simon Fraser.

        - fix <rdar://problem/6933052> SPOD playing video in a div with a box
          shadow

        Test: fast/box-shadow/transform-fringing.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow): Clip out the
        box even if it has an opaque background, but in that case, inset the
        clip path by 1 pixel, to avoid antialiasing artifacts.
        Do not inset the clip rect by 1 pixel if the CTM is purely a
        translation.
        Move the shadow-casting path away in the non-rounded-rect case (it
        was already being done in the rounded-rect case), to avoid a black
        fringe when the CTM is not purely a translation.

2009-07-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6969425> Safari 4.0 doesn't recognize text/plain files if their extension is unknown.

        Walk the CoreTypes UTI tree for extensions with unknown MIME types, using the first MIME type found.

        For many types of text files (such as source code files) this ends up being text/plain.

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Tweak the logging output.

        * platform/network/mac/WebCoreURLResponse.h:
        * platform/network/mac/WebCoreURLResponse.mm:
        (mimeTypeFromUTITree): 
        (webNSURLResponseMIMEType): Use mimeTypeFromUTITree() to find a UTI-based MIME type for this file's extension.
        (-[NSURLResponse _webcore_reportedMIMEType]): Return the actual MIME type that CFNetwork gave us.

2009-07-02  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6518119>

        Add a rewind button and hide the timeline for live broadcasts when
        in MediaUI mode.

        * css/CSSPrimitiveValueMappings.h: 
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Add the new pseudo element.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h: 

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Ditto.

        * css/CSSValueKeywords.in: Ditto.
        * css/mediaControls.css: Ditto.
        * css/mediaControlsQT.css: Ditto.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::rewind): New.
        (WebCore::HTMLMediaElement::returnToRealTime): New.
        (WebCore::HTMLMediaElement::isStreaming): New.
        * html/HTMLMediaElement.h:

        * page/mac/WebCoreViewFactory.h: Declare mediaElementLoadingStateText and mediaElementLiveBroadcastStateText.

        * platform/LocalizedStrings.h: Add localized media state messages.

        * platform/ThemeTypes.h: Add the new pseudo element.

        * platform/mac/LocalizedStringsMac.mm: 
        (WebCore::mediaElementLoadingStateText): Add localized media state.
        (WebCore::mediaElementLiveBroadcastStateText): Ditto.

        * platform/mac/WebCoreSystemInterface.h: Change BOOL param wkDrawMediaUIPart to an int to support
           multiple states.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

        * rendering/MediaControlElements.cpp: 
        (WebCore::MediaControlElement::MediaControlElement): Deal with new elements.
        (WebCore::MediaControlElement::attachToParent): Ditto.
        (WebCore::MediaControlElement::update): Ditto.
        (WebCore::MediaControlElement::updateStyle): Ditto.
        (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement): Ditto.
        (WebCore::MediaControlTimelineContainerElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement): Ditto.
        (WebCore::MediaControlStatusDisplayElement::update): Ditto.
        (WebCore::MediaControlStatusDisplayElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlInputElement::MediaControlInputElement): Ditto.
        (WebCore::MediaControlInputElement::attachToParent): Ditto.
        (WebCore::MediaControlInputElement::updateStyle): Ditto.
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): Ditto.
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlTimelineElement::defaultEventHandler): Ditto.
        (WebCore::MediaControlTimelineElement::update): Ditto.
        (WebCore::MediaControlFullscreenButtonElement::rendererIsNeeded): Ditto.
        * rendering/MediaControlElements.h: Ditto.

        * rendering/RenderMedia.cpp: 
        (WebCore::RenderMedia::styleDidChange): Deal with the new elements.
        (WebCore::RenderMedia::createPanel): Ditto.
        (WebCore::RenderMedia::createRewindButton): Ditto.
        (WebCore::RenderMedia::createReturnToRealtimeButton): Ditto.
        (WebCore::RenderMedia::createStatusDisplay): Ditto.
        (WebCore::RenderMedia::createTimelineContainer): Ditto.
        (WebCore::RenderMedia::createCurrentTimeDisplay): Ditto.
        (WebCore::RenderMedia::createTimeRemainingDisplay): Ditto.
        (WebCore::RenderMedia::updateControls): Ditto.
        (WebCore::RenderMedia::forwardEvent): Ditto.
        * rendering/RenderMedia.h:

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint): Deal with the new elements.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMediaRewindButton): Deal with the new elements.
        (WebCore::RenderTheme::paintMediaReturnToRealtimeButton): Ditto.
        (WebCore::RenderTheme::paintMediaControlsBackground): Ditto.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaRewindButton): Deal with the new elements.
        (WebCore::RenderThemeMac::paintMediaReturnToRealtimeButton): Ditto.
        (WebCore::RenderThemeMac::paintMediaControlsBackground): Ditto.

        * rendering/style/RenderStyleConstants.h: Add constants for the new elements.

2009-07-01  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Fisher.

        Small refactoring of MessagePortChannel so that PlatformMessagePortChannel
        may be defined at the WebKit layer.

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

        * dom/MessageChannel.cpp:
        (WebCore::MessageChannel::MessageChannel):
        * dom/MessagePortChannel.cpp:
        * dom/MessagePortChannel.h:
        * dom/default/PlatformMessagePortChannel.cpp:
        (WebCore::MessagePortChannel::createChannel):
        (WebCore::MessagePortChannel::create):
        (WebCore::MessagePortChannel::MessagePortChannel):
        (WebCore::MessagePortChannel::~MessagePortChannel):

2009-07-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <video> fails to show on http://camendesign.com/code/video_for_everybody
        <rdar://problem/7026010>
        https://bugs.webkit.org/show_bug.cgi?id=26919

        Fix an issue introduced in r44961. In that revision we changed to only update
        compositing layer geometry when all siblings had been laid out (i.e. we pushed
        the updates one level down). However, that left out the root layer, so this
        fix ensures that the root layer geometry gets updated at the end.

        Test: compositing/geometry/root-layer-update.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):

2009-07-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein
        
        <rdar://problem/7026010> <video> fails to show on http://camendesign.com/code/video_for_everybody

        First part of fix: when outline width changes, don't to a synchronous
        layer update right away, but just set the flag to say that compositing
        layers need updating. The synchronous layer update left the layer geometries
        out of whack when it happened in the middle of layout (e.g. when inside ::first-letter).
        
        Test: compositing/geometry/outline-change.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::setMaximalOutlineSize):

2009-07-01  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26842
        Build fix when ENABLE_DATABASE is off

        Move Database.h into ENABLE(DATABASE) guard so toggling ENABLE_DATABASE
        off does not break builds.

        * bindings/js/ScriptObjectQuarantine.cpp:

2009-07-01  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.
        
        https://bugs.webkit.org/show_bug.cgi?id=26899
        
        Modified XSSAuditor::decodeURL to only remove null characters so that 
        it is consistent with the behavior of HTMLTokenizer and prevents 
        injected scripts that contain control characters. 

        Tests: http/tests/security/xssAuditor/script-tag-control-char.html
               http/tests/security/xssAuditor/script-tag-null-char.html

        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodeURL): Modified to only remove null characters. 
        * page/XSSAuditor.h: Reverted naming of third argument of method XSSAuditor::decodeURL
        from allowControlCharacters back to allowNullCharacters.
        * platform/network/ResourceResponseBase.cpp: Reverted back to rev #45003.
        (WebCore::isControlCharacter):
        * platform/network/ResourceResponseBase.h: Reverted back to rev #45003.  

2009-07-01  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        - supported keyboard shortcuts compatible with Firebug in Scripts Debugger:
        F5, Ctrl+/ (win,lin), Command+/ (mac) - continue
        F10, Ctrl+' (win, lin), Command+' (mac) - step over
        F11, Ctrl+; (win, lin), Command+; (mac) - step into
        Shift+F11, Ctrl+Shift+; (win, lin), Command+Shift+; (mac) - step out

        - added call stack navigation shortcuts:
        Ctrl+. - next call frame
        Ctrl+, - previouse call frame

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

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.handleKeyEvent):
        (WebInspector.CallStackSidebarPane.prototype._selectNextCallFrameOnStack):
        (WebInspector.CallStackSidebarPane.prototype._selectPreviousCallFrameOnStack):
        (WebInspector.CallStackSidebarPane.prototype._selectedPlacardByIndex):
        (WebInspector.CallStackSidebarPane.prototype._selectedCallFrameIndex):
        * inspector/front-end/KeyboardShortcut.js: Added.
        (WebInspector.KeyboardShortcut):
        (WebInspector.KeyboardShortcut.makeKey):
        (WebInspector.KeyboardShortcut.makeKeyFromEvent):
        (WebInspector.KeyboardShortcut.makeKeyFromCodeAndModifiers_):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.handleKeyEvent):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2009-07-01  Daniel Erat  <derat@google.com>

        Reviewed by David Levin.

        Chromium Linux: Move the scrollbar thumb on middle-click.

        https://bugs.webkit.org/show_bug.cgi?id=26910
        http://code.google.com/p/chromium/issues/detail?id=11976

        Tested by building Chrome and checking that the scrollbar moves as expected.

        * platform/chromium/ScrollbarThemeChromium.cpp:
        * platform/chromium/ScrollbarThemeChromium.h:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        * platform/chromium/ScrollbarThemeChromiumLinux.h:
        * platform/chromium/ScrollbarThemeChromiumWin.cpp:
        * platform/chromium/ScrollbarThemeChromiumWin.h:

2009-07-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Add a preference/setting to toggle whether content sniffing is enabled for file URLs.

        * WebCore.base.exp:

        * page/Settings.cpp:
        (WebCore::Settings::setLocalFileContentSniffingEnabled):
        * page/Settings.h:
        (WebCore::Settings::localFileContentSniffingEnabled):

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):

2009-07-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 26909: aria-label needs to be supported
        https://bugs.webkit.org/show_bug.cgi?id=26909

        Test: accessibility/aria-label.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        * html/HTMLAttributeNames.in:

2009-07-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        More datagrid columns work.  Make sure columns cache both a style for the column header as well
        as a style for the column background (behind the cells).

        Hook up to CSSStyleSelector methods for obtaining the pseudo styles for columns (stubbed out and
        unimplemented).

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::pseudoStyleForDataGridColumn):
        (WebCore::CSSStyleSelector::pseudoStyleForDataGridColumnHeader):
        * css/CSSStyleSelector.h:
        * html/DataGridColumn.h:
        (WebCore::DataGridColumn::setColumnList):
        (WebCore::DataGridColumn::columnStyle):
        (WebCore::DataGridColumn::setColumnStyle):
        (WebCore::DataGridColumn::headerStyle):
        (WebCore::DataGridColumn::setHeaderStyle):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::recalcStyleForColumn):
        (WebCore::RenderDataGrid::columnStyle):
        (WebCore::RenderDataGrid::headerStyle):
        (WebCore::RenderDataGrid::paintColumnHeaders):
        * rendering/RenderDataGrid.h:

2009-07-01  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.
        
        <rdar://problem/7009870> After <audio> movie finishes playing, Pause button fails to change 
        back to Play button

        Grab onto the current time when QTKit "ended" notification fires and use it as 
        duration from that point on as QuickTime sometimes refuses to play all the way to
        the time it reports for duration and buffered. HTMLMediaElement assumes that there
        more to play in this situation and tries to restart playback, endlessly.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
            Rename m_duration to m_reportedDuration. Declare m_cachedDuration.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
            Rename m_duration to m_reportedDuration. Initialize m_cachedDuration.
        (WebCore::MediaPlayerPrivate::duration):
            Return m_cachedDuration once it has been set.
        (WebCore::MediaPlayerPrivate::updateStates):
            Rename m_duration to m_reportedDuration.
        (WebCore::MediaPlayerPrivate::didEnd):
            Set m_cachedDuration to currentTime().

2009-07-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        Bug 26900: AX: Manual spell check with Command-; does not bring up suggestions
        https://bugs.webkit.org/show_bug.cgi?id=26900

        Editable web areas should have a clickpoint that uses where the selection is.

        Test: accessibility/editable-webarea-context-menu-point.html

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::clickPoint):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2009-07-01  David Levin  <levin@chromium.org>

        Reviewed by Eric Seidel.

        Remove unused code in SVGTransformList and SVGTransformDistance
        <https://bugs.webkit.org/show_bug.cgi?id=26891>

        * svg/SVGTransformDistance.cpp:
        (WebCore::SVGTransformDistance::SVGTransformDistance):
        * svg/SVGTransformList.cpp:
        * svg/SVGTransformList.h:

2009-07-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        Begin stubbing out functions for layout, painting and style/geometry caching on columns.  Not enough
        is implemented for this to do much of anything yet, but it should help keep patch sizes down. :)

        * html/DataGridColumn.cpp:
        (WebCore::DataGridColumn::columnChanged):
        * html/DataGridColumn.h:
        (WebCore::DataGridColumn::setId):
        (WebCore::DataGridColumn::setLabel):
        (WebCore::DataGridColumn::setType):
        (WebCore::DataGridColumn::setSortable):
        (WebCore::DataGridColumn::setSortDirection):
        (WebCore::DataGridColumn::setColumnList):
        (WebCore::DataGridColumn::style):
        (WebCore::DataGridColumn::setStyle):
        (WebCore::DataGridColumn::rect):
        (WebCore::DataGridColumn::setRect):
        * html/DataGridColumnList.cpp:
        (WebCore::DataGridColumnList::DataGridColumnList):
        (WebCore::DataGridColumnList::setDataGridNeedsLayout):
        (WebCore::DataGridColumnList::add):
        (WebCore::DataGridColumnList::remove):
        (WebCore::DataGridColumnList::move):
        (WebCore::DataGridColumnList::clear):
        (WebCore::DataGridColumnList::primaryColumnChanged):
        * html/DataGridColumnList.h:
        (WebCore::DataGridColumnList::create):
        (WebCore::DataGridColumnList::dataGrid):
        (WebCore::DataGridColumnList::clearDataGrid):
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::HTMLDataGridColElement):
        (WebCore::HTMLDataGridColElement::findDataGridAncestor):
        (WebCore::HTMLDataGridColElement::insertedIntoTree):
        (WebCore::HTMLDataGridColElement::removedFromTree):
        * html/HTMLDataGridColElement.h:
        (WebCore::HTMLDataGridColElement::dataGrid):
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::HTMLDataGridElement):
        (WebCore::HTMLDataGridElement::~HTMLDataGridElement):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::styleDidChange):
        (WebCore::RenderDataGrid::recalcStyleForColumns):
        (WebCore::RenderDataGrid::recalcStyleForColumn):
        (WebCore::RenderDataGrid::styleForColumn):
        (WebCore::RenderDataGrid::layout):
        (WebCore::RenderDataGrid::layoutColumns):
        (WebCore::RenderDataGrid::paintColumnHeaders):
        (WebCore::RenderDataGrid::paintColumnHeader):
        * rendering/RenderDataGrid.h:
        (WebCore::RenderDataGrid::renderName):
        (WebCore::RenderDataGrid::canHaveChildren):

2009-07-01  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=26807
        
        Fixes this address by checking whether frame->document()->decoder() is null. 

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

2009-07-01  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

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

        Correctly reset history length to '0', not '1'. Old relict from early WML days.
        Add some new WML testcases covering the use of history length (by onenterforward event handling)

        Tests: wml/onenterforward-event.html
               wml/onenterforward-inline-event.html
               wml/ontimer-event.html
 
        * wml/WMLPageState.cpp:
        (WebCore::WMLPageState::reset):

2009-07-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        Make sure setting attributes on dcol elements properly updates the corresponding DataGridColumn object.

        Added new test in fast/dom/HTMLDataGridElement.

        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::parseMappedAttribute):
        * html/HTMLDataGridColElement.h:

2009-07-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/6998524> REGRESSION (r44474): Form text field has focus ring, looks focused,
        even though the field is not actually focused for keyboard input
        
        Add the concept of whether or not the Page is focused by adding a boolean to the focusController.  This allows the
        focused frame and focused node to both be cached and changed programmatically even when the Page itself doesn't
        actually happen to have focus at that time.

        * WebCore.base.exp:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocusedFrame):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActive):
        * page/FocusController.h:
        (WebCore::FocusController::isFocused):

2009-07-01  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Move some API headers from WebCore.pro to headers.pri so that they
        get installed when running make install from the build directory.

        * WebCore.pro:

2009-07-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Ariya Hidayat.

        Ran WebKitTools/Scripts/generate-qt-inspector-resource to update the
        qrc file with new png files from the web inspector.

        * inspector/front-end/WebKit.qrc:

2009-06-30  Mark Rowe  <mrowe@apple.com>

        Land some code that has a hope of compiling.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):

2009-06-30  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Simon Fraser.

        Flip back on block caching. Throwing away block data, while 
        a perceived memory win, is a performance hit in cases where we 
        are repainting large images (i.e. backgrounds) frequently 
        (i.e. a flash video playing on top).  
        <rdar://problem/6933515> REGRESSION(L-SL): Large JPEG images are 
        decoded on drawing, slowing down painting of sites that frequently 
        repaint e.g. because of Flash (pandora.com, Starcraft 2)

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):

2009-06-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        - Rename html4.css to html.css, since we target HTML5 now
        https://bugs.webkit.org/show_bug.cgi?id=26873

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSelector.cpp:
        (WebCore::loadFullDefaultStyle):
        * css/html.css: Copied from css/html4.css.
        * css/html4.css: Removed.
        * css/themeWin.css:
        * platform/Theme.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
        * rendering/RenderTheme.h:

2009-06-30  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Drag and drop support
        https://bugs.webkit.org/show_bug.cgi?id=23642

        Define DragImageRef as GdkPixbuf and implement essential
        functions which manipulate drag images.

        * platform/DragImage.h:
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::dragImageSize):
        (WebCore::deleteDragImage):
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):

2009-06-30  Maxime Simon  <simon.maxime@gmail.com>

        Reviewed by Eric Seidel.

        StorageNamespace.cpp build issue
        https://bugs.webkit.org/show_bug.cgi?id=26859

        Moved #endif //ENABLE(DOM_STORAGE) position
        so that the build doesn't fail.
        The namespace WebCore was started after the #if ENABLE(DOM_STORAGE)
        but closed after the #endif.

        * storage/StorageNamespace.cpp:

2009-06-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/7020825> HTMLMediaElement should not assume seeking is only possible in 
        buffered time ranges

        * html/HTMLMediaElement.cpp:
            Don't ASSERT if the network state goes to Idle when when the ready state is 
            HaveEnoughData or higher, it is perfectly legal.
        (WebCore::HTMLMediaElement::setReadyState): 
            Don't clear m_seeking after posting a 'seeking' event.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::seek):
            Do nothing when asked to seek to the same time we are already seeking to. Check requested
            seek time against maxTimeSeekable, not maxTimeLoaded.
        (WebCore::MediaPlayerPrivate::doSeek):
            Don't bother stopping a movie that isn't playing. Minor cleanup to make the code more readable.
        (WebCore::MediaPlayerPrivate::seekTimerFired):
            Check requested seek time against maxTimeSeekable, not maxTimeLoaded.
        (WebCore::MediaPlayerPrivate::updateStates):
            A streaming movie has as much data as it needs once it reaches "playable", so 
            set the ready state to HaveFutureData. A movie with metadata doesn't drop back 
            to "have nothing" when seeking. A streaming movie doesn't use the network when paused.
        (WebCore::MediaPlayerPrivate::timeChanged):
            It may not be possible to seek to a specific time in a streamed movie but when seeking 
            in a streaming movie QuickTime sets the time to closest time possible and posts a  
            timechanged notification, so update m_seekTo so we can detect when the seek completes.

2009-06-30  Steve Falkenburg  <sfalken@apple.com>

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

        Reviewed by Sam Weinig.

        Blacklist Yahoo Application State plug-in for versions prior to 1.0.0.6.
        Earlier versions cause corruption crashes.

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::isPluginBlacklisted):

2009-06-30  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7005207> <video> in canvas broken with ACCEL_COMPOSITING
        
        Fix drawImage of video in CanvasRenderingContext2D when
        accelerated compositing is enabled. This is done by
        adding a new paint method to HTMLVideoElement that
        is only called from canvas, which will create the software
        renderer if necessary, but otherwise calls the regular
        paint method. Meanwhile, add logic to the software video
        renderer so that it can be created without calling repaint
        every time it sees a new frame.
        
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::paintCurrentFrameInContext):
        * html/HTMLVideoElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::paintCurrentFrameInContext):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::paintCurrentFrameInContext):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie):
        (WebCore::MediaPlayerPrivate::createQTVideoRenderer):
        (WebCore::MediaPlayerPrivate::currentRenderingMode):
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering):
        (WebCore::MediaPlayerPrivate::paintCurrentFrameInContext):

2009-06-30  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

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

        Get <dcol> elements reflected into the datagrid's column list.  Make sure columns get added/removed
        properly.  (Attribute changes are still not caught.  That is coming in a separate patch.)

        Added fast/dom/HTMLDataGridElement/DataGridColumns-dom.html

        * html/DataGridColumn.h:
        (WebCore::DataGridColumn::create):
        (WebCore::DataGridColumn::setColumnList):
        (WebCore::DataGridColumn::DataGridColumn):
        * html/DataGridColumnList.cpp:
        (WebCore::DataGridColumnList::add):
        (WebCore::DataGridColumnList::remove):
        (WebCore::DataGridColumnList::clear):
        * html/DataGridColumnList.h:
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::HTMLDataGridColElement):
        (WebCore::HTMLDataGridColElement::findDatagridAncestor):
        (WebCore::HTMLDataGridColElement::ensureColumn):
        (WebCore::HTMLDataGridColElement::insertedIntoTree):
        (WebCore::HTMLDataGridColElement::removedFromTree):
        (WebCore::HTMLDataGridColElement::sortable):
        (WebCore::HTMLDataGridColElement::setSortable):
        * html/HTMLDataGridColElement.h:
        (WebCore::HTMLDataGridColElement::column):
        (WebCore::HTMLDataGridColElement::setColumn):
        (WebCore::HTMLDataGridColElement::datagrid):
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::setDataSource):
        (WebCore::HTMLDataGridElement::dataSource):

2009-06-30  Jeremy Orlow (jorlow@chromium.org)

        Reviewed by David Levin.

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

        Fix some minor build issues in the v8 bindings.

        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Custom::v8StorageNamedPropertyEnumerator):
        (WebCore::storageGetter):
        (WebCore::storageSetter):
        (WebCore::storageDeleter):
        * storage/StorageArea.cpp:

2009-06-30  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium Linux: use different fonts for each script run.

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

        Previously, when rendering complex text, we picked a single font which
        could render all the glyphs needed for the run. However, this meant
        that sometimes lines were rendered with, for example, [LATIN, THAI,
        LATIN] and we could end up with a different font for the Latin parts
        than for lines without Thai in them.

        With this patch, we pick a font for each script run.

        This change is covered by existing layout tests.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::~TextRunWalker):
        (WebCore::TextRunWalker::nextScriptRun):
        (WebCore::TextRunWalker::fontPlatformDataForScriptRun):
        (WebCore::TextRunWalker::setupFontForScriptRun):
        (WebCore::TextRunWalker::allocHarfbuzzFont):
        (WebCore::setupForTextPainting):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):

2009-06-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt, Dan Bernstein.
        
        <rdar://problem/6191676> Redraw issues scrolling overflow:scroll div with compositing

        There are two parts to this fix. First, if a compositing layer has overflow clipping
        or a mask, then the compositing layer does not need to be sized to encompass all
        non-composited children.
        
        Second, when scrolling, we have to back up to the compositing ancestor and have
        it reposition descendant compositing layers, because overflow doesn't follow
        the z-order tree.
        
        Test: compositing/overflow/overflow-scroll.html

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        Pass the UpdateCompositingLayers flag when updating layers after layout, so that
        we can reposition compositing layers if we're not about to do a layer rebuild.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        Only update compositing layers if the flag is set.
        
        (WebCore::RenderLayer::scrollToOffset):
        Do compositing layer updates from the compositing ancestor in one fell swoop.

        * rendering/RenderLayer.h:
        Replace the unused FullUpdate flag with one that allows us to specify whether
        compositing layers should be updated.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterLayout):
        * rendering/RenderLayerBacking.h:
        New param that we can pass to updateCompositingDescendantGeometry to control
        whether the update goes deep.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        We can return earlier if this is not a self-painting layer.
        If the layer has overflow clip or a mask, then the composited bounds are just the
        local bounds, excluding descendants.
        
        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
        * rendering/RenderLayerCompositor.h:
        Renamed from updateCompositingChildrenGeometry, and added a flag that allows
        us to do a deep update.

2009-06-30  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=26764
        Uncaught NOT_FOUND_ERR: DOMException 8 loading empty text file

        Test: fast/parser/empty-text-resource.html

        * loader/TextDocument.cpp: (WebCore::TextTokenizer::finish): Create document tree if it
        hasn't been created yet.

2009-06-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Renamed scrollbarUnderPoint to scrollbarAtPoint.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollbarAtPoint):
        * platform/ScrollView.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::handleMouseDownEvent):
        (WebCore::PopupListBox::handleMouseMoveEvent):

2009-06-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/6960286> CrashTracer: [REGRESSION] 1120 crashes in Safari at com.apple.WebCore WebCore::JSLazyEventListener::parseCode const 62

        <select> elements and other elements the produce popups can keep their popups
        live across a page load.  If this occurs and the <select> element has an
        onchange handler it is possible to get into a state where we try to execute
        JS on a page that no longer has an execution context. 

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::parseCode):
          Be paranoid and add a null check, but assert as well because we shouldn't
          actually get to this point.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::valueChanged):

2009-06-30  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        <https://bugs.webkit.org/show_bug.cgi?id=25435>

        Added support for sending MessagePorts to/from Workers via postMessage().

        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::messageChannel):
        Exposes MessageChannel constructor WorkerContext.
        * bindings/js/JSWorkerCustom.cpp:
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Now correctly handles being instantiated from within a Worker.
       * platform/CrossThreadCopier.h:
        (WebCore::GenericWorkerTaskTraits<PassOwnPtr>):
        Added support for passing PassOwnPtr as argument to GenericWorkerTask
       * workers/GenericWorkerTask.h:
        (WebCore::):
        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):
        Now handles disentangling/entangling MessagePorts sent to/from via postMessage.
        (WebCore::Worker::dispatchMessage):
        * workers/Worker.h:
        * workers/Worker.idl:
        Added an optional MessagePort argument to postMessage()
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::hasPendingActivity):
        Workers now report pending activity whenever there are remotely entangled ports.
        (WebCore::WorkerContext::postMessage):
        Now handles disentangling/entangling MessagePorts sent to/from via postMessage.
        (WebCore::WorkerContext::dispatchMessage):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:
        Added an optional MessagePort argument to postMessage()
        * workers/WorkerContextProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        Updated messaging infrastructure to transport an optional MessagePort/MessagePortChannel.
        (WebCore::MessageWorkerContextTask::create):
        (WebCore::MessageWorkerContextTask::MessageWorkerContextTask):
        (WebCore::MessageWorkerContextTask::performTask):
        (WebCore::MessageWorkerTask::create):
        (WebCore::MessageWorkerTask::MessageWorkerTask):
        (WebCore::MessageWorkerTask::performTask):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        * workers/WorkerMessagingProxy.h:
        Added additional postMessage() API that accepts a MessagePort
        * workers/WorkerObjectProxy.h:
        Added additional postMessage() API that accepts a MessagePort

2009-06-30  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium: Add complex text support on Linux.

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

        This patch adds complex text support on Linux using Harfbuzz. It's not
        the fastest code possible: some caching of font tables will certainly
        be required. However, it's probably the simplest code that works.

        This will require checking in new baselines in the Chromium tree for
        those layout tests which now pass.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::truncateFixedPointToInteger):
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::~TextRunWalker):
        (WebCore::TextRunWalker::reset):
        (WebCore::TextRunWalker::setXOffsetToZero):
        (WebCore::TextRunWalker::rtl):
        (WebCore::TextRunWalker::setBackwardsIteration):
        (WebCore::TextRunWalker::nextScriptRun):
        (WebCore::TextRunWalker::glyphs):
        (WebCore::TextRunWalker::length):
        (WebCore::TextRunWalker::xPositions):
        (WebCore::TextRunWalker::advances):
        (WebCore::TextRunWalker::width):
        (WebCore::TextRunWalker::logClusters):
        (WebCore::TextRunWalker::numCodePoints):
        (WebCore::TextRunWalker::widthOfFullRun):
        (WebCore::TextRunWalker::allocHarfbuzzFont):
        (WebCore::TextRunWalker::deleteGlyphArrays):
        (WebCore::TextRunWalker::createGlyphArrays):
        (WebCore::TextRunWalker::expandGlyphArrays):
        (WebCore::TextRunWalker::shapeGlyphs):
        (WebCore::TextRunWalker::setGlyphXPositions):
        (WebCore::setupForTextPainting):
        (WebCore::fontPlatformDataForTextRun):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::glyphIndexForXPositionInScriptRun):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/chromium/HarfbuzzSkia.cpp: Added.
        (WebCore::SkiaScalarToHarfbuzzFixed):
        (WebCore::stringToGlyphs):
        (WebCore::glyphsToAdvances):
        (WebCore::canRender):
        (WebCore::getOutlinePoint):
        (WebCore::getGlyphMetrics):
        (WebCore::getFontMetric):
        (WebCore::harfbuzzSkiaGetTable):

2009-06-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7019799> Slow loading MediaDocument can fall back to plug-in unnecessarily

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::updateStates):
            Always fall back to a plug-in if m_hasUnsupportedTracks is set.
        (WebCore::MediaPlayerPrivate::disableUnsupportedTracks):
            Set m_hasUnsupportedTracks if we disable a track.

2009-06-30  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix inverted if/else that's causing a layout test in src.chromium.org to fail.

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

        * bindings/v8/V8Proxy.cpp:
        (WebCore::GCPrologueVisitor::visitDOMWrapper): if (port2), not if (!port2).

2009-06-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6946611> REGRESSION (r30673): Shade10:" D_Snap
          to Grid" window is clipping

        Added an app-specific quirk to revert the behavior of <link> elements
        to the way it was before r30673, namely that if the rel attribute
        is not "stylesheet" but the type attribute contains "text/css", the
        link behaves as a stylesheet link.

        * WebCore.base.exp: Exported setTreatsAnyTextCSSLinkAsStylesheet().
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process): Check
            Settings::treatsAnyTextCSSLinkAsStylesheet() and if true, allow a
            style sheet link if the type contains "text/css".
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
            Initialize m_treatsAnyTextCSSLinkAsStylesheet.
        (WebCore::Settings::setTreatsAnyTextCSSLinkAsStylesheet): Added.
        * page/Settings.h:
        (WebCore::Settings::treatsAnyTextCSSLinkAsStylesheet): Added.

2009-06-30  Adrien Nader  <camaradetux@gmail.com>

        Reviewed by Xan Lopez.

        Fix typo in GNUMakefile.am: it reads WebCOre instead of WebCore.

        * GNUmakefile.am:

2009-06-30  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Turn on ENABLE_DATAGRID so we can run the layout tests.

        * GNUmakefile.am:

2009-06-30  Raju Kunnath  <raju.kunnath@nokia.com>

        Reviewed by Simon Hausmann.

        <https://bugs.webkit.org/show_bug.cgi?id=26752>

        [Qt] Windows release build issue with Qt4.5 due to -GL flag on msvc2005 and msvc2008. 

        * WebCore.pro: Removed -GL compiler option for win32-msvc2005|win32-msvc2008.

2009-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Initialize member variables in the right order. Fixes compiler
        warning.

        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::BMPImageReader):

2009-06-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26831
        Fix compiler warning in WorkerLoaderProxy.h

        Forward declaration of a class within a class is not allowed,
        since the compiler can't know if the declaration is legal at that
        point. This gives the following compiler warning:

        ../../WebCore/workers/WorkerLoaderProxy.h:40: warning: declaration
        "class WebCore::ScriptExecutionContext::Task" does not declare
        anything

        Include the full ScriptExecutionHeader header instead.

        * workers/WorkerLoaderProxy.h:

2009-06-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Remove unused function.

        * plugins/gtk/PluginPackageGtk.cpp:

2009-06-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Change RenderLayer::updateLayerPositions() to use a bitmask instead of two
        boolean arguments. FullUpdate is unused at present, but will be used soon.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::):

2009-06-29  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix one more bad merge in V8Proxy.

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

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException): setDOMExceptionHelper() instead of convertToV8Object().

2009-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove more unused scons support.

        * SConstruct: Removed.

2009-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Fix some incorrect create functions.

        * html/DataGridColumn.h:
        (WebCore::DataGridColumn::create):
        * html/DataGridColumnList.h:
        (WebCore::DataGridColumnList::create):

2009-06-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Remove initialize method from DataGridDataSource and add
        DOMDataGridDataSource.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDataGridDataSource.cpp:
        * bindings/js/JSDataGridDataSource.h:
        * bindings/js/JSHTMLDataGridElementCustom.cpp:
        (WebCore::JSHTMLDataGridElement::setDataSource):
        * html/DOMDataGridDataSource.cpp: Added.
        (WebCore::DOMDataGridDataSource::DOMDataGridDataSource):
        (WebCore::DOMDataGridDataSource::~DOMDataGridDataSource):
        * html/DOMDataGridDataSource.h: Added.
        (WebCore::DOMDataGridDataSource::create):
        (WebCore::DOMDataGridDataSource::isDOMDataGridDataSource):
        (WebCore::asDOMDataGridDataSource):
        * html/DataGridDataSource.h:
        (WebCore::DataGridDataSource::isDOMDataGridDataSource):
        (WebCore::DataGridDataSource::isJSDataGridDataSource):
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::HTMLDataGridElement):
        (WebCore::HTMLDataGridElement::setDataSource):
        (WebCore::HTMLDataGridElement::dataSource):
        * html/HTMLDataGridElement.h:

2009-06-29  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix a couple of bad merge items from my previous V8Proxy patch.

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

        * bindings/v8/V8Collection.h:
        (WebCore::nodeCollectionNamedPropertyGetter):  Fix a bad function name that slipped through.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):  Fix a bad merge that caused a couple of lines of extraneous, breaking code to get in.

2009-06-29  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

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

        Fixed crash due to dereference of m_toStyle

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::isTargetPropertyEqual):

2009-06-29  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7014813> Ask media engine if a movie is streamed or downloaded.

        * WebCore.base.exp: 
            Export _wkQTMovieGetType

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::hasSingleSecurityOrigin):
            Move to keep with other non-callback functions.
        (WebCore::MediaPlayer::movieLoadType):
            New, returns the movie type.
        * platform/graphics/MediaPlayer.h:
            Declare MovieLoadType enum and movieLoadType method.

        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::movieLoadType):
            Default implementation of movieLoadType

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie):
            Don't base m_isStreaming on protocol, there are other types of streaming movies.
        (WebCore::MediaPlayerPrivate::maxTimeBuffered):
            Don't assume all streams are unbuffered.
        (WebCore::MediaPlayerPrivate::updateStates):
            Update m_isStreaming once we have metadata.
        (WebCore::MediaPlayerPrivate::disableUnsupportedTracks):
            Tracks that are disabled to begin with shouldn't be included in m_enabledTrackCount.
        (WebCore::MediaPlayerPrivate::movieLoadType):
            New, return movie type.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
            Add wkQTMovieGetType.

2009-06-29  Alice Liu  <alice.liu@apple.com>

        Fixed <rdar://problem/6930280> Reproducible crash at USA Today photo gallery

        Reviewed by Anders Carlsson.

        No test added because the crash requires a flash plugin

        * plugins/win/PluginMessageThrottlerWin.cpp:
        Rely on the hWnd of the plugin to tell us whether the PluginView has 
        been deleted during execution of its wndProc.
        (WebCore::PluginMessageThrottlerWin::messageThrottleTimerFired):

2009-06-29  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26811
         [Chromium] Remove a flag and functions used to enable workers in runtime.

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        * bindings/v8/WorkerContextExecutionProxy.h:

2009-06-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.
        
        <rdar://problem/6976712> Text antialiasing problems when rendering into compositing layers.
        
        Improve the appearance of text in compositing layers by making use of
        CA's layer geometry flipping, rather that doing it ourselves with a flip
        transform. This allows CG to use font autohinting in the layer text.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setGeometryOrientation):
        (WebCore::GraphicsLayer::geometryOrientation):
        New methods to set whether this layer uses flipped geometry.
        
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setGeometryOrientation):
        (WebCore::GraphicsLayerCA::geometryOrientation):
        Subclass in order to call into CA
        
        (WebCore::GraphicsLayerCA::setContentsLayer):
        Now that CA is doing the geometry flipping, we no longer need to flip the content
        layers for image and video manually
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):
        Turn on flipping on the root layer.

2009-06-29  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Treat.

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

        Implement most WML specific <select> element features.
        Add 'iname' / 'ivalue' support and support variable references.

        Add two tests covering most select/variable related functionality.
        Needs more tests when adding full 'iname' / 'ivalue' support (used in conjuction with onpick).

        Tests: http/tests/wml/post-data-to-server.html
               wml/select-element-variables.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::optionCount): Refactored from HTMLSelectElement::length() for use within HTML & WML.
        * dom/SelectElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::length): Use new SelectElement::optionCount() function. (no functional changes for HTML).
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::handleIntrinsicEventIfNeeded): Activated commented code taking care of WMLSelectElement initialization.
        * wml/WMLSelectElement.cpp: Add a bunch of new code handling WML specific feature processing.
        (WebCore::WMLSelectElement::title):
        (WebCore::WMLSelectElement::formControlName):
        (WebCore::WMLSelectElement::defaultEventHandler):
        (WebCore::WMLSelectElement::selectInitialOptions):
        (WebCore::WMLSelectElement::calculateDefaultOptionIndices):
        (WebCore::WMLSelectElement::selectDefaultOptions):
        (WebCore::WMLSelectElement::initializeVariables):
        (WebCore::WMLSelectElement::updateVariables):
        (WebCore::WMLSelectElement::parseIndexValueString):
        (WebCore::WMLSelectElement::valueStringToOptionIndices):
        (WebCore::WMLSelectElement::optionIndicesToValueString):
        (WebCore::WMLSelectElement::optionIndicesToString):
        (WebCore::WMLSelectElement::name):
        (WebCore::WMLSelectElement::value):
        (WebCore::WMLSelectElement::iname):
        (WebCore::WMLSelectElement::ivalue):
        * wml/WMLSelectElement.h:

2009-06-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Put <datagrid> behind an ifdef.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSDataGridColumnListCustom.cpp:
        * bindings/js/JSDataGridDataSource.cpp:
        * bindings/js/JSDataGridDataSource.h:
        * bindings/js/JSHTMLDataGridElementCustom.cpp:
        * html/DataGridColumn.cpp:
        * html/DataGridColumn.h:
        * html/DataGridColumn.idl:
        * html/DataGridColumnList.cpp:
        * html/DataGridColumnList.h:
        * html/DataGridColumnList.idl:
        * html/DataGridDataSource.h:
        * html/HTMLDataGridCellElement.cpp:
        * html/HTMLDataGridCellElement.h:
        * html/HTMLDataGridCellElement.idl:
        * html/HTMLDataGridColElement.cpp:
        * html/HTMLDataGridColElement.h:
        * html/HTMLDataGridColElement.idl:
        * html/HTMLDataGridElement.cpp:
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridElement.idl:
        * html/HTMLDataGridRowElement.cpp:
        * html/HTMLDataGridRowElement.h:
        * html/HTMLDataGridRowElement.idl:
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:
        * rendering/RenderDataGrid.cpp:
        * rendering/RenderDataGrid.h:

2009-06-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat and Adam Roben.

        Fix compilation with MINGW. Ported MSVC inline assembly to
        GNU inline assembly. Also fixed casting errors where gcc
        refused to cast a pointer-to-function to a pointer-to-object,
        without an intermediate cast to a non-pointer type.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::hookedBeginPaint):
        (WebCore::PluginView::hookedEndPaint):
        (WebCore::hook):
        (WebCore::setUpOffscreenPaintingHooks):

2009-06-26  John Sullivan  <sullivan@apple.com>

        Added Speech submenu to context menu on Mac when there's a non-editable selection
        (it was already present when there's an editable selection). 
        Also added support for disabling "Stop Speaking" when there is no speaking to stop.

        Reviewed by Tim Hatcher.

        * loader/EmptyClients.h:
        (WebCore::EmptyContextMenuClient::isSpeaking):
        implemented this new virtual function to return false
        
        * page/ContextMenuClient.h:
        declared this new pure virtual function
        
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        insert Speech item (after a separator) on Mac when there's selected non-editable text
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        enable Stop Speaking item only if the context menu client returns true for isSpeaking()

2009-06-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=26783
          <rdar://problem/7014543> REGRESSION (r45296): Subfolders not displayed
          in MobileMe iDisk Web App

        Test: added a case to fast/dom/Element/scrollWidth.html

        Ensure that scroll{Width, Height} is greater or equal to
        client{Width, Height}.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):

2009-06-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26780
        
        Do not make compositing layers for non-self-painting RenderLayers,
        since these exist only to push a clip onto the clipping stack. If such
        a layer gets compositied for some other reason, it should not paint.
        
        Also ensure that we update composited layer positions correctly
        inside overflow:scroll layers. We can't assume that the contents
        are child layers, so we have to go up to the compositing ancestor,
        and tell it to update all its child layer positions as we do 
        after layout.

        Tests: compositing/layers-inside-overflow-scroll.html
               compositing/self-painting-layers.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::needsToBeComposited):

2009-06-28  Luke Kenneth Casson Leighton  <lkcl@lkcl.net>

        Reviewed by Eric Seidel.

        PurgeableBuffer #defines leave out functions on gtk MacOSX 10.4 build
        https://bugs.webkit.org/show_bug.cgi?id=23057

        Define these functions for Gtk as well.

        * platform/PurgeableBuffer.h:

2009-06-28  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Update CodeGeneratorV8.pm to match the new api for V8Proxy.

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

        * bindings/scripts/CodeGeneratorV8.pm: Match the current version of V8Proxy.

2009-06-28  Nicolas Sylvain  <nsylvain@chromium.org>

        Reviewed by Dimitri Glazkov.

        If loading a font fails because of the sandbox, we ask the browser process to 
        try to load it by calling ensureFontLoaded. If it still fails after 
        ensureFontLoaded, we hit a ASSERT_NOT_REACHED. 

        This case happens once in a while during browser shutdown. The browser will 
        queue a message to the renderer to shutdown, and will then stop answering sync 
        messages from the renderer. If the renderer is still loading a page during this 
        time, it might try to call the browser process to ask to load a font. The 
        browser process will ignore the request, and the font will fail to load, even 
        after the second try. 

        This is unfortunate, but there is no real risk here, since the renderer will be 
        going away as soon as it processes another message. 

        This can't be layout tested as it depends on the sandbox. 

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

        * platform/graphics/chromium/FontChromiumWin.cpp:
        * platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:
        * platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:

2009-06-28  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Eric Seidel.

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

        Test: plugins/netscape-plugin-map-data-to-src.html

        Fix problems with Real or WMP plugins not displaying because "data" was set
        on the OBJECT tag instead of "src".  This is based on what Firefox does, see
        http://mxr.mozilla.org/mozilla-central/source/layout/generic/nsObjectFrame.cpp#3045

        * rendering/RenderPartObject.cpp:
        (WebCore::mapDataParamToSrc):
        (WebCore::RenderPartObject::updateWidget):

2009-06-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Jan Alonzo.

        [Qt] Build fix after r45290
        https://bugs.webkit.org/show_bug.cgi?id=26769

        * WebCore.pro:

2009-06-27  Emilio Pozuelo Monfort  <pochu27@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Don't use deprecated GTKsymbols.
        https://bugs.webkit.org/show_bug.cgi?id=26583

        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_class_init):
        (gtk_xtbin_new):
        (gtk_xtbin_destroy):

2009-06-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=26780
        
        Fix up previous change. When computeCompositingRequirements() determines
        that the current layer is composited, it needs to inform its parent
        by setting compositingState.m_subtreeIsCompositing() to true. That didn't
        always happen after the previous patch. Clarified the logic here.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2009-06-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=26780
        
        First part: fix the RenderLayer::hasCompositingDescendant() flag to be set
        correctly.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        Do not unconditionally set compositingState.m_subtreeIsCompositing, because
        that can clobber the value from an earlier sibling. Add some more comments.
        
        Remove a final use of Vector iterators.
        
        (WebCore::RenderLayerCompositor::recursiveRepaintLayerRect):
        Move the normalFlowList() processing outside the test for isStackingContext().

2009-06-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser and Antti Koivisto.

        - make paintFillLayerExtended() non-virtual and remove its clipY and
          clipH parameters

        These parameters were computed and passed along to
        paintFillLayerExtended in order to vertically constrain the rect fill to
        the damage rect, because Qt cannot paint tall rectangles (see
        <http://websvn.kde.org/?view=rev&revision=42721>). Since the damage rect
        is passed along in the PaintInfo, the extra parameters are redundant,
        and the intersection can just take place in paintFillLayerExtended().

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayers):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxDecorations):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::paintMaskImages):
        (WebCore::RenderBox::paintFillLayers):
        (WebCore::RenderBox::paintFillLayer):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations):
        (WebCore::RenderTable::paintMask):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintMask):

2009-06-27  Ryosuke Niwa  <rniwa@google.com>

        Reviewed by Eric Seidel.

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

        Clean up for IndentOutdentCommand::indentRegion, and solved most of problems related to the bug 21712.
        https://bugs.webkit.org/show_bug.cgi?id=21712

        Added few utility functions to htmlediting.h/cpp

        isVisibilyAdjacent checks whether the first position is visibly next to the second position.
        i.e. there is no visible node between the first and second positions

        canMergeLists checks whether two lists can be merged.
        It checks the type of list, the editing boundary, and adjacency of the lists.

        Tests: editing/execCommand/indent-nested-lists-1.html
               editing/execCommand/indent-nested-lists-2.html
               editing/execCommand/indent-nested-lists-3.html
               editing/execCommand/indent-nested-lists-4.html
               editing/execCommand/indent-nested-lists-5.html
               editing/execCommand/indent-nested-lists-6.html
               editing/execCommand/indent-nested-lists-7.html
               editing/execCommand/outdent-nested-lists-1.html
               editing/execCommand/outdent-nested-lists-2.html
               editing/execCommand/outdent-nested-lists-3.html
               editing/execCommand/outdent-nested-lists-4.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::prepareBlockquoteLevelForInsertion):
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem):
        (WebCore::IndentOutdentCommand::indentIntoBlockquote):
        (WebCore::IndentOutdentCommand::indentRegion):
        * editing/IndentOutdentCommand.h:
        * editing/htmlediting.cpp:
        (WebCore::enclosingListChild):
        (WebCore::canMergeLists):
        (WebCore::isVisibilyAdjacent):
        * editing/htmlediting.h:

2009-06-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        WebInspector: Fix completion when iterating options using Tab.

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

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._completionsReady):

2009-06-27  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25889
        [GTK] scrollbar policy for main frame is not implementable

        Override visibleContentRect to handle GTK+'s case, in which
        scrollbars or equivalent decoration are painted by the parent
        widget.

        * platform/ScrollView.cpp:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::visibleContentRect):

2009-06-27  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=26708
        
        Fix addresses false negatives with respect to scheme relative paths, iFrame JavaScript URLs,
        and UTF-7 encoded payloads.   

        Tests: http/tests/security/xssAuditor/http-equiv-utf-7-encoded.html
               http/tests/security/xssAuditor/iframe-javascript-url.html
               http/tests/security/xssAuditor/script-tag-utf-7-encoded.html
               http/tests/security/xssAuditor/script-tag-with-source-relative-scheme.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler): Moved XSSAuditor check to HTMLTokenizer::parseTag.
        (WebCore::HTMLTokenizer::parseTag):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadSubframe): Modified to inform XSSAuditor of parent frame so
        as to compare against iFrame javascript URL.
        * page/XSSAuditor.cpp: Removed method XSSAuditor::isControlCharacter. Instead, exposed method
        isControlCharacter in ResourceResponseBase.cpp.
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::decodeURL): Modified to decode string using specified encoder.
        (WebCore::XSSAuditor::findInRequest): Generalized to arbitrary frame so as to prevent execution
        of iFrame javascript URL.
        * page/XSSAuditor.h: Added field m_parentFrame.
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::isControlCharacter):
        * platform/network/ResourceResponseBase.h:

2009-06-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Bug 26771: Canvas is incorrectly tainted when drawing from a video element that uses <source> elements

        The drawImage(<video>) logic naively assumes that it just needs
        to check the src attribute of the video element when in fact it
        needs to look at the url that is being played instead.  Failure
        to do this means that video provided through source elements 
        taints the canvas.

        Test: media/video-canvas-source.html

        * html/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::checkOrigin):
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/CanvasRenderingContext2D.h:

2009-06-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=26695
        
        Added the ability to do scrollbar hit testing in EventHandler, changed the
        signature of a PlatformWheelEvent constructor, and changed scrollbarUnderMouse
        to scrollbarUnderPoint, and updated all calls to that function.        

        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        * page/EventHandler.h:
        (WebCore::):
        * platform/PlatformWheelEvent.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollbarUnderPoint):
        * platform/ScrollView.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::handleMouseDownEvent):
        (WebCore::PopupListBox::handleMouseMoveEvent):
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):


2009-06-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7011924> Opacity transitions should not trigger hardware compositing mode
        
        Don't go into compositing mode just for opacity transitions, but they will be
        hardware acclerated if we're already compositing.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForTransform):
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
        * rendering/RenderLayerCompositor.h:

2009-06-26  Simon Fraser  <simon.fraser@apple.com>

        Rubber-stamped by Dave Levin

        Rename ioCompState to compositingState to better match WebCore coding style.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):

2009-06-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        - revert unintentional project changes from r45277

        * WebCore.xcodeproj/project.pbxproj:

2009-06-26  Mark Rowe  <mrowe@apple.com>

        Fix the Windows build.

        * WebCore.vcproj/WebCore.vcproj: Remove ColorSafari.cpp as
        the file was deleted from SVN.

2009-06-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

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

        Change to use array indexing rather than Vector enumerators; the former
        are preferred style.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::hasNonCompositingContent):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateCompositingChildrenGeometry):
        (WebCore::RenderLayerCompositor::recursiveRepaintLayerRect):
        (WebCore::RenderLayerCompositor::layerHas3DContent):

2009-06-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        - fix <rdar://problem/6961476> REGRESSION (r42043): scrollWidth reported
          as 1 px

        Test: fast/dom/Element/scrollWidth.html

        Changed scrollWidth and scrollHeight to use the same logic for
        visible overflow boxes that is used for clipped overflow boxes. In
        particular, borders are not included and
        {leftmost,rightmost,lowest}Position() are used. This logic matches IE8.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):

2009-06-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 26725: aria-hidden, aria-disabled, aria-readonly need to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=26725

        Tests: accessibility/aria-disabled.html
               accessibility/aria-hidden.html
               accessibility/aria-readonly.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaIsHidden):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::isEnabled):
        (WebCore::AccessibilityRenderObject::canSetValueAttribute):
        * accessibility/AccessibilityRenderObject.h:
        * html/HTMLAttributeNames.in:

2009-06-26  Brett Wilson  <brettw@chromium.org>

        Reviewed by David Levin.

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

        GIFImageDecoder is broken.

        Make the GIFImageDecoder.repetitionCount function const to match the
        base class. The mismatched definitions were causing the function to not
        get called.

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

2009-06-26  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

        Additional fix for https://bugs.webkit.org/show_bug.cgi?id=26651

        The flag should always default to true to avoid it getting set
        to false in a build with accelerated compositing turned off
        and then disabling accelerated compositing when subsequently
        running a build with it turned on.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):

2009-06-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Followup for the fix for <rdar://problem/6961578> REGRESSION (r43511): Opening .fdf files from Acrobat Professional fails

        Now that other MIME type correction stuff is in our swizzled method, Tiger needs it too!

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        * platform/network/mac/WebCoreURLResponse.h:

2009-06-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

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

        For the final step of https://bugs.webkit.org/show_bug.cgi?id=25376,
        combine LocalStorage and SessionStorage into StorageNamespace. The
        synching code (for LocalStorage) has already been removed, so these
        classes are now very similar.  All they do is essentially contain a
        logical grouping of origins that are attached to specific contexts
        (be it PageGroups for LocalStorage and Page for SessionStorage).

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage):
        * page/DOMWindow.h:
        * page/Page.cpp:
        (WebCore::Page::sessionStorage):
        (WebCore::Page::setSessionStorage):
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage):
        * page/PageGroup.h:
        * storage/LocalStorage.cpp: Removed.
        * storage/LocalStorage.h: Removed.
        * storage/LocalStorageTask.cpp:
        * storage/LocalStorageThread.cpp:
        * storage/SessionStorage.cpp: Removed.
        * storage/SessionStorage.h: Removed.
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::create):
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::copy):
        (WebCore::StorageArea::length):
        (WebCore::StorageArea::key):
        (WebCore::StorageArea::getItem):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::clear):
        (WebCore::StorageArea::contains):
        (WebCore::StorageArea::importItem):
        (WebCore::StorageArea::close):
        (WebCore::StorageArea::dispatchStorageEvent):
        * storage/StorageArea.h:
        (WebCore::):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::scheduleFinalSync):
        * storage/StorageNamespace.cpp: Copied from WebCore/storage/LocalStorage.cpp.
        (WebCore::localStorageNamespaceMap):
        (WebCore::StorageNamespace::localStorageNamespace):
        (WebCore::StorageNamespace::sessionStorageNamespace):
        (WebCore::StorageNamespace::StorageNamespace):
        (WebCore::StorageNamespace::~StorageNamespace):
        (WebCore::StorageNamespace::copy):
        (WebCore::StorageNamespace::storageArea):
        (WebCore::StorageNamespace::close):
        * storage/StorageNamespace.h: Copied from WebCore/storage/LocalStorage.h.

2009-06-26  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Upstream V8Proxy.  This involved updating a lot of function and variable names to match WebKit style, hence the large size.

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

        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        (WebCore::ScheduledAction::~ScheduledAction):
        (WebCore::ScheduledAction::execute):
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::isSafeScript):
        (WebCore::ScriptController::gcProtectJSWrapper):
        (WebCore::ScriptController::gcUnprotectJSWrapper):
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::setEventHandlerLineNumber):
        (WebCore::ScriptController::bindToWindowObject):
        (WebCore::ScriptController::collectGarbage):
        (WebCore::ScriptController::haveInterpreter):
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptInstance.cpp:
        (WebCore::V8ScriptInstance::clear):
        (WebCore::V8ScriptInstance::set):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/ScriptScope.cpp:
        (WebCore::ScriptScope::ScriptScope):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::ScriptValue):
        (WebCore::ScriptValue::operator=):
        (WebCore::ScriptValue::clear):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::disposeListenerObject):
        (WebCore::V8AbstractEventListener::getReceiverObject):
        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/V8Collection.h:
        (WebCore::getV8Object):
        (WebCore::getNamedPropertyOfCollection):
        (WebCore::nodeCollectionNamedPropertyGetter):
        (WebCore::getIndexedPropertyOfCollection):
        (WebCore::nodeCollectionIndexedPropertyGetter):
        (WebCore::nodeCollectionIndexedPropertyEnumerator):
        (WebCore::collectionIndexedPropertyEnumerator):
        (WebCore::collectionStringOrNullIndexedPropertyGetter):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::weakDOMObjectCallback):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/V8Helpers.cpp:
        (WebCore::wrapNPObject):
        (WebCore::toV8Context):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::~V8LazyEventListener):
        (WebCore::V8LazyEventListener::getListenerFunction):
        (WebCore::V8LazyEventListener::callListenerFunction):
        (WebCore::V8LazyEventListener::getWrappedListenerFunction):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::V8NodeFilterCondition):
        (WebCore::V8NodeFilterCondition::~V8NodeFilterCondition):
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8ObjectEventListener.cpp:
        (WebCore::weakObjectEventListenerCallback):
        (WebCore::V8ObjectEventListener::~V8ObjectEventListener):
        * bindings/v8/V8Proxy.cpp: Added.
        * bindings/v8/V8Proxy.h:
        (WebCore::):
        (WebCore::GlobalHandleInfo::GlobalHandleInfo):
        (WebCore::V8Proxy::):
        (WebCore::V8Proxy::V8Proxy):
        (WebCore::V8Proxy::frame):
        (WebCore::V8Proxy::inlineCode):
        (WebCore::V8Proxy::setInlineCode):
        (WebCore::V8Proxy::timerCallback):
        (WebCore::V8Proxy::setTimerCallback):
        (WebCore::V8Proxy::setEventHandlerLineNumber):
        (WebCore::V8Proxy::finishedWithEvent):
        (WebCore::V8Proxy::wrapCPointer):
        (WebCore::V8Proxy::extractCPointer):
        (WebCore::V8Proxy::convertDOMWrapperToNative):
        (WebCore::V8Proxy::convertDOMWrapperToNode):
        (WebCore::V8Proxy::convertToV8Object):
        (WebCore::V8Proxy::convertToNativeObject):
        (WebCore::V8Proxy::convertToNativeEvent):
        (WebCore::V8Proxy::context):
        (WebCore::V8Proxy::extractCPointerImpl):
        (WebCore::V8Proxy::utilityContext):
        (WebCore::V8Proxy::constructDOMObject):
        (WebCore::throwError):
        (WebCore::toV8):
        * bindings/v8/V8Utilities.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::retrieve):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::GetConstructor):
        (WebCore::WorkerContextExecutionProxy::ToV8Object):
        (WebCore::WorkerContextExecutionProxy::EventToV8Object):
        (WebCore::WorkerContextExecutionProxy::toV8):
        (WebCore::WorkerContextExecutionProxy::forgetV8EventObject):
        (WebCore::WorkerContextExecutionProxy::evaluate):
        (WebCore::WorkerContextExecutionProxy::runScript):
        * bindings/v8/custom/V8AttrCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toV8):
        (WebCore::toCanvasStyle):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ClientRectListCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomBinding.cpp:
        (WebCore::allowSettingFrameSrcToJavascriptUrl):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::V8Custom::GetTargetFrame):
        * bindings/v8/custom/V8CustomEventListener.cpp:
        (WebCore::V8EventListener::V8EventListener):
        (WebCore::V8EventListener::~V8EventListener):
        (WebCore::V8EventListener::callListenerFunction):
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        (WebCore::V8CustomSQLStatementCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        (WebCore::V8CustomSQLTransactionCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        (WebCore::V8CustomSQLTransactionErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::V8CustomVoidCallback::handleEvent):
        (WebCore::invokeCallback):
        * bindings/v8/custom/V8CustomXPathNSResolver.cpp:
        (WebCore::V8CustomXPathNSResolver::lookupNamespaceURI):
        * bindings/v8/custom/V8DOMParserConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        (WebCore::convertBase64):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::createWindow):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::V8Custom::ClearTimeoutImpl):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::INDEXED_ACCESS_CHECK):
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::removeElement):
        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebKitPointConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::SetTimeoutOrInterval):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::getEventListener):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLSerializerConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XPathEvaluatorConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):

2009-06-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/7011047> Profiler shows the record button 'on' even
        though it's finished

        I consolidated the creation of the user initiated profile name into
        its own function and then called it from console::profile instead of
        calling startUserInitiatedProfiling().  This way we don't call
        toggleRecordButton() which turns on the record button.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::getCurrentUserInitiatedProfileName):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        * inspector/InspectorController.h:
        * page/Console.cpp:
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):

2009-06-26  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

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

        Cleanup: Move focusRingColor to RenderTheme.

        Most of this CL involves deleting files and removing dead code.

        focusRingColor() is now defined in RenderTheme rather than in
        misc. places on each port.  The default color is specified as
        black in renderTheme and ports can override it in their own
        custom renderThemes.

        Behavior should be identical except for the following cases,
        this lists platform and what the focus ring color used to be
        before this cl and the file where it used to be defined:

        Android - red
        WebCore/platform/android/TemporaryLinkStubs.cpp

        Cairo - aqua focus ring color - 0xFF7DADD9
        WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp

        wx - red
        WebCore/platform/wx/TemporaryLinkStubs.cpp

        QT - black
        WebCore/platform/graphics/qt/GraphicsContextQt.cpp

        Manual test: manual-tests/focusringcolor-change-on-theme-change.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue):
        * manual-tests/focusringcolor-change-on-theme-change.html: Added.
        * platform/android/TemporaryLinkStubs.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/chromium/ColorChromium.cpp: Removed.
        * platform/graphics/chromium/ColorChromiumMac.mm: Removed.
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::oldAquaFocusRingColor):
        (WebCore::setUsesTestModeFocusRingColor):
        (WebCore::usesTestModeFocusRingColor):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/win/ColorSafari.cpp: Removed.
        * platform/wx/TemporaryLinkStubs.cpp:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::focusRingColor):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::focusRingColor):
        (WebCore::RenderThemeChromiumMac::systemColor):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::focusRingColor):
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::focusRingColor):
        (WebCore::RenderThemeMac::systemColor):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::makeRGBAFromCGColor):
        (WebCore::RenderThemeSafari::focusRingColor):
        * rendering/RenderThemeSafari.h:

2009-06-26  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26761
        [Chromium] Enable Dedicated Workers in Chromium.

        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        Remove the check that prevented workers from being created w/o a command-line switch.
        The flag itself and methods will be removed in a subsequent patch, after
        corresponding change in Chromium.

2009-06-26  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Mark Rowe.
        
        Fix: https://bugs.webkit.org/show_bug.cgi?id=26723
        Where the m_mouseDown event was never being set on windows, so the
        client X and Y coordinates were always being reported as zero in a
        dragstart handler.

        Test: editing/selection/drag-start-event-client-x-y.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        Set the m_mouseDown event when the mouse press is handled.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::mouseDown):
        Removed now redundant setting of m_mouseDown.

2009-06-26  Brady Eidson  <beidson@apple.com>

        Tiger build fix

        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/mac/WebCoreURLResponse.mm:
        (swizzleMIMETypeMethodIfNecessary):

2009-06-26  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=26681
        Problem updating applicationCache when server returns 304
        
        Improve the fix, make the test pass on Tiger.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse): Fix another code path to remove the
        current item from list.

        * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::start): On Tiger,
        conditional requests that cannot be cached by network layer cause errors with default cache
        policy.

2009-06-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        <rdar://problem/6961578> REGRESSION (r43511): Opening .fdf files from Acrobat Professional fails

        When we disabled content sniffing for file urls we lost knowledge of many file extensions that we
        didn't intend to lose.  Turns out the CoreTypes UTI database doesn't know about every extension Gatekeeper
        knew about.

        By comparing CoreTypes' database to Gatekeepers, this patch adds a hardcoded list of file extension to MIME
        type mappings that are missing in CoreType's database.

        Test: platform/mac/fast/loader/file-url-mimetypes.html

        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Move the MIME Type swizzling code to
          WebCoreURLResponse.

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::platformLazyInit): _webcore_MIMEType -> MIMEType, as we now have only one place
          where we do all MIMEType correction.

        * platform/network/mac/WebCoreURLResponse.h: Remove _webcore_MIMEType, as it is now folded into the swizzled
          implementation of MIMEType.
        * platform/network/mac/WebCoreURLResponse.mm:
        (createBinaryExtensionsSet):
        (createExtensionToMIMETypeMap):
        (swizzleMIMETypeMethodIfNecessary):
        (webNSURLResponseMIMEType): If it's a file URL and there's no MIME type, see if the extension exists in the 
          extension -> MIME type map before turning to the default MIME type.  Also roll in what was previously
          implemented in _webcore_MIMEType.

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::~SVGImage): Tweak this ASSERT - SVGImages might get destroyed without ever having a client.

2009-06-25  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        Show the fullscreen button only if the backend has support for it.

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

        No test since this is not reachable via the DOM.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::supportsFullscreen): new
        * html/HTMLVideoElement.h:
        (WebCore::HTMLVideoElement::supportsFullscreen): new
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::supportsFullscreen): new
        (WebCore::MediaPlayer::supportsFullscreen): new
        * platform/graphics/MediaPlayer.h: new
        * platform/graphics/MediaPlayerPrivate.h: new
        (WebCore::MediaPlayerPrivateInterface::supportsFullscreen): new
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::rendererIsNeeded): new
        * rendering/MediaControlElements.h:

2009-06-25  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7007776> Controller doesn't automatically update counters when file
        is playing ( http://www.jazzguitar.be/mp3/Michael%20Lewis%20-%20SSSJ.mp3 )

        Update the time display when the movie time changes.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::updateControls):

2009-06-25  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Simon Fraser.

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

        Support hidding a control bar element from the Media element controller.

        Update layout tests since the fullscreen button no longer has a renderer.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaTextDisplayElement::update): call updateStyle() so everything
        is updated properly.
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        (WebCore::MediaControlInputElement::update): call updateStyle()
        (WebCore::MediaControlInputElement::updateStyle): create the renderer properly
        or not depending on what rendererIsNeeded() return.
        * rendering/MediaControlElements.h:

2009-06-26  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6968137> Profiler title numbers increment even after a
        reload.

        - Now the numbers are reset when the profiles are.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):

2009-06-26  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7000796>
        REGRESSION(34681): Breaking up quoted text makes new, unquoted text blue after certain steps; repros with some messages

        Test: editing/inserting/break-blockquote-after-delete.html

        Keep track of whether the typing style should be preserved after the TypingCommand is applied.  When adding onto an open
        typing command, keep that flag up to date.

        In this case, an InsertParagraphSeparatorInQuotedContent command, which should not preserve typing style, 
        was following an open Delete command, which does preserve the typing style.  So we were applying the original
        typing style (from before the delete, so blue text) to the cursor in the unquoted area after breaking up the blockquote.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::TypingCommand):
        (WebCore::TypingCommand::typingAddedToOpenCommand):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::updatePreservesTypingStyle):
        * editing/TypingCommand.h: (WebCore::TypingCommand::preservesTypingStyle):

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Add support for saving and loading of QWebHistory to and from a QByteArray.

        This includes streaming operators for QWebHistory. for convenience.

        New autotests that test QWebHistory and QWebHistoryItem serialization.

        * WebCore.pro:
        * history/HistoryItem.h:
        (WebCore::HistoryItem::dailyVisitCounts):
        (WebCore::HistoryItem::weeklyVisitCounts):
        * history/qt/HistoryItemQt.cpp: Added.
        (WebCore::HistoryItem::restoreState):
        (WebCore::HistoryItem::saveState):

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Add support for QDataStream operators to String and IntPoint.

        * platform/graphics/IntPoint.h:
        (WebCore::operator<<):
        (WebCore::operator>>):
        * platform/text/PlatformString.h:
        * platform/text/qt/StringQt.cpp:
        (WebCore::operator<<):
        (WebCore::operator>>):

2009-06-26  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Fisher.

        Add #if ENABLE(DOM_STORAGE) to the V8 custom bindings for local/session storage.
        https://bugs.webkit.org/show_bug.cgi?id=26757

        * bindings/v8/custom/V8StorageCustom.cpp

2009-06-26  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Eric Seidel.

        Test: platform/qt/fast/events/event-sender-keydown-frame.html

        Bug 20303: [Qt] Key events are not working in frames.

        Merge scrolling handling code in qt and win port, move it to
        EventHandler.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollRecursively):
        * page/EventHandler.h:

2009-06-26  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26682
        Bug 26682: It should be possible to add image to SVG DOM programmatically (using JavaScript)

        Make sure the xlink:href animated property setting syncs the corresponding attribute with the right namespace.

        Test: svg/custom/createImageElement.svg

        * svg/SVGAnimatedProperty.h:
        (WebCore::synchronizeProperty):

2009-06-26  Takeshi Yoshino  <tyoshino@google.com>

        Reviewed by Timothy Hatcher.

        Bug 26156: In view-source mode, always render the contents using HTMLViewSourceDocument
        https://bugs.webkit.org/show_bug.cgi?id=26156

        When in view-source mode, render the contents using HTMLViewSourceDocument
        regardless it's applicable for any plugin or not.

        Chromium tells WebCore to render the contents of specified URL when
        view-source: prefix is added to the URL. But currently, DOMImplementation
        ignores inViewSourceMode() when the MIME type is indicating that the contents
        are neither texts nor HTML family documents.

        For example, we can check the contents of asf file without launching media
        player. Rendering contents for view-source:-specified input is not what user
        expects.

        http://code.google.com/p/chromium/issues/detail?id=10545

        I want to fix this issue by this patch. IMHO, regardless of this Chromium
        specific issue, I think we should force use of HTMLViewSourceDocument when
        inViewSourceMode() is specified.

        Test: fast/frames/viewsource-on-image-file.html

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        * html/HTMLViewSourceDocument.h:

2009-06-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25529
        [Gtk] Expected states not exposed to assistive technologies

        Add support for VISIBLE, EDITABLE and SENSITIVE states.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2009-06-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        "Pointer to incomplete class type is not allowed" error with RVCT
        https://bugs.webkit.org/show_bug.cgi?id=26721

        Based on Norbert Leser's work.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Node.cpp:
        (WebCore::Node::dispatchMouseEvent):
        * dom/Node.h: Remove the default value for PassRefPtr<Event> args,
        to eliminate dependency on the Event class definition

2009-06-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Maciej Stachowiak.

        [Qt] Build fix after r45183
        https://bugs.webkit.org/show_bug.cgi?id=26748

        * WebCore.pro:

2009-06-25  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26681
        <rdar://problem/7003461> Problem updating applicationCache when server returns 304

        Test: http/tests/appcache/update-cache.html

        * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::didReceiveResponse):
        We're already done with the resource, don't try to load it again.

2009-06-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt.
        
        <rdar://problem/6990481>
        
        Handle perspective computation on non-layer objects.

        Test: transforms/3d/general/perspective-non-layer.html

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

2009-06-25  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by Eric Seidel.

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

        Use flex box in the mediaControls.css style, to nicely scale if a button gets
        dynamically added or removed.

        Media tests results are affected by this changes.

        * css/mediaControls.css:
        * css/mediaControlsQT.css:

2009-06-25  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Darin Fisher.

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

        Move relavent part of setDefaultFontSize from RenderThemeChromiumWin
        up into RenderThemeChromiumSkia.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::setDefaultFontSize):
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::setDefaultFontSize):
        * rendering/RenderThemeChromiumWin.h:

2009-06-25  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin Fisher.

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

        Add V8-only methods to FrameLoaderClient that V8 can use to send
        out notifications when it creates/destroys a script context.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didCreateScriptContext):
        (WebCore::EmptyFrameLoaderClient::didDestroyScriptContext):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didCreateScriptContext):
        (WebCore::FrameLoaderClient::didDestroyScriptContext):

2009-06-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Levin.

        Correct a few typos that snuck in when I was reformatting CodeGeneratorV8.pm
        to match WebKit style.

        * bindings/scripts/CodeGeneratorV8.pm: Corrected lots of typos.

2009-06-25  Adam Langley  <agl@google.com>

        TBRed: fix for Chromium tree.

        Add missing include for r45199.

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

        r45199 added a reference to throwError without including V8Proxy.h

        * bindings/v8/WorkerScriptController.cpp:

2009-06-25  Adam Langley  <agl@google.com>

        TBRed: fix for Chromium tree.

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

        Fix V8IsolatedWorld to point to the correct include file.

        The deprecated v8_index.h was removed from the Chromium tree in r19291
        and upstreamed into WebKit with r45193. However V8IsolatedWorld
        slipped in between the cracks and broke the build.

        * bindings/v8/V8IsolatedWorld.h: update with new header location.

2009-06-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

        https://bugs.webkit.org/show_bug.cgi?id=26651
        
        Preference is named "WebKitAcceleratedCompositingEnabled"
        and is a boolean value. When false, prevents compositing layers from
        being created, which prevents hardware animation from running.
        Also forces video to do software rendering. Added a cache for
        the flag in RenderLayerCompositing and made it all work
        on-the-fly when the flag is changed while a page is loaded.

        * WebCore.base.exp:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers):
        * page/Settings.cpp:
        (WebCore::setNeedsReapplyStylesInAllFrames):
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAcceleratedCompositingEnabled):
        * page/Settings.h:
        (WebCore::Settings::acceleratedCompositingEnabled):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hasAcceleratedCompositing):
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::currentTransform):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateLayerTransform):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::enableCompositingMode):
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingEnabledFlag):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::canAccelerateVideoRendering):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::needsToBeComposited):
        (WebCore::RenderLayerCompositor::destroyRootPlatformLayer):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::hasAcceleratedCompositing):
        * rendering/RenderObject.h:
        (WebCore::makeMatrixRenderable):

2009-06-25  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 26701: Implement the missing code for "FIXME: Need to return an
        exception" in WorkerScriptController::evaluate for v8 bindings.
        https://bugs.webkit.org/show_bug.cgi?id=26701

        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):

2009-06-25  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        Upstream V8Index.

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

        * bindings/v8/V8Index.cpp: Added.
        (WebCore::V8ClassIndex::GetFactory): Moved from src.chromium.org.
        (WebCore::V8ClassIndex::GetCache): Moved from src.chromium.org.
        * bindings/v8/V8Index.h:
        (WebCore::V8ClassIndex::): Moved from src.chromium.org.
        (WebCore::V8ClassIndex::ToInt): Moved from src.chromium.org.
        (WebCore::V8ClassIndex::FromInt): Moved from src.chromium.org.

2009-06-25  Adam Langley  <agl@google.com>

        Reviewed by Darin Fisher.

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

        This is hopefully the last step before our renderers can run
        cleanly in a chroot.

        WebKit needs to be able to ask for the correct font to use in
        the case that the current font doesn't include glyphs for
        certain code points. Currently we make a fontconfig call in our
        WebKit port to handle this.

        This patch changes this so that the call is sent our via
        ChromiumBridge.

        http://codereview.chromium.org/132007

        This should not affect any layout tests.

        * platform/chromium/ChromiumBridge.h:
        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):

2009-06-25  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26566
        Upstream these files from the chromium v8 code.  No tests were
        affected because this is essentially a code move.

        * bindings/v8/NPV8Object.cpp: Added.
        (allocV8NPObject):
        (freeV8NPObject):
        (listFromVariantArgs):
        (npIdentifierToV8Identifier):
        (npCreateV8ScriptObject):
        (NPN_Invoke):
        (NPN_InvokeDefault):
        (NPN_Evaluate):
        (NPN_EvaluateHelper):
        (NPN_GetProperty):
        (NPN_SetProperty):
        (NPN_RemoveProperty):
        (NPN_HasProperty):
        (NPN_HasMethod):
        (NPN_SetException):
        (NPN_Enumerate):
        (NPN_Construct):
        * bindings/v8/NPV8Object.h: Added.
        (PrivateIdentifier::):
        * bindings/v8/V8NPUtils.cpp: Added.
        (convertV8ObjectToNPVariant):
        (convertNPVariantToV8Object):
        (getStringIdentifier):
        * bindings/v8/V8NPUtils.h: Added.

2009-06-25  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Dimitri Glazkov.

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

        Windows Chromium bug fix: save context of destination canvas in
        TransparencyWin::compositeTextComposite() before the function
        modifies the context.

        Test: fast/canvas/translate-text.html

        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::compositeTextComposite):

2009-06-25  Patrick Mueller  <Patrick_Mueller@us.ibm.com>

        Reviewed by Timothy Hatcher.

        Show the filename and first line for "(program)" in the Profiler/Debugger
        https://bugs.webkit.org/show_bug.cgi?id=25475

        Add support to associate a sourceURL with an eval()'d string
        via a @sourceURL comment.  Currently the sourceURL is only available
        in the script debugger, not in the console or profiler, but it's
        most needed in the script debugger.

        * English.lproj/localizedStrings.js: added new "(program): %s" string
        * inspector/front-end/Script.js:
        (WebInspector.Script): if no sourceURL is available for the Script,
        search for a comment of the form //@ sourceURL=(url) to use
        as the sourceURL instead.
        * manual-tests/inspector/named-evals.html: Added.

2009-06-25  John Gregg  <johnnyg@google.com>

        Reviewed by Sam Weinig.

        Bug 23721: Changing dropdown's selectedIndex within onchange handler fires another onchange
        https://bugs.webkit.org/show_bug.cgi?id=23721

        onchange events fire when a SELECT element has
        focus and the selectedIndex is updated by script in some way--either
        during another onchange, onkeypress, onfocus, or timer--and then
        focus is lost. 

        Fixed by making a separate method for user-driven selectedIndex 
        changes, leaving scripts to use one which doesn't cause onchange to
        be queued.
        
        Test: fast/forms/select-script-onchange.html

        * dom/SelectElement.cpp: check if the pending change is user driven
        before calling onchange
        (WebCore::SelectElement::menuListOnChange):
        (WebCore::SelectElement::setSelectedIndex):
        * dom/SelectElement.h: store whether the pending change is user driven
        (WebCore::SelectElementData::userDrivenChange):
        (WebCore::SelectElementData::setUserDrivenChange):
        * html/HTMLSelectElement.cpp: split into two methods -- script version
        [non-user-driven] corresponds to IDL defined property name
        (WebCore::HTMLSelectElement::setSelectedIndex):
        (WebCore::HTMLSelectElement::setSelectedIndexByUser):
        * html/HTMLSelectElement.h: 
        * rendering/RenderMenuList.cpp: use ByUser method when coming through
        the renderer
        (WebCore::RenderMenuList::valueChanged):

2009-06-25  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

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

        Combined LocalStorageArea and SessionStorageArea into StorageArea since
        (after my other refactorings) there are no longer substantial
        differences between the two.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::storageArea):
        * storage/LocalStorage.h:
        * storage/LocalStorageArea.cpp: Removed.
        * storage/LocalStorageArea.h: Removed.
        * storage/SessionStorage.cpp:
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::storageArea):
        * storage/SessionStorage.h:
        * storage/SessionStorageArea.cpp: Removed.
        * storage/SessionStorageArea.h: Removed.
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::createLocalStorage):
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::createSessionStorage):
        (WebCore::StorageArea::copy):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::clear):
        (WebCore::StorageArea::scheduleFinalSync):
        (WebCore::StorageArea::blockUntilImportComplete):
        (WebCore::StorageArea::dispatchStorageEvent):
        * storage/StorageArea.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        (WebCore::StorageAreaSync::performImport):
        * storage/StorageAreaSync.h:
        * storage/StorageSyncManager.h:

2009-06-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=26671
          <rdar://problem/7001880> Safari 4.0 crashes in
          WebCore::DOMTimer::fired()

        Test: fast/dom/style-sheet-candidate-remove-unrendered-document.html

        When a "style sheet candidate" element is removed from a document,
        call Document::removeStyleSheetCandidateNode() regardless of whether
        the document is rendered. Otherwise, the document's style sheet
        candidate set can end up containing stale references.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::removedFromDocument):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::removedFromDocument):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::removedFromDocument):

2009-06-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Fisher.

        Update CodeGeneratorV8.pm to sync up with the changes downstream.

        * bindings/scripts/CodeGeneratorV8.pm: Added HTMLFrameSetElement check,
          FileList as a ref-counted type, and DataGridColumn as typeCanFailConversion.

2009-06-25  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Add FileList.h include to fix Chromium build.

        * platform/chromium/ClipboardChromium.cpp: Added FileList.h include.

2009-06-25  Joseph Pecoraro  <joepeck02@gmail.com>

        Reviewed by Jan Alonzo.

        Bug 26489: Web Inspector: Typo in DatabaseQuery Error Message
        https://bugs.webkit.org/show_bug.cgi?id=26489

        Fixed a Typo in a Web Inspector error message.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryError):

2009-06-25  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build, add missing StorageAreaSync files to the build.

        * WebCore.pro:

2009-06-25  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by and done with Tor Arne Vestbø.

        Fix shortcut keyboard handling with plugins on the Qt/Mac build.

        When we receive shortcut events like Ctrl+V then the text in the QKeyEvent is
        empty. If we're asked to disambiguate the event into a Char keyboard event,
        we try to detect this situation and still set the text, to ensure that the
        general event handling sends a key press event after this disambiguation.

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent):

2009-06-25  Eric Seidel  <eric@webkit.org>

        Build fix only, no review.

        Add FileList.h and NotImplemented.h includes in an attempt to fix bots.

        * platform/gtk/ClipboardGtk.cpp:
        * platform/qt/ClipboardQt.cpp:
        * platform/win/ClipboardWin.cpp:
        * platform/wx/ClipboardWx.cpp:

2009-05-21  Eric Seidel  <eric@webkit.org>

        Reviewed by Maciej Stachowiak.

        Expose files in the clipboard in ondrop events
        https://bugs.webkit.org/show_bug.cgi?id=25916

        Make it possible for applications like gmail to implement
        drag and drop of attachments onto email messages.

        This patch exposes an event.dataTransfer.files accessor
        on the drop event.  No information is exposed during dragover.
        This follows the HTML 5 drag and drop security model:
        http://www.w3.org/TR/html5/editing.html#security-risks-in-the-drag-and-drop-model
        The test http/tests/security/clipboard/clipboard-file-access.html
        verifies this behavior.

        Internet Explorer shows historical documentation of supporting
        getData('File') as a way of exposing files on the pasteboard.  The current version of their docs:
        http://msdn.microsoft.com/en-us/library/ms537658(VS.85).aspx
        has removed this reference (as far as I can tell IE never implemented it)
        I have a printed copy of that URL from 2008 on my desk describing getData('File') in IE.
        IE does not follow the HTML5 clipboard security model and always allows access to the full clipboard, even on dragover.

        I choose not to use IE's getData('File') and instead added .files
        so that the accessor could have a type, matching WebKit's existing
        .files accessor on HTMLInputElement.

        Mozilla has equivalent file access:
        event.dataTransfer.mozGetDataAt("application/x-moz-file", 0);
        which also does not return a typed value.
        https://developer.mozilla.org/En/DragDrop/Recommended_Drag_Types#Dragging_Files

        This is only implemented for Mac WebKit.  All other platforms (including Apple's Win WebKit)
        have incomplete Clipboard implementations and will require experts from those platforms
        to add this functionality.  Right now they all have Clipboard*::files() methods which call notImplemented();

        Test: http/tests/security/clipboard/clipboard-file-access.html

        * dom/Clipboard.h:
        * dom/Clipboard.idl:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::files):
        * platform/chromium/ClipboardChromium.h:
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::files):
        * platform/gtk/ClipboardGtk.h:
        * platform/mac/ClipboardMac.h:
        * platform/mac/ClipboardMac.mm:
        (WebCore::absoluteURLsFromPasteboardFilenames):
        (WebCore::absoluteURLsFromPasteboard):
        (WebCore::ClipboardMac::files):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::files):
        * platform/qt/ClipboardQt.h:
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::files):
        * platform/win/ClipboardWin.h:
        * platform/wx/ClipboardWx.cpp:
        (WebCore::ClipboardWx::files):
        * platform/wx/ClipboardWx.h:

2009-06-25  Eric Seidel  <eric@webkit.org>

        No review, only completing revert of r45144.

        Add back files deleted by r45144.

        * storage/LocalStorageArea.cpp: Added.
        (WebCore::LocalStorageArea::create):
        (WebCore::LocalStorageArea::LocalStorageArea):
        (WebCore::LocalStorageArea::scheduleFinalSync):
        (WebCore::LocalStorageArea::itemChanged):
        (WebCore::LocalStorageArea::itemRemoved):
        (WebCore::LocalStorageArea::areaCleared):
        (WebCore::LocalStorageArea::blockUntilImportComplete):
        (WebCore::LocalStorageArea::dispatchStorageEvent):
        * storage/LocalStorageArea.h: Added.
        * storage/SessionStorageArea.cpp: Added.
        (WebCore::SessionStorageArea::copy):
        (WebCore::SessionStorageArea::SessionStorageArea):
        (WebCore::SessionStorageArea::itemChanged):
        (WebCore::SessionStorageArea::itemRemoved):
        (WebCore::SessionStorageArea::areaCleared):
        (WebCore::SessionStorageArea::blockUntilImportComplete):
        (WebCore::SessionStorageArea::dispatchStorageEvent):
        * storage/SessionStorageArea.h: Added.
        (WebCore::SessionStorageArea::create):

2009-06-25  Eric Seidel  <eric@webkit.org>

        No review, reverting r45144 only.

        Roll out r45144 after 18 test failures appeared on the bots.
        https://bugs.webkit.org/show_bug.cgi?id=26698

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::storageArea):
        * storage/LocalStorage.h:
        * storage/SessionStorage.cpp:
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::storageArea):
        * storage/SessionStorage.h:
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::~StorageArea):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::clear):
        * storage/StorageArea.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        (WebCore::StorageAreaSync::performImport):
        * storage/StorageAreaSync.h:
        * storage/StorageSyncManager.h:

2009-06-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

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

        Combined LocalStorageArea and SessionStorageArea into StorageArea since
        (after my other refactorings) there are no longer substantial
        differences between the two.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::storageArea):
        * storage/LocalStorage.h:
        * storage/LocalStorageArea.cpp: Removed.
        * storage/LocalStorageArea.h: Removed.
        * storage/SessionStorage.cpp:
        (WebCore::SessionStorage::copy):
        (WebCore::SessionStorage::storageArea):
        * storage/SessionStorage.h:
        * storage/SessionStorageArea.cpp: Removed.
        * storage/SessionStorageArea.h: Removed.
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::createLocalStorage):
        (WebCore::StorageArea::StorageArea):
        (WebCore::StorageArea::createSessionStorage):
        (WebCore::StorageArea::copy):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::clear):
        (WebCore::StorageArea::scheduleFinalSync):
        (WebCore::StorageArea::blockUntilImportComplete):
        (WebCore::StorageArea::dispatchStorageEvent):
        * storage/StorageArea.h:
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        (WebCore::StorageAreaSync::performImport):
        * storage/StorageAreaSync.h:
        * storage/StorageSyncManager.h:

2009-06-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix <rdar://problem/7001817> REGRESSION (r41902): Base position track
          at UCSC Genome Browser doesn't work because image map prevents img
          from hit-testing

        Test: fast/replaced/image-map-2.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint): Do not reset 'inside' to false if
        the image map failed the hit test.

2009-06-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

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

        Refactor V8DOMMap to support isolated worlds.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInNewWorld):
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::DOMDataStore::InternalDOMWrapperMap::InternalDOMWrapperMap):
        (WebCore::DOMDataStore::allStores):
        (WebCore::DOMDataStore::allStoresMutex):
        (WebCore::DOMDataStore::domData):
        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
        (WebCore::ScopedDOMDataStore::~ScopedDOMDataStore):
        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
        (WebCore::):
        (WebCore::MainThreadDOMData::MainThreadDOMData):
        (WebCore::MainThreadDOMData::getStore):
        (WebCore::ChildThreadDOMData::ChildThreadDOMData):
        (WebCore::ChildThreadDOMData::getStore):
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::~DOMDataStore):
        (WebCore::DOMDataStoreHandle::DOMDataStoreHandle):
        (WebCore::DOMDataStoreHandle::~DOMDataStoreHandle):
        (WebCore::forget):
        (WebCore::getDOMNodeMap):
        (WebCore::getDOMObjectMap):
        (WebCore::getActiveDOMObjectMap):
        (WebCore::getDOMSVGElementInstanceMap):
        (WebCore::getDOMSVGObjectWithContextMap):
        (WebCore::DOMData::getCurrent):
        (WebCore::DOMData::handleWeakObject):
        (WebCore::DOMData::ensureDeref):
        (WebCore::weakDOMObjectCallback):
        (WebCore::weakActiveDOMObjectCallback):
        (WebCore::weakNodeCallback):
        (WebCore::weakSVGElementInstanceCallback):
        (WebCore::weakSVGObjectWithContextCallback):
        (WebCore::DOMData::derefObject):
        (WebCore::DOMData::derefDelayedObjects):
        (WebCore::DOMData::derefDelayedObjectsInCurrentThread):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        (WebCore::removeAllDOMObjectsInCurrentThreadHelper):
        (WebCore::visitDOMNodesInCurrentThread):
        (WebCore::visitDOMObjectsInCurrentThread):
        (WebCore::visitActiveDOMObjectsInCurrentThread):
        (WebCore::visitDOMSVGElementInstancesInCurrentThread):
        (WebCore::visitSVGObjectsInCurrentThread):
        * bindings/v8/V8DOMMap.h:
        (WebCore::DOMDataStoreHandle::getStore):
        * bindings/v8/V8IsolatedWorld.cpp: Added.
        (WebCore::getIsolatedWorldKey):
        (WebCore::contextWeakReferenceCallback):
        (WebCore::V8IsolatedWorld::evaluate):
        (WebCore::V8IsolatedWorld::V8IsolatedWorld):
        (WebCore::V8IsolatedWorld::~V8IsolatedWorld):
        (WebCore::V8IsolatedWorld::getEntered):
        * bindings/v8/V8IsolatedWorld.h: Added.
        (WebCore::V8IsolatedWorld::getDOMDataStore):

2009-06-24  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Timothy Hatcher.

        Bug 26604: Search doesn't work in Web Inspector Profiler
        https://bugs.webkit.org/show_bug.cgi?id=26604

        Seems like search was damaged in revision 42808.

        * inspector/front-end/ProfileView.js:
        (WebInspector.ProfileView.prototype.refresh):
        Here and in other functions: nodes we're searching in are profile data grid
        nodes, so there is no more need for '_dataGridNode' references.
        (WebInspector.ProfileView.prototype.searchCanceled):
        (WebInspector.ProfileView.prototype.performSearch.matchesQuery):
        Fixed accidental semicolon that caused 'matchesQuery' always return true.
        (WebInspector.ProfileView.prototype.performSearch):
        To perform search correctly in the case of bottom up tree, we need to populate
        the tree, because there's no 1-to-1 correspondence between profile nodes and
        data grid nodes in this case.
        (WebInspector.ProfileView.prototype._jumpToSearchResult):

2009-06-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.
        
        <rdar://problem/6450239&6574516>
    
        Fix flashing issues caused by compositing layers rendering content before
        a deferred layout has happened. Because the -viewWillDraw machinery doesn't
        work for composited layers, we need to use scheduleViewUpdate() to queue
        up a layout via the run loop observer in WebKit, whenever we know we
        are going to be painting soon.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):

2009-06-24  David Levin  <levin@chromium.org>

        Fix all builds.

        * ForwardingHeaders/wtf/FastAllocBase.h: Added.

2009-06-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

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

        Split the syncing portions of LocalStorageArea into StorageAreaSync.
        This name will make more sense in the next patch (in this set) when
        LocalStorageArea and SessionStorageArea are merged to become simply
        StorageArea.  (Thus the synching portion of StorageArea is in
        StorageAreaSync.)

        This looks like a big patch, but really all it's doing is splitting
        code and patching split-related things up.

        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::create):
        (WebCore::LocalStorageArea::LocalStorageArea):
        (WebCore::LocalStorageArea::scheduleFinalSync):
        (WebCore::LocalStorageArea::itemChanged):
        (WebCore::LocalStorageArea::itemRemoved):
        (WebCore::LocalStorageArea::areaCleared):
        (WebCore::LocalStorageArea::blockUntilImportComplete):
        * storage/LocalStorageArea.h:
        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::LocalStorageTask):
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::createImport):
        (WebCore::LocalStorageTask::createSync):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::scheduleImport):
        (WebCore::LocalStorageThread::scheduleSync):
        * storage/LocalStorageThread.h:
        * storage/SessionStorageArea.cpp:
        (WebCore::SessionStorageArea::blockUntilImportComplete):
        * storage/SessionStorageArea.h:
        * storage/StorageArea.h:
        * storage/StorageAreaSync.cpp: Copied from WebCore/storage/LocalStorageArea.cpp.
        * storage/StorageAreaSync.h: Copied from WebCore/storage/LocalStorageArea.h.
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h:

2009-06-24  Adam Treat  <adam.treat@torchmobile.com>

        Fix Qt build.

        * WebCore.pro:

2009-06-24  David Levin  <levin@chromium.org>

        Reviewed by David Hyatt.

        Bug 26696: Member functions in DataGridColumnList should return pointers instead of PassRefPtr.
        https://bugs.webkit.org/show_bug.cgi?id=26696

        * html/DataGridColumnList.cpp:
        (WebCore::DataGridColumnList::itemWithName):
        (WebCore::DataGridColumnList::add):
        * html/DataGridColumnList.h:
        (WebCore::DataGridColumnList::item):
        (WebCore::DataGridColumnList::primaryColumn):
        (WebCore::DataGridColumnList::sortColumn):

2009-06-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave "Messy" Hyatt.

        Little bit of style cleanup.

        * html/DataGridColumn.cpp:
        * html/DataGridColumn.h:
        * html/DataGridColumn.idl:
        * html/DataGridColumnList.cpp:
        * html/DataGridColumnList.h:
        * html/DataGridColumnList.idl:
        * html/HTMLDataGridCellElement.cpp:
        * html/HTMLDataGridCellElement.h:
        * html/HTMLDataGridCellElement.idl:
        * html/HTMLDataGridColElement.cpp:
        * html/HTMLDataGridColElement.h:
        * html/HTMLDataGridColElement.idl:
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridElement.idl:
        * html/HTMLDataGridRowElement.cpp:
        * html/HTMLDataGridRowElement.h:
        * html/HTMLDataGridRowElement.idl:

2009-06-24  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Oliver Hunt.

        Bug 26668: AX: need a way to retrieve the language for an element
        
        Provides a way to retrieve the language associated with a specific accessibility element.

        Test: accessibility/language-attribute.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::language):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::language):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2009-06-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein.
        
        <rdar://problem/6893811> Instead of downloading files linked from Google Earth, file contents displayed in browser window as text.

        * platform/network/mac/WebCoreURLResponse.mm:
        (createBinaryExtensionsSet): Add '.kmz' to the list of known-to-be-binary extensions.

2009-06-24  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26685
        Accomodate for backwards-incompatible skia api changes.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::setCompositeOperation):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::State::State):
        (PlatformContextSkia::setupPaintCommon):
        (PlatformContextSkia::setXfermodeMode):
        (PlatformContextSkia::applyClipFromImage):
        * platform/graphics/skia/PlatformContextSkia.h:
        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::):
        (WebCore::WebCoreCompositeToSkiaComposite):
        * platform/graphics/skia/SkiaUtils.h:

2009-06-24  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix. Add files that were added in r45093 and r45096

        * GNUmakefile.am:

2009-06-24  Brady Eidson  <beidson@apple.com>

        Fix 64-bit SnowLeopard build.

        * html/DataGridColumnList.cpp:
        (WebCore::DataGridColumnList::remove):
        (WebCore::DataGridColumnList::move):

2009-06-24  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26392
        Bug 26392: In html, modification of xlink:href of an newly inserted svg image does not work.
        https://bugs.webkit.org/show_bug.cgi?id=26328
        Bug 26328: changing href attribute of svg images does not work when changing display attribute as well

        React to href updates even when there is no renderer, i.e. display=none.

        Tests: svg/custom/js-update-image-and-display.svg
               svg/custom/js-update-image-and-display2.svg
               svg/custom/js-update-image-and-display3.svg

        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):

2009-06-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        Add basic back-end column support to datagrid.

        Added fast/dom/HTMLDataGridElement/ column tests.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/DataGridColumn.cpp: Added.
        (WebCore::DataGridColumn::setPrimary):
        * html/DataGridColumn.h: Added.
        (WebCore::DataGridColumn::create):
        (WebCore::DataGridColumn::id):
        (WebCore::DataGridColumn::setId):
        (WebCore::DataGridColumn::label):
        (WebCore::DataGridColumn::setLabel):
        (WebCore::DataGridColumn::type):
        (WebCore::DataGridColumn::setType):
        (WebCore::DataGridColumn::sortable):
        (WebCore::DataGridColumn::setSortable):
        (WebCore::DataGridColumn::sortDirection):
        (WebCore::DataGridColumn::setSortDirection):
        (WebCore::DataGridColumn::primary):
        (WebCore::DataGridColumn::detachFromColumnList):
        (WebCore::DataGridColumn::DataGridColumn):
        * html/DataGridColumn.idl: Added.
        * html/DataGridColumnList.cpp: Added.
        (WebCore::DataGridColumnList::~DataGridColumnList):
        (WebCore::DataGridColumnList::itemWithName):
        (WebCore::DataGridColumnList::add):
        (WebCore::DataGridColumnList::remove):
        (WebCore::DataGridColumnList::move):
        (WebCore::DataGridColumnList::clear):
        (WebCore::DataGridColumnList::primaryColumnChanged):
        * html/DataGridColumnList.h: Added.
        (WebCore::DataGridColumnList::create):
        (WebCore::DataGridColumnList::length):
        (WebCore::DataGridColumnList::item):
        (WebCore::DataGridColumnList::primaryColumn):
        (WebCore::DataGridColumnList::sortColumn):
        * html/DataGridColumnList.idl: Added.
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::sortable):
        (WebCore::HTMLDataGridColElement::setSortable):
        (WebCore::HTMLDataGridColElement::sortDirection):
        (WebCore::HTMLDataGridColElement::setSortDirection):
        * html/HTMLDataGridColElement.h:
        * html/HTMLDataGridColElement.idl:
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::HTMLDataGridElement):
        * html/HTMLDataGridElement.h:
        (WebCore::HTMLDataGridElement::columns):
        * html/HTMLDataGridElement.idl:
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::paintObject):
        (WebCore::RenderDataGrid::paintColumnHeaders):
        (WebCore::RenderDataGrid::rebuildColumns):
        * rendering/RenderDataGrid.h:
        (WebCore::RenderDataGrid::gridElement):

2009-06-24  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Partially fixes: https://bugs.webkit.org/show_bug.cgi?id=24735
        (<rdar://problem/5015942>)
        Where on windows it was not possible to set an element as the drag
        image using setDragImage on the dataTransfer object.
        
        Does not "fix" the case of dragging a link where the default link image
        is still used, even when the -webkit-user-drag is set to "element". This
        is the same behavior as is found on OS X.
        
        Added a manual test because it is not possible to check that what is
        contained in the image snapshot is indeed the requested element.

        * dom/Clipboard.h:
        (WebCore::Clipboard::dragImageElement):
        Made getting the raw pointer from the RefPtr a const operation.
        * manual-tests/drag-with-div-or-image-as-data-image.html: Added.
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::createDragImage):
        Get an image of the rendered element and its subtree.

2009-06-24  Darin Fisher  <darin@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26683
        Fix Chromium build bustage: Add custom binding for HTMLDataGridElement.dataSource

        This change just adds a stub implementation for now to help fix the build.

        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8HTMLDataGridElementCustom.cpp: Added.

2009-06-24  David Kilzer  <ddkilzer@apple.com>

        Build fixes for ENABLE(PLUGIN_PROXY_FOR_VIDEO)

        Reviewed by Adam Roben.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::deliverNotification): Removed
        ExceptionCode parameter from togglePlayState().
        (WebCore::HTMLMediaElement::initialURL): Don't convert a KURL
        object to a String when assigning to a KURL variable.

2009-06-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Treat.

        Save memory by not storing attribute values in member variables, if not absolutely needed.
        Also fixes bugs where we're substituting variables too early (noticeable with the upcoming <select> element).

        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::parseMappedAttribute):
        (WebCore::WMLDoElement::label):
        * wml/WMLDoElement.h:
        * wml/WMLFieldSetElement.cpp:
        (WebCore::WMLFieldSetElement::insertedIntoDocument):
        * wml/WMLFieldSetElement.h:
        * wml/WMLOptGroupElement.cpp:
        (WebCore::WMLOptGroupElement::title):
        (WebCore::WMLOptGroupElement::parseMappedAttribute):
        (WebCore::WMLOptGroupElement::groupLabelText):
        * wml/WMLOptGroupElement.h:
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::name):
        (WebCore::WMLPostfieldElement::value):
        (WebCore::WMLPostfieldElement::encodeData):
        * wml/WMLPostfieldElement.h:
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::parseMappedAttribute):
        (WebCore::WMLSetvarElement::name):
        (WebCore::WMLSetvarElement::value):
        * wml/WMLSetvarElement.h:
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::parseMappedAttribute):
        (WebCore::WMLTimerElement::insertedIntoDocument):
        (WebCore::WMLTimerElement::timerFired):
        (WebCore::WMLTimerElement::start):
        (WebCore::WMLTimerElement::value):
        * wml/WMLTimerElement.h:

2009-06-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Adam Roben.

        Forgot to initialize m_task member variable. Results in crashes sometimes.

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

2009-06-24  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Not reviewed. Forgot to include within last patch.

        * manual-tests/wml/card-title-attr.wml: Added.

2009-06-24  Wajahat Siddiqui <wajahatmeister@gmail.com>
 
        Reviewed by Nikolas Zimmermann.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=26474
        Adding WML <card> title attribute handling.

        * wml/WMLElement.h: marking parseValueSubstitutingVariableReferences and parseValueForbiddingVariableReferences as const
        * wml/WMLElement.cpp:
        * wml/WMLCardElement.h: 
        (WebCore::WMLCardElement::title):
        * wml/WMLCardElement.cpp:
        * wml/manual-test/card-title-attr.wml: Manual test  
 
2009-06-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix the build without ENABLE_VIDEO.

        * html/CanvasRenderingContext2D.cpp: Add #if ENABLE guards.
        * html/CanvasRenderingContext2D.h: Ditto.

2009-06-24  Siddhartha Chattopadhyay  <sidchat@google.com>

        Reviewed by Eric Seidel.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26200 which I introduced earlier. I had
        the smartReplace set TRUE initially, which was wrong since the purpose of this call is
        to just replace the selection, and place the caret at the end of the selection it replaced.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        * manual-tests/textarea-caret-position-after-auto-spell-correct.html: Added.

2009-06-24  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        Don't use an unsigned int for intervalInMS because we sometimes initialize
        it with a negative value.

        * platform/wx/SharedTimerWx.cpp:
        (WebCore::setSharedTimerFireTime):

2009-06-24  Eric Seidel  <eric@webkit.org>

        No review, build fix only.

        The previous checkin had an improper merge.  This fixes the build.

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):

2009-06-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=25922
        JS setting dropEffect = "none" causes tryDHTMLDrag
        to return DragOperationNone.  Which is also the value
        tryDHTMLDrag previously used to indicate JS did not
        want to handle the drag.

        Make it possible for the DragController::try* methods
        to return a bool to indicate if javascript accepted
        or rejected the drag event, separate from the DragOperation.

        Tests:
        - fast/events/drag-to-navigate.html
        - fast/events/prevent-drag-to-navigate.html

        * page/DragController.cpp:
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::defaultOperationForDrag):
        (WebCore::DragController::tryDHTMLDrag):
        * page/DragController.h:

2009-06-23  Oliver Hunt  <oliver@apple.com> and Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig and Dave Hyatt.

        <rdar://problem/6164797> Add Canvas API to allow drawing of <video> frames
        <https://bugs.webkit.org/show_bug.cgi?id=25920>

        Add support for drawing the contents of the video element to the canvas
        in accordance with the current HTML5 draft.

        Test: media/video-canvas.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::drawImage):
          Standard custom bindings stuff we need to do for all canvas methods.
        * html/CanvasRenderingContext2D.cpp:
        (WebCore::size): Helper function for finding the size of a video element
        (WebCore::CanvasRenderingContext2D::checkOrigin): moved up in the file.
        (WebCore::CanvasRenderingContext2D::drawImage): The various overloads of HTML5's drawImage(<video>)
        * html/CanvasRenderingContext2D.h:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hasSingleSecurityOrigin):
          hasSingleSecurityOrigin is needed for security, currently all implementations are trivial
          as we force QT to maintain a single origin.
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::paint): 
            Paint routine on video so we don't have to look at MediaPlayer directly
        * html/HTMLVideoElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::hasSingleSecurityOrigin):
        (WebCore::MediaPlayer::hasSingleSecurityOrigin):
            Default implementations of hasSingleSecurityOrigin
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
            A video may need a player now even if it is not visible.
        (WebCore::MediaPlayerPrivate::hasSingleSecurityOrigin):
            Always return true due to restrictions we've placed on QT.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::paint):
            Jump through some hoops to allow windows QT to draw to an intermediate buffer.
            In the long term we'd like to cache the HDC, but this will do for now.
        (WebCore::MediaPlayerPrivate::hasSingleSecurityOrigin):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
            As for Mac we force QT to only allow same origin loads.

2009-06-23  Adam Langley  <agl@google.com>

        Reviewed by Eric Seidel.

        Chromium: Fix crash with inherited font-size in <option>

        https://bugs.webkit.org/show_bug.cgi?id=26656
        http://code.google.com/p/chromium/issues/detail?id=14853

        In r42597 (https://bugs.webkit.org/show_bug.cgi?id=25244), I changed
        the <select> handing for Chromium to fix a rendering bug. However,
        although the font-size is correctly ignored, getRowHeight wasn't
        updated and so was calculating the height of the rows in an
        inconsistent manner. This can lead to a crash.

        * manual-tests/optgroup-empty-and-nested.html: adding test case for crash
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::getRowHeight):

2009-06-23  Brady Eidson  <beidson@apple.com>

        Patch by Antti Koivisto.
        Reviewed by Brady Eidson.

        <rdar://problem/6988010> Failed resources not reloaded when built against Tiger SDK

        A latent bug that cache revalidation uncovered.  When a CachedResource failed to load,
        it should always be revalidated upon reload.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::canUseCacheValidator):
        (WebCore::CachedResource::mustRevalidate):

2009-06-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6634228> Crash in [NSScroller mouseDown:] beneath
          EventHandler::passMouseDownEventToWidget()

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseDownEventToWidget): Surround the
        -mouseDown: call with calls to Widget::beforeMouseDown() and
        Widget::afterMouseDown(), which prevent the widget's view hierarchy from
        being removed from its parent view while the scroller is tracking the
        mouse.

2009-06-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26516
        Add initial implementation of DataGridDataSource

        - Initial implementation only supports the initialize callback function.

        Test: fast/dom/HTMLDataGridElement/DataGridDataSource-basic.html

        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDataGridDataSource.cpp: Added.
        (WebCore::JSDataGridDataSource::JSDataGridDataSource):
        (WebCore::JSDataGridDataSource::~JSDataGridDataSource):
        (WebCore::JSDataGridDataSource::initialize):
        * bindings/js/JSDataGridDataSource.h: Added.
        (WebCore::JSDataGridDataSource::create):
        (WebCore::JSDataGridDataSource::isJSDataGridDataSource):
        (WebCore::JSDataGridDataSource::jsDataSource):
        (WebCore::asJSDataGridDataSource):
        * bindings/js/JSHTMLDataGridElementCustom.cpp: Added.
        (WebCore::JSHTMLDataGridElement::listener):
        (WebCore::JSHTMLDataGridElement::setListener):
        * html/DataGridDataSource.h: Added.
        (WebCore::DataGridDataSource::~DataGridDataSource):
        (WebCore::DataGridDataSource::isJSDataGridDataSource):
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::HTMLDataGridElement):
        (WebCore::HTMLDataGridElement::setDataSource):
        (WebCore::HTMLDataGridElement::initializationTimerFired):
        * html/HTMLDataGridElement.h:
        (WebCore::HTMLDataGridElement::dataSource):
        * html/HTMLDataGridElement.idl:

2009-06-23  Ryosuke Niwa  <rniwa@google.com>

        Reviewed by Justin Garcia.

        Undo the changeset 21212 to fix the regression bug 14062.
        The changeset 21212 attempted to fix rdar://problem/5002441.
        The changeset 21212 modified InsertTextCommand::input so as to convert
        all spaces in text to non-breaking spaces for rdar://problem/5002441.
        However, the bug was originally caused by rebalanceWhitespaceAt
        and this workaround introduced a regression bug 14062.
        Because rebalanceWhitespaceAt appears to behave correctly now,
        the workaround introduced in 21212 is no longer needed.

        Test: editing/inserting/space-after-removeformat.html

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):

2009-06-23  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26523 <col> 
        elements width can't be changed with javascript

        This patch both fixes setting the width attribute directly in 
        JavaScript, and setting the width on the style attribute. 

        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::parseMappedAttribute): If we have a 
        new width, call setNeedsLayoutAndPrefWidthsRecalc()

        Call calcPrefWidths() on the table cols.
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        
        Call layoutIfNeeded on the table cols.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::clippedOverflowRectForRepaint): Use new 
        table() convenience function.
        (WebCore::RenderTableCol::calcPrefWidths): Just call 
        setPrefWidthsDirty(false) on ourself and our children.
        (WebCore::RenderTableCol::table):
        * rendering/RenderTableCol.h:

2009-06-23  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dan Bernstein.

        Add logic to CSSStyleDeclaration::diff to deal with font-sizes that are 
        keyword values. When diff is called on a CSSStyleDeclaration, we check
        the keywordSize to see if font-size matches a keyword value.
        
        This ensures that when we diff a CSSMutableStyleDeclaration returned from
        copyInheritableProperties on a CSSComputedStyleDeclaration that we 
        correctly identify matching font-sizes.
        
        https://bugs.webkit.org/show_bug.cgi?id=26279

        Test: editing/inserting/font-size-clears-from-typing-style.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::cssPropertyMatches):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::cssPropertyMatches):
        (WebCore::CSSStyleDeclaration::diff):
        * css/CSSStyleDeclaration.h:

2009-06-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6994790> CrashTracer: [USER] 8 crashes in Mail trying to
        add a blank line to pasted Facebook content (under
        CompositeEditCommand::positionAvoidingSpecialElementBoundary)

        - Just added null checks and I will create a new bug to prevent the
        bad behavior.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::positionAvoidingSpecialElementBoundary):

2009-06-23  Simon Fraser  <simon.fraser@apple.com>

        Build fix.

        Wrap shouldDoSoftwarePaint() in #if USE(ACCELERATED_COMPOSITING) to avoid warning when 
        ACCELERATED_COMPOSITING is not defined.

        * rendering/RenderLayer.cpp:

2009-06-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.
        
        https://bugs.webkit.org/show_bug.cgi?id=24863
        
        Fix reflection painting on elements with compositing layers.

        Test: compositing/reflections/reflection-on-composited.html

        * rendering/RenderLayer.h:
        Add a new PaintLayerPaintingReflection flag which is set while painting inside
        reflections.
        (WebCore::RenderLayer::setPaintingInsideReflection):
        Add a setter so that RenderLayerBacking can call it.

        * rendering/RenderLayer.cpp:
        (WebCore::shouldDoSoftwarePaint):
        Utility to clarify the logic of when a composited layer should do a software paint.
        
        (WebCore::RenderLayer::paintLayer):
        Use shouldDoSoftwarePaint() to determine when to software-paint a reflected layer.
        Remove transform-related tests from the reflection-painting if test because they appear
        to be unnecessary.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        Add the code to paint reflections to the composited layer painting method.
        
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        Set the PaintLayerPaintingReflection flag.

2009-06-23  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=26643
        Memory cache should respect Cache-Control: no-store
        
        Make resources with Cache-Control: no-store uncacheable in the memory cache.
        They get evicted immediately when all clients are gone and are always
        reloaded from the server.

        Conforms to RFC2616 14.9.2 and seems also match Firefox behavior.

        * loader/CachedResource.cpp:
        (WebCore::CachedResource::removeClient):
        (WebCore::CachedResource::canUseCacheValidator):
        (WebCore::CachedResource::mustRevalidate):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::ResourceResponseBase::cacheControlContainsNoStore):
        * platform/network/ResourceResponseBase.h:

2009-06-23  Brady Eidson  <beidson@apple.com>

        Windows build fix.

        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWin::play):
        (QTMovieWin::pause):
        (QTMovieWin::setRate):
        (QTMovieWin::setCurrentTime):

2009-06-23  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/6902203> REGRESSION: 'Return' insertion point incorrect
        after manually quoting blank line then hitting return

        If the insertion point is both the begining and ending visible position
        then we need to insert at the end instead of the begining, which is what
        would normally happen if the insertion point was as the begining.

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

2009-06-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig, and looked over by Eric Carlson.

        <rdar://problem/6980466> Media elements should provide option for changing pitch correction

        Introduce a new boolean property to HTMLMediaElement called webkitPreservesPitch for script to control this.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Currently the platforms that have a flexible pitch preservation 
          property (Quicktime on Mac and Win) have had it on by default, so continue that default for now.
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::webkitPreservesPitch):
        (WebCore::HTMLMediaElement::setWebkitPreservesPitch):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::setPreservesPitch):
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::preservesPitch):
        (WebCore::MediaPlayer::setPreservesPitch):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setPreservesPitch):

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::createQTMovie): Rework to allow recreation of the movie with almost the
          exact same attributes as before, with pitch preservation being the difference.
        (WebCore::MediaPlayerPrivate::setPreservesPitch): Recreate the QTMovie if the flag actually changes.
        (WebCore::MediaPlayerPrivate::updateStates): Restore current time and rate if this is a recreated movie.
        (WebCore::MediaPlayerPrivate::timeChanged): Clear the time-to-be-restored, as this callback means it
          has been effectively overwritten.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::setPreservesPitch):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/win/QTMovieWin.cpp:
        (QTMovieWinPrivate::QTMovieWinPrivate):
        (QTMovieWinPrivate::~QTMovieWinPrivate):
        (QTMovieWinPrivate::task): Restore current time and rate if this is a re-created movie.
        (QTMovieWin::play): Clear the time-to-be-restored, as this effectively overwrites it.
        (QTMovieWin::pause): Ditto.
        (QTMovieWin::setRate): Ditto.
        (QTMovieWin::setCurrentTime): Ditto.
        (QTMovieWin::setPreservesPitch): Recreate the Movie if the flag actually changes.
        (QTMovieWin::load): Rework to allow recreation of the Movie with similar state as the movie before it, 
          but changing the pitch preservation flag.
        * platform/graphics/win/QTMovieWin.h:

2009-06-23  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6998286> Crash after leaving page with <video>
        
        Don't try to post events after going into the page cache.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::documentWillBecomeInactive): Cancel pending events and stop
        event timers so we won't try to post events after going into the cache.

2009-06-23  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Brady Eidson.

        Simplify the interaction between LocalStorageArea/SessionStorageArea
        and StorageArea by creating a "blockUntilImportComplete()" function
        rather than bouncing back and forth between the child and parent
        classes in a somewhat unintuitive manner.

        This patch also paves the way for LocalStorageArea and
        SessionStorageArea being merged into one.  It's part of several in a
        set which are separating syncing (to disk) code from the rest of the
        implementation so that local storage and session storage's code can be
        unified.

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

        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::blockUntilImportComplete):
        * storage/LocalStorageArea.h:
        * storage/StorageArea.cpp:
        (WebCore::StorageArea::length):
        (WebCore::StorageArea::key):
        (WebCore::StorageArea::getItem):
        (WebCore::StorageArea::setItem):
        (WebCore::StorageArea::removeItem):
        (WebCore::StorageArea::clear):
        (WebCore::StorageArea::contains):
        * storage/StorageArea.h:
        (WebCore::StorageArea::blockUntilImportComplete):

2009-06-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        First part of https://bugs.webkit.org/show_bug.cgi?id=26652
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        Replace the 3 boolean params to RenderLayer::paintLayer() with a bit mask for readability.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        Remove the unused 'haveTransparency' param to paintIntoLayer().

2009-06-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6997929> Assertion at WebCore::RenderLayer::updateClipRects with hardware acceleration

        The updatingControlTints() painting pass goes through compositing layer boundaries,
        so we need to ensure we don't cache clip rects computed with the wrong root by
        setting temporaryClipRects to true.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentOffsetInCompostingLayer):
        Remove a printf that I left in by mistake.

2009-06-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        WebCore side of <rdar://problem/6946094>.
        
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::setExternalDataObject):
        * platform/win/ClipboardWin.h:

2009-06-23  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

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

        Add setFormContentType and setFormData since it is awkward for Chromium
        to use setFormInfoFromRequest to set the underlying members.  Also, add
        a clearChildren method that Chromium needs.  These methods are used as
        part of the Chromium code that serializes a HistoryItem for storing in
        the browser's session history.

        * history/HistoryItem.cpp:
        * history/HistoryItem.h:

2009-06-23  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6978938> Need HTML 5 event attributes for media elements

        Test: media/event-attributes.html

        * html/HTMLAttributeNames.in: Add media event attribute names.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseMappedAttribute): Handle media event attributes.

2009-06-23  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Fix Qt build with Phonon.

        The #include <phonon> header no longer exists. And the <Phonon> or
        <Phonon/Phonon> headers have never existed (neither for us nor for the
        Phonon sources). You have to select each and every header that you do
        want now.

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:

2009-06-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Remove duplicated code in Qt & GTK logging initialization

        We now share the getChannelFromName() function in Logging.cpp

        * platform/gtk/LoggingGtk.cpp:
        * platform/qt/LoggingQt.cpp:

2009-06-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Rename the plugin logging channel to plural form 'Plugins'

        This matches both the other logging channel names, as well as the
        WebKit logging channel used by Safari/Mac for plugins.

        * platform/Logging.cpp:
        * platform/Logging.h:
        * platform/gtk/LoggingGtk.cpp:
        * platform/mac/LoggingMac.mm:
        * platform/qt/LoggingQt.cpp:
        * platform/win/LoggingWin.cpp:
        * plugins/PluginDebug.h:
        * plugins/gtk/PluginPackageGtk.cpp:
        * plugins/mac/PluginPackageMac.cpp:
        * plugins/mac/PluginViewMac.cpp:
        * plugins/qt/PluginPackageQt.cpp:

2009-06-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Fix NPAPI mouse translation issues on Mac

        The WindowRef we pass to the plugin refers to the the top level window,
        so the x and y positions have to be relative to this position, but we
        have to manually compensate for title bar decorations and other parents
        of the QWebView since contentsToWindow() only traverses to the QWebView.

        Previously we did this compensation when passing on mouse coordinates to
        the plugin, which caused various issues with translations such as not
        being able to close the Flash settings dialog, or the hand cursor not
        appearing over links.

        We now do the compensation as part of the call to NPP_SetWindow, and
        then pass mouse coordinates in global context without any compensation,
        similar to how both Safari and Mozilla does it.

        * plugins/mac/PluginViewMac.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::globalMousePosForPlugin):

2009-06-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] Resolve absolute path to library install_name manually

        Since our target.path is set to the Qt directory (to be able
        to do 'make install') the 'absolute_library_soname' option
        to QMake did not do the right thing.

        We now compute the absolute path manually using DESTDIR.

        * WebCore.pro:

2009-06-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6991146> Scrollbars in hardware layers don't change to the
        inactive look in background windows

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):
        Don't short-circuit the "painting" pass that is used to udpate control tints.

2009-06-22  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=26567
        Upstream V8 bindings code generator. With this change, also added interface ancestor
        traversal to IDL parser, which is necessary for V8 bindings. The traversal is used
        to determine whether an interface is a Node to facilitate proper casting and storage
        in V8DOMMap.

        * bindings/scripts/CodeGenerator.pm: Added parent traversal sub, needed
            by V8 bindings.
        * bindings/scripts/CodeGeneratorV8.pm: Added.
        * bindings/scripts/IDLParser.pm: Modified to allow limited parsing for
            parent traversal cases.

2009-06-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough.

        Add event handler attribute getter/setters to HTMLFrameSetElement
        as specified in HTML 5.  These match the ones on HTMLBodyElement.

        * dom/Node.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        (WebCore::HTMLFrameSetElement::onblur):
        (WebCore::HTMLFrameSetElement::setOnblur):
        (WebCore::HTMLFrameSetElement::onerror):
        (WebCore::HTMLFrameSetElement::setOnerror):
        (WebCore::HTMLFrameSetElement::onfocus):
        (WebCore::HTMLFrameSetElement::setOnfocus):
        (WebCore::HTMLFrameSetElement::onload):
        (WebCore::HTMLFrameSetElement::setOnload):
        (WebCore::HTMLFrameSetElement::onbeforeunload):
        (WebCore::HTMLFrameSetElement::setOnbeforeunload):
        (WebCore::HTMLFrameSetElement::onmessage):
        (WebCore::HTMLFrameSetElement::setOnmessage):
        (WebCore::HTMLFrameSetElement::onoffline):
        (WebCore::HTMLFrameSetElement::setOnoffline):
        (WebCore::HTMLFrameSetElement::ononline):
        (WebCore::HTMLFrameSetElement::setOnonline):
        (WebCore::HTMLFrameSetElement::onresize):
        (WebCore::HTMLFrameSetElement::setOnresize):
        (WebCore::HTMLFrameSetElement::onstorage):
        (WebCore::HTMLFrameSetElement::setOnstorage):
        (WebCore::HTMLFrameSetElement::onunload):
        (WebCore::HTMLFrameSetElement::setOnunload):
        * html/HTMLFrameSetElement.h:
        * html/HTMLFrameSetElement.idl:

2009-06-22  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 25425: DOM attribute getter/setter functions should use const AtomicString& type
        https://bugs.webkit.org/show_bug.cgi?id=25425

        * bindings/scripts/CodeGeneratorJS.pm: Added handling for ReflectURL.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.

        * dom/Element.cpp:
        (WebCore::Element::getURLAttribute): Added. For use implementing getters
        for ReflectURL.
        * dom/Element.h: Added getURLAttribute.

        * html/HTMLImageElement.idl: Use Reflect and ReflectURL.

2009-06-22  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 26626: Make WorkerContextExecutionProxy::toV8Object handle exception
        objects.
        https://bugs.webkit.org/show_bug.cgi?id=26626

        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::ToV8Object):

2009-06-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Add RenderDataGrid to the build.  Give it some basic default styling (that more or less matches a listbox).  It has a default size
        of 300x150.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/html4.css:
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::createRenderer):
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridElement.idl:
        * rendering/RenderDataGrid.cpp: Added.
        (WebCore::RenderDataGrid::RenderDataGrid):
        (WebCore::RenderDataGrid::~RenderDataGrid):
        (WebCore::RenderDataGrid::calcPrefWidths):
        (WebCore::RenderDataGrid::paintObject):
        (WebCore::RenderDataGrid::valueChanged):
        (WebCore::RenderDataGrid::invalidateScrollbarRect):
        (WebCore::RenderDataGrid::isActive):
        * rendering/RenderDataGrid.h: Added.
        (WebCore::RenderDataGrid::renderName):
        (WebCore::RenderDataGrid::canHaveChildren):
        (WebCore::RenderDataGrid::scrollbarCornerPresent):

2009-06-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=26430
        <rdar://problem/6944442> Elements jump around when they become composited (WWDC checkers demo)
        <rdar://problem/6989006> Lots of time spent in RenderLayerCompositor::calculateCompositedBounds()
            during window resize when using hardware layers
        
        Fix an ordering dependency which caused the compositing position of a layer
        to be affected by some later sibling, which affected the compositing ancestor's
        composited bounds.
        
        The fix is to only update the compositing positions of layers in some subtree
        when updateAfterLayout() has been called on all the layers in that subtree,
        from the ancestor down.
        
        Also cache the composited bounds of a RenderLayerBacking, now that we can
        guarantee that those bounds are accurate.
        
        Test: compositing/sibling-positioning.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::hitTestLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateAfterLayout):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::contentOffsetInCompostingLayer):
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::RenderLayerBacking::compositedBounds):
        (WebCore::RenderLayerBacking::setCompositedBounds):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::layerWillBeRemoved):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateCompositingChildrenGeometry):
        * rendering/RenderLayerCompositor.h:

2009-06-22  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        First step in https://bugs.webkit.org/show_bug.cgi?id=25376

        Add StorageSyncManager.cpp/h

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:

        In preparation for combining SessionStorage and LocalStorage into a
        single StorageManager, move the syncing bits out of LocalStorage and
        into its own class.

        The next step is to combine LocalStorageArea and SessionStorageArea
        into one.  Then SessionStorage and LocalStorage can be combined.

        Note that combining them will cut down on code paths that must be
        proxied, eliminate virtual dispatch, and allow Chromium to (eventually)
        write historical sessionStorage to disk when memory is getting tight.

        Also remove a couple bits of cruft including code for quotas which is
        unnecessary (since a meta-data db is unnecessary since you can just
        count bytes as you read the local storage databases into memory).

        * storage/LocalStorage.cpp:
        (WebCore::LocalStorage::LocalStorage):
        (WebCore::LocalStorage::storageArea):
        (WebCore::LocalStorage::close):
        * storage/LocalStorage.h:
        * storage/LocalStorageArea.cpp:
        (WebCore::LocalStorageArea::LocalStorageArea):
        (WebCore::LocalStorageArea::scheduleFinalSync):
        (WebCore::LocalStorageArea::syncTimerFired):
        (WebCore::LocalStorageArea::performImport):
        * storage/LocalStorageArea.h:
        (WebCore::LocalStorageArea::create):
        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::performTask):
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::):
        (WebCore::LocalStorageTask::createImport):
        * storage/LocalStorageThread.cpp:
        * storage/LocalStorageThread.h:
        * storage/SessionStorage.h:
        * storage/StorageSyncManager.cpp: Copied from WebCore/storage/LocalStorage.cpp.
        (WebCore::StorageSyncManager::create):
        (WebCore::StorageSyncManager::StorageSyncManager):
        (WebCore::StorageSyncManager::fullDatabaseFilename):
        (WebCore::StorageSyncManager::close):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        * storage/StorageSyncManager.h: Copied from WebCore/storage/LocalStorage.h.
        (WebCore::):

2009-06-22  Darin Fisher  <darin@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26622
        Add ChromiumDataObject::copy()

        * platform/chromium/ChromiumDataObject.cpp:
        * platform/chromium/ChromiumDataObject.h:

2009-06-22  Timothy Hatcher  <timothy@apple.com>

        Add a silhouette image for the enable view of the Resource panel.

        Reviewed by Kevin McCullough.

        * inspector/front-end/Images/resourcesSilhouette.png: Added.
        * inspector/front-end/inspector.css:

2009-06-22  Kyle Prete  <kylep@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=26552
        Add V8 JS bindings for Audio Constructor.

        * bindings/v8/custom/V8CustomBinding.h:
        Added a callback declaration for audio ctor to macro.
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        Added the whole file.

2009-06-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26600
        StringImpl::copy() no longer copies empty string correctly

        * platform/text/StringImpl.cpp:
        (WebCore::StringImpl::ustring): Changed method calling syntax to look less like calling a
        static method.
        (WebCore::StringImpl::copy): Reverted part of r41917 that caused the problem.

2009-06-22  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Eric Seidel

        Not auto-testable since it involves sending a keyboard event to
        the popup, which is not possible (eventSender sends the key
        events through webview, we want to go through the webwidget).

        This patch is one part of the fix for issue "keyboard selection in
        Hebrew select element does not work in Windows". The other part of the
        fix is in chromium's webkit/glue layer.
        https://bugs.webkit.org/show_bug.cgi?id=25899

        * manual-tests/keyboard_select_non_english.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::isCharacterTypeEvent): Added. Check whether the event is a 
        character type event. "Char" in Windows or "KeyDown" in Mac is character
        type event.
        (WebCore::PopupListBox::typeAheadFind): Since m_lastCharTime is used to
        indicate whether user types multiple characters continuely as a search
        prefix or not, it should be only assigned when the event is character 
        type event. 

2009-06-22  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/6115819> Notify of profile start in console

        Put a message in the console that announces that a profile has started,
        similar to how a console message announces that a profile has finished.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfile): Use renamed function.
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        Renamed.
        (WebCore::InspectorController::addStartProfilingMessageToConsole):
        New function that logs the message about the profile starting.
        (WebCore::InspectorController::startUserInitiatedProfiling): Ditto
        * inspector/InspectorController.h:
        * inspector/front-end/ProfilesPanel.js: Print the "run" of the profile's
        title if there are multiple profiles, and take into account the fact
        that titles are displayed twice as much now.
        (WebInspector.ProfilesPanel.prototype.displayTitleForProfileLink):
        * page/Console.cpp:
        (WebCore::Console::profile): Call new function.

2009-06-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        Add IDL interface for datagrid cell elements.  Add a few more properties to the datagrid itself that
        correspond to ones you find on <select> elements.

        Add an expanded property to row elements.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLAttributeNames.in:
        * html/HTMLDataGridCellElement.cpp: Added.
        (WebCore::HTMLDataGridCellElement::HTMLDataGridCellElement):
        (WebCore::HTMLDataGridCellElement::label):
        (WebCore::HTMLDataGridCellElement::setLabel):
        (WebCore::HTMLDataGridCellElement::focused):
        (WebCore::HTMLDataGridCellElement::setFocused):
        (WebCore::HTMLDataGridCellElement::checked):
        (WebCore::HTMLDataGridCellElement::setChecked):
        (WebCore::HTMLDataGridCellElement::indeterminate):
        (WebCore::HTMLDataGridCellElement::setIndeterminate):
        (WebCore::HTMLDataGridCellElement::progress):
        (WebCore::HTMLDataGridCellElement::setProgress):
        * html/HTMLDataGridCellElement.h: Added.
        (WebCore::HTMLDataGridCellElement::endTagRequirement):
        (WebCore::HTMLDataGridCellElement::tagPriority):
        * html/HTMLDataGridCellElement.idl: Added.
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::autofocus):
        (WebCore::HTMLDataGridElement::setAutofocus):
        (WebCore::HTMLDataGridElement::disabled):
        (WebCore::HTMLDataGridElement::setDisabled):
        (WebCore::HTMLDataGridElement::size):
        (WebCore::HTMLDataGridElement::setSize):
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridElement.idl:
        * html/HTMLDataGridRowElement.cpp:
        (WebCore::HTMLDataGridRowElement::checkDTD):
        (WebCore::HTMLDataGridRowElement::expanded):
        (WebCore::HTMLDataGridRowElement::setExpanded):
        * html/HTMLDataGridRowElement.h:
        * html/HTMLDataGridRowElement.idl:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:

2009-06-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Add event handler attribute getter/setters to HTMLBodyElement
        as specified in HTML 5.

        - Removes erroneous inclusion of the onresize and onunload event
        handler attributes in Element and Document.

        * dom/Document.cpp:
        (WebCore::Document::getWindowAttributeEventListener):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.cpp:
        * dom/Node.h: onblur, onerror, onfocus, and onload all need to be declared
        virtual, since their behavior for HTMLBodyElement differs from the base
        implementation.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::onblur):
        (WebCore::HTMLBodyElement::setOnblur):
        (WebCore::HTMLBodyElement::onerror):
        (WebCore::HTMLBodyElement::setOnerror):
        (WebCore::HTMLBodyElement::onfocus):
        (WebCore::HTMLBodyElement::setOnfocus):
        (WebCore::HTMLBodyElement::onload):
        (WebCore::HTMLBodyElement::setOnload):
        (WebCore::HTMLBodyElement::onbeforeunload):
        (WebCore::HTMLBodyElement::setOnbeforeunload):
        (WebCore::HTMLBodyElement::onmessage):
        (WebCore::HTMLBodyElement::setOnmessage):
        (WebCore::HTMLBodyElement::onoffline):
        (WebCore::HTMLBodyElement::setOnoffline):
        (WebCore::HTMLBodyElement::ononline):
        (WebCore::HTMLBodyElement::setOnonline):
        (WebCore::HTMLBodyElement::onresize):
        (WebCore::HTMLBodyElement::setOnresize):
        (WebCore::HTMLBodyElement::onstorage):
        (WebCore::HTMLBodyElement::setOnstorage):
        (WebCore::HTMLBodyElement::onunload):
        (WebCore::HTMLBodyElement::setOnunload):
        * html/HTMLBodyElement.h:
        * html/HTMLBodyElement.idl:

2009-06-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=26601
        Remove disabled code for appcache dynamic entries

        This also removes code for DOM 3 Core DOMStringList, which we don't use for anything else yet.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * bindings/js/JSDOMStringListCustom.cpp: Removed.
        * bindings/v8/custom/V8CustomBinding.h:
        * bindings/v8/custom/V8DOMStringListCustom.cpp: Removed.
        * dom/DOMStringList.cpp: Removed.
        * dom/DOMStringList.h: Removed.
        * dom/DOMStringList.idl: Removed.
        * dom/StaticStringList.cpp: Removed.
        * dom/StaticStringList.h: Removed.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::shouldLoadResourceFromApplicationCache):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::addResource):
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::dumpType):
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::storeUpdatedType):
        * loader/appcache/DOMApplicationCache.cpp:
        * loader/appcache/DOMApplicationCache.h:
        * loader/appcache/DOMApplicationCache.idl:
        * page/DOMWindow.idl:

2009-06-22  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * DerivedSources.cpp:
        * html/HTMLElementsAllInOne.cpp:

2009-06-22  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by John Sullivan.

        <rdar://problem/6956606> REGRESSION (S4Beta -> Final): After the password is input,
        Japanese can't be input.

        WebKit uses a per-frame input context for most editable fields, and application's global
        context for password fields, manually controlling secure input state and the list of available
        input sources.

        We were setting TSMDocument property to disable non-Roman input methods after focus changed
        to a password field, but before selection was updated. This resulted in the property being
        applied to a wrong TSMDocument in some cases, because TSMGetActiveDocument() uses input
        context cached by +[NSApplication updateWindows], we change context based on selection,
        not on focus.

        * page/mac/FrameMac.mm: (WebCore::Frame::setUseSecureKeyboardEntry): Since there is only one
        context that we use for password fields - the global one - there is no need to get the active
        one.

2009-06-22  David Levin  <levin@chromium.org>

        Reviewed by David Hyatt and Eric Seidel.

        REGRESSION: When the main page (ScrollView) has a custom scrollbar, it crashes on destruction.
        https://bugs.webkit.org/show_bug.cgi?id=26326

        Test: scrollbars/scrollbar-crash-on-refresh.html

        * dom/Document.cpp:
        (WebCore::Document::detach):
        Gives the FrameView a change to do any necessary cleanup on
        Document::detach() which is where the renderArena gets detroyed.
        * page/FrameView.cpp:
        (WebCore::FrameView::detachCustomScrollbars):
        Gets rid of any custom scrollbars (if the docment supplied them).
        * page/FrameView.h:
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::isCustomScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        Removed the check for document()->frame().  If frame() is 0 in this code,
        then the call to animation() is also incorrect (since it does document()->frame()->animation()).
        * rendering/RenderScrollbar.h:
        (WebCore::RenderScrollbar::isCustomScrollbar):

2009-06-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        - fix https://bugs.webkit.org/show_bug.cgi?id=23606
          <rdar://problem/6537777> CSS gradient not repainted when image load
          completes

        Test: fast/repaint/background-generated.html

        * rendering/RenderObject.cpp:
        (WebCore::mustRepaintFillLayers): Return true if the layer does not
        specify a size and the image uses the container size.

2009-06-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        Add IDL for HTMLDataGridRowElement.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLAttributeNames.in:
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::primary):
        (WebCore::HTMLDataGridColElement::setPrimary):
        * html/HTMLDataGridColElement.h:
        * html/HTMLDataGridColElement.idl:
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::checkDTD):
        (WebCore::HTMLDataGridElement::multiple):
        (WebCore::HTMLDataGridElement::setMultiple):
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridElement.idl:
        * html/HTMLDataGridRowElement.cpp: Added.
        (WebCore::HTMLDataGridRowElement::HTMLDataGridRowElement):
        (WebCore::HTMLDataGridRowElement::selected):
        (WebCore::HTMLDataGridRowElement::setSelected):
        (WebCore::HTMLDataGridRowElement::focused):
        (WebCore::HTMLDataGridRowElement::setFocused):
        * html/HTMLDataGridRowElement.h: Added.
        (WebCore::HTMLDataGridRowElement::tagPriority):
        * html/HTMLDataGridRowElement.idl: Added.
        * html/HTMLTagNames.in:

2009-06-19  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Holger Freyther.

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

        Fix a crash in case that the QNetworkReply::readReady signal is
        "stuck" in deferred mode due to JavaScript alert, and in the meantime,
        QNetworkreply::finished signal is received and processed before
        QNetworkReply::readReady is processed.

        * manual-tests/qt/unload-alert.html: Added.
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::setLoadMode):
        (WebCore::QNetworkReplyHandler::finish):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::forwardData):
        (WebCore::QNetworkReplyHandler::start):
        (WebCore::QNetworkReplyHandler::sendQueuedItems):
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::QNetworkReplyHandler::):

2009-06-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Fix the Qt build.

        * WebCore.pro:

2009-06-21  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Bug 25425: DOM attribute getter/setter functions should use const AtomicString& type
        https://bugs.webkit.org/show_bug.cgi?id=25425

        * bindings/scripts/CodeGeneratorJS.pm: Tweaked mechanism for includes to be a bit
        more consistent and to make SVGElement.h be included in the header rather than in
        every implementation file that includes the header. Added code to use getAttribute
        and setAttribute directly when the [Reflect] extended attribute is used.

        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.

        * html/HTMLElement.idl: Used [Reflect] for all the attributes in this class that
        reflect content attributes. Restricting this to one class for now to keep the
        patch small and start out slowly.

2009-06-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26596
        Only expose event handler attributes to elements and documents.

        Test: fast/dom/event-attribute-availability.html

        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/Node.idl:

2009-06-21  Daniel Bates  <dbates@intudata.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=26580
        
        Fix to enable XSSAuditor on child windows.
        
        Test: http/tests/security/xssAuditor/link-opens-new-window.html
        
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::isEnabled):
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        * page/XSSAuditor.h: Removed method setXSSAuditorEnabled, and field m_isEnabled.
        Moved implementation of isEnabled to XSSAuditor.cpp and changed implementation
        to query Settings.

2009-06-21  David Levin  <levin@chromium.org>

        Reviewed by NOBODY.

        Speculative windows build fix (idea by Mark Rowe).

        * WebCore.vcproj/WebCore.vcproj:

2009-06-21  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (Speculative gtk build fix).

        * GNUmakefile.am:

2009-06-21  David Levin  <levin@chromium.org>

        Reviewed by NOBODY.

        Speculative tiger build fix and a windows build fix.
        More fixes may still be in order.

        * WebCore.vcproj/WebCoreCommon.vsprops:
        * dom/default/PlatformMessagePortChannel.h:
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::tryGetMessage):

2009-06-21  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (Speculative tiger build fix).

        * dom/default/PlatformMessagePortChannel.h:
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::~MessagePortQueue):

2009-06-21  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        <https://bugs.webkit.org/show_bug.cgi?id=26448>
        
        Added optimized GC for MessagePorts when the entangled port is run by the same thread.
        Fixed bug in isProxyFor() that was not properly throwing an exception when trying to clone the entangled port.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::markActiveObjectsForContext):
        Now marks remotely entangled ports as in-use, in addition to those with pending activity.
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
        Now checks if the entangled port is local (run by same thread) and if so mark()s it.
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentangle):
        Removes cloned ports from the ScriptExecutionContext - this allows cloned ports to be GC'd as otherwise they look like remotely entangled ports.
        (WebCore::MessagePort::start):
        (WebCore::MessagePort::locallyEntangledPort):
        Added API for fetching the entangled port if it is run by the same thread
        * dom/MessagePort.h:
        * dom/MessagePortProxyWrapper.h:
        * dom/default/MessagePortProxy.cpp:
        (WebCore::MessagePortProxyWrapper::locallyEntangledPort):
        Added API for fetching the entangled port if it is run by the same thread        
        (WebCore::MessagePortProxy::hasPendingActivity):
        Changed definition of hasPendingActivity() to be stricter - only returns true if there are pending messages.
        (WebCore::MessagePortProxy::locallyEntangledPort):
        * dom/default/MessagePortProxy.h:

2009-06-21  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        <https://bugs.webkit.org/show_bug.cgi?id=25043>
        Removed obsolete MessagePort.startConversation(), active and onclose APIs.

        Refactored MessagePortProxy into MessagePortChannel and a platform-dependent PlatformMessagePortChannel
        implementation. Modified APIs to simplify cross-process implementations by moving the messaging code
        entirely into the platform-dependent proxy.

        Created a thread-safe default PlatformMessagePortChannel implementation.

        Changed DOMWindow messaging to create the MessageEvent in the target ScriptExecutionContext to match how
        cross-thread MessagePorts work.
        
        * GNUMakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            Added MessagePortChannel/PlatformMessagePortChannel files.
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::mark):
            Changed ports to not mark their entangled pair as reachable, per the spec.
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        * dom/MessageChannel.cpp:
        (WebCore::MessageChannel::MessageChannel):
            Updated to use PlatformMessagePortChannel::createChannel() to entangle the ports.
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::~MessagePort):
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentangle):
        (WebCore::MessagePort::messageAvailable):
        (WebCore::MessagePort::start):
        (WebCore::MessagePort::close):
        (WebCore::MessagePort::entangle):
        (WebCore::MessagePort::contextDestroyed):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::setOnmessage):
        (WebCore::MessagePort::hasPendingActivity):
            Changed these APIs to delegate to new PlatformMessagePortChannel APIs.
        * dom/MessagePort.h:
            Renamed isQueueOpen() to started().
        * dom/MessagePort.idl:
            Removed startConversation and onclose.
        * dom/MessagePortProxy.h: Removed.
        * dom/MessagePortChannel.cpp: Added.
        (WebCore::MessagePortChannel::EventData::create):
        (WebCore::MessagePortChannel::EventData::EventData):
        (WebCore::MessagePortChannel::~MessagePortChannel):
        * dom/MessagePortChannel.h: Added.
        (WebCore::MessagePortChannel::EventData::message):
        (WebCore::MessagePortChannel::EventData::channel):
            Changed EventData to hold a reference to a MessagePortChannel object instead of a MessagePort to enable cross-thread messaging.
        (WebCore::MessagePortChannel::MessagePortChannel):
        (WebCore::MessagePortChannel::create):        
        * dom/ScriptExecutionContext.cpp:
        (WebCore:ScriptExecutionContext::dispatchMessagePortEvents):
            Renamed isQueueOpen() to started().
        * dom/default/PlatformMessagePortChannel.cpp: Added.
        (WebCore::MessagePortChannel::entangleIfOpen):
        (WebCore::MessagePortChannel::disentangle):
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::tryGetMessageFromRemote):
        (WebCore::MessagePortChannel::close):
        (WebCore::MessagePortChannel::isConnectedTo):
        (WebCore::MessagePortChannel::hasPendingActivity):
        (WebCore::PlatformMessagePortChannel::PlatformMessagePortChannel):
        (WebCore::PlatformMessagePortChannel::~PlatformMessagePortChannel):
        (WebCore::PlatformMessagePortChannel::createChannel):
        (WebCore::PlatformMessagePortChannel::entangleIfOpen):
        (WebCore::PlatformMessagePortChannel::disentangle):
        (WebCore::PlatformMessagePortChannel::setRemotePort):
        (WebCore::PlatformMessagePortChannel::remotePort):
        (WebCore::PlatformMessagePortChannel::entangledChannel):
        (WebCore::PlatformMessagePortChannel::setEntangledChannel):
        (WebCore::PlatformMessagePortChannel::postMessageToRemote):
        (WebCore::PlatformMessagePortChannel::tryGetMessageFromRemote):
        (WebCore::PlatformMessagePortChannel::isConnectedTo):
        (WebCore::PlatformMessagePortChannel::close):
        (WebCore::PlatformMessagePortChannel::closeInternal):
        (WebCore::PlatformMessagePortChannel::hasPendingActivity):
        * dom/default/PlatformMessagePortChannel.h: Added.
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::create):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::tryGetMessage):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::appendAndCheckEmpty):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::isEmpty):
        (WebCore::PlatformMessagePortChannel::MessagePortQueue::MessagePortQueue):
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
            Changed DOMWindow messaging to create the MessageEvent in the target ScriptExecutionContext to match how cross-thread MessagePorts work.
        (WebCore::PostMessageTimer::event):
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::postMessageTimerFired):

2009-06-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=15383
          <rdar://problem/5682745> resize: vertical does not restrict to vertical
          resize

        Test: fast/css/resize-single-axis.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize): Ignore movement along the non-resizing
        axis.

2009-06-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Eric Seidel

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26578
        event.currentTarget for listener registered on window should point to the window object like in Firefox

        Test: fast/events/event-trace.html

        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent): Make the DOMWindow the currentTarget when events are dispatched
        to it. We previously used the document because DOMWindow was not yet an EventTarget.

2009-06-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - fix https://bugs.webkit.org/show_bug.cgi?id=9694
          resize value not compared

        Test: fast/css/resize-value-compared.html

        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::operator==): Compare the resize
        member.

2009-06-19  Alice Liu  <alice.liu@apple.com>

        Fix https://bugs.webkit.org/show_bug.cgi?id=26568 
        Repro crash animating GIF if previously used in a closed window's back/forward list
        Also filed as <rdar://problem/6978362>

        Reviewed by Maciej Stachowiak.

        Can't test this bug with an automated layout test since it requires b/f caching 
        * manual-tests/animated-gif-bfcache-crash.html: Added.
        * manual-tests/resources/containsAnimatedGif.html: Added.

        Adding checks for hostWindow() since there is no guarantee that the Page is alive
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollRectIntoViewRecursively):
        (WebCore::ScrollView::contentsToScreen):
        (WebCore::ScrollView::screenToContents):
        (WebCore::ScrollView::wheelEvent):

2009-06-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=26554
        Shadowing of top and parent

        * page/DOMWindow.idl:

2009-06-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Fix <https://bugs.webkit.org/show_bug.cgi?id=15106>.
        Bug 15106: REGRESSION: Can't drag text as element when user-select is set to none

        We allow selections to begin within an element that has -webkit-user-select: none set,
        unless the element is draggable as dragging should take priority over starting a selection.

        Test: editing/selection/user-drag-element-and-user-select-none.html

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

2009-06-20  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Bug 26528: REGRESSION (r44674): Assertion in TextIterator::pushFullyClippedState while counting matches for "a" on apple.com
        https://bugs.webkit.org/show_bug.cgi?id=26528
        rdar://problem/6985329

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement): When entering a text control,
        start at the top of the shadow tree (by calling shadowTreeRootNode). Also
        remove assumption that innerTextElement will never be 0 since RenderTextControl
        doesn't really guarantee this.

2009-06-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by NOBODY.

        Speculative Qt build fix - add HTMLDataGridColElement to the build script.

        * WebCore.pro:

2009-06-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

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

        Remove a memcpy by retrieving the already existing copy of a string
        instead of making a new one.

        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::source):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::source):

2009-06-19  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.
        
        https://bugs.webkit.org/show_bug.cgi?id=26488
        No Support for Single Finger or Two Finger Panning in Windows 7
        
        The code in WebCore allows us to interpret a Pan gesture as
        a mousewheel event, and we are able to reuse the scrolling code.
        Another constructor was created in WheelEventWin which takes data
        better suited to the pan guesture than what was currently there. 
        
        Unable to add tests to simulate touch behavior/gestures.

        * platform/PlatformWheelEvent.h:
        * platform/win/WheelEventWin.cpp:

2009-06-19  Chris Marrin  <cmarrin@apple.com>

        Fixed a build error, which only shows up in the i386 compile

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::animateTransform):

2009-06-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6988385> REGRESSION: In full page video player, movie's
        video track becomes detached from its controller.
        
        When in the media document, the MediaPlayer should not report that it
        is capable of hardware acceleration, because it renders via a QTMovieView
        which is already accelerated.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering):

2009-06-19  Kevin Ollivier  <kevino@theolliviers.com>

        Adding XSSAuditor.cpp to the wx build.

        * WebCoreSources.bkl:

2009-06-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser  <simon.fraser@apple.com>.

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

        If I am doing a Matrix hardware animation and any matrix is singular, I revert to software.
        This is not really testable, since we can't see what the hardware animation is doing.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::animateTransform):

2009-06-19  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.
        
        An additional fix for Bug 26532: Native functions do not correctly unlink
        from optimised callsites when they're collected
        <https://bugs.webkit.org/show_bug.cgi?id=26532> | <rdar://problem/6625385>

        Use "NativeFunctionWrapper" instead of "PrototypeFunction" in cross-frame
        accessors, so the type of object you get to wrap a function is the same,
        regardless of whether the access to the function is cross-frame.
        
        This is faster and more idiomatic than what we had before. It also would
        have avoided Bug 26532 because it would have prevented a conflicting
        PrototypeFunction from being allocated to wrap postMessage, where a
        NativeFunctionWrapper had been allocated previously.
        
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):

2009-06-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan

        <rdar://problem/6953673> Crash in RenderLayerCompositor::setCompositingParent
        
        Fix a crash that could occur in complex content due to timing issues
        when doing a partial layer tree rebuild which is required when painting;
        setCompositingParent() could be called with a parent which has not been made
        compositing yet.

2009-06-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Build fix. Adding missing HTMLDataGrid* files to the build.

        * GNUmakefile.am:

2009-06-19  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26460 part three
        Make BMPImageReader a standalone class that is used by ICOImageDecoder
        and BMPImageDecoder to decode individual BMPs within a file.  These
        decoders now inherit directly from ImageDecoder.
        
        This also makes these decoders decode on-demand in isSizeAvailable() and
        frameBufferAtIndex(), like the other decoders, instead of when setData()
        is called, like before.  This should provide a speedup on pages
        containing BMPs that aren't immediately onscreen.

        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::BMPImageDecoder):
        (WebCore::BMPImageDecoder::setData):
        (WebCore::BMPImageDecoder::isSizeAvailable):
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        (WebCore::BMPImageDecoder::decodeWithCheckForDataEnded):
        (WebCore::BMPImageDecoder::decode):
        (WebCore::BMPImageDecoder::processFileHeader):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        (WebCore::BMPImageDecoder::readUint32):
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::BMPImageReader):
        (WebCore::BMPImageReader::decodeBMP):
        (WebCore::BMPImageReader::readInfoHeaderSize):
        (WebCore::BMPImageReader::processInfoHeader):
        (WebCore::BMPImageReader::readInfoHeader):
        (WebCore::BMPImageReader::processBitmasks):
        (WebCore::BMPImageReader::processColorTable):
        (WebCore::BMPImageReader::processRLEData):
        (WebCore::BMPImageReader::processNonRLEData):
        (WebCore::BMPImageReader::setFailed):
        * platform/image-decoders/bmp/BMPImageReader.h:
        (WebCore::BMPImageReader::readUint16):
        (WebCore::BMPImageReader::readUint32):
        (WebCore::BMPImageReader::setBuffer):
        (WebCore::BMPImageReader::setData):
        (WebCore::BMPImageReader::):
        (WebCore::BMPImageReader::pastEndOfImage):
        (WebCore::BMPImageReader::readCurrentPixel):
        (WebCore::BMPImageReader::setRGBA):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::setData):
        (WebCore::ICOImageDecoder::isSizeAvailable):
        (WebCore::ICOImageDecoder::size):
        (WebCore::ICOImageDecoder::frameBufferAtIndex):
        (WebCore::ICOImageDecoder::decodeWithCheckForDataEnded):
        (WebCore::ICOImageDecoder::decode):
        (WebCore::ICOImageDecoder::processDirectory):
        (WebCore::ICOImageDecoder::processDirectoryEntries):
        (WebCore::ICOImageDecoder::readDirectoryEntry):
        (WebCore::ICOImageDecoder::processImageType):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        (WebCore::ICOImageDecoder::readUint16):
        (WebCore::ICOImageDecoder::readUint32):

2009-06-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

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

        Fix the Chromium canary bot.  Turns out ScriptSourceCode doesn't have
        the same API in V8 and JSC.

        * WebCore/bindings/js/ScriptController.cpp:
        * WebCore/bindings/js/ScriptSourceCode.h:
        * WebCore/bindings/v8/ScriptController.cpp:
        * WebCore/page/XSSAuditor.cpp:
        * WebCore/page/XSSAuditor.h:

2009-06-19  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=26547
        
        Implement the IDL interface for HTMLDataGridColElement.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * html/HTMLAttributeNames.in:
        * html/HTMLDataGridColElement.cpp: Added.
        (WebCore::HTMLDataGridColElement::HTMLDataGridColElement):
        (WebCore::HTMLDataGridColElement::label):
        (WebCore::HTMLDataGridColElement::setLabel):
        (WebCore::HTMLDataGridColElement::type):
        (WebCore::HTMLDataGridColElement::setType):
        (WebCore::HTMLDataGridColElement::sortable):
        (WebCore::HTMLDataGridColElement::setSortable):
        (WebCore::HTMLDataGridColElement::sortDirection):
        (WebCore::HTMLDataGridColElement::setSortDirection):
        (WebCore::HTMLDataGridColElement::selected):
        (WebCore::HTMLDataGridColElement::setSelected):
        * html/HTMLDataGridColElement.h: Added.
        (WebCore::HTMLDataGridColElement::endTagRequirement):
        (WebCore::HTMLDataGridColElement::tagPriority):
        * html/HTMLDataGridColElement.idl: Added.
        * html/HTMLDataGridElement.h:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:
        * page/DOMWindow.idl:

2009-06-19  Chris Evans  <scarybeasts@gmail.com>

        Reviewed by Eric Seidel.

        There is no new test because this cannot be tested deterministically.
        I've not been able to cause a crash at all in the test framework, but
        I have verified that this is happening in the wild and that the patch
        fixes the likely cause in the debugger.

        * loader/TextResourceDecoder.cpp: careful not to iterate off the end
          of our input buffer looking for the end of the comment.

2009-06-19  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

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

        Fix external-script-URL-location.html and
        write-external-script-open.html LayoutTests.

        implicitOpen is called from several places.  We need to setXSSAuditor
        each time, so I moved the call inside implicitOpen.

        * dom/Document.cpp:
        (WebCore::Document::open):
        (WebCore::Document::implicitOpen):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):

2009-06-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by David Levin.

        Use WebCore::multipleFileUploadText() in Chromium to fix a problem
        that Chromium shows only the first filename even if a user selects
        multiple files for <input type=file multiple>.
        <https://bugs.webkit.org/show_bug.cgi?id=26502>

        * platform/chromium/FileChooserChromium.cpp:
        (WebCore::FileChooser::basenameForWidth):

2009-06-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/6967596> Safari hung using 100% CPU when I tried
          to look up a word in Dictionary using command-control-d

        Test: editing/selection/move-by-line-005.html

        The root cause of this bug was searchAheadForBetterMatch() continuing
        past the first rendered text object after the given object. While we
        want to skip non-rendered text and empty containers, when we encounter
        rendered text object, we must return a text box for that object.

        * dom/Position.cpp:
        (WebCore::searchAheadForBetterMatch):

2009-06-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by David Levin

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

        Chromium Linux port does not handle non-BMP characters properly.
        It's fixed with a 'UTF-16 iterator macro' to extract Unicode
        codepoints out of a UTF-16 input string.

        A manual test is added for non-BMP character rendering,
        which we can use until a small freely-distributable font
        covering non-BMP is added to the Webkit source tree.


        * platform/graphics/chromium/FontCacheLinux.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * manual-tests/non-bmp.html: Added.

2009-06-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        V8 Bindings: return proper state from the script stack.

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

        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptCallStack.h:
        (WebCore::ScriptCallStack::state):

2009-06-19  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Simon Fraser.

        Windows build fix.
        
        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):

2009-06-19  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.
        Build fix after 44825.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::isSizeAvailable):
        * platform/graphics/qt/ImageDecoderQt.h:

2009-06-18  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Oliver Hunt.

        Bug 26426: Canvas: rotation of 'no-repeat' pattern is weird
        <https://bugs.webkit.org/show_bug.cgi?id=26426>

        Use 1<<23-1 as steps of no-repeat patterns instead of 100000000.0f.
        The original number cannot be represented by mantissa of float
        (23bit) so that it caused some error.

        Test: fast/canvas/image-object-in-canvas.html:

        * platform/graphics/cg/PatternCG.cpp:
        (WebCore::Pattern::createPlatformPattern):

2009-06-19  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt to fix the Chromium build.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::evaluate):
        * bindings/v8/ScriptController.h:
        (WebCore::ScriptController::xssAuditor):
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):

2009-06-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

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

        Added an experimental reflective XSS filter.  The filter is disabled by
        default.

        Test: http/tests/security/xssAuditor/script-tag.html

        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::evaluate):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::xssAuditor):
        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * dom/Tokenizer.h:
        (WebCore::Tokenizer::xssAuditor):
        (WebCore::Tokenizer::setXSSAuditor):
        (WebCore::Tokenizer::Tokenizer):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        (WebCore::FrameLoader::requestObject):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setXSSAuditorEnabled):
        * page/Settings.h:
        (WebCore::Settings::xssAuditorEnabled):
        * page/XSSAuditor.cpp: Added.
        (WebCore::isControlCharacter):
        (WebCore::XSSAuditor::XSSAuditor):
        (WebCore::XSSAuditor::~XSSAuditor):
        (WebCore::XSSAuditor::canEvaluate):
        (WebCore::XSSAuditor::canCreateInlineEventListener):
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        (WebCore::XSSAuditor::canLoadObject):
        (WebCore::XSSAuditor::decodeURL):
        (WebCore::XSSAuditor::findInRequest):
        * page/XSSAuditor.h: Added.
        (WebCore::XSSAuditor::isEnabled):
        (WebCore::XSSAuditor::setXSSAuditorEnabled):

2009-06-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        feOffset and objectBoundingBox
        [https://bugs.webkit.org/show_bug.cgi?id=26441]

        If we use objectBoundingBox for primitiveUnits, the fractions given
        to dx or dy of feOffset must be multiplied with the referenced objects
        objectBoundingBox size.

        Test: svg/filters/feOffset.svg

        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):

2009-06-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        feTile implementation missing
        [https://bugs.webkit.org/show_bug.cgi?id=26419]

        Implementation of feTile, a pattern effect for SVG filters. It was
        necessary to modify FilterEffect since source inputs need a secial
        logic and we have to identify if an effect is a source input.

        Tests: svg/batik/filters/feTile.svg
               svg/filters/feTile.svg

        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::isSourceInput):
        * platform/graphics/filters/SourceAlpha.h:
        (WebCore::SourceAlpha::isSourceInput):
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::isSourceInput):
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):

2009-06-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        feMerge implementation
        [https://bugs.webkit.org/show_bug.cgi?id=26480]

        Added feMerge to the SVG Filter system.

        Test: svg/filters/feMerge.svg

        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::uniteChildEffectSubregions):
        (WebCore::FEMerge::apply):
        * svg/graphics/filters/SVGFEMerge.h:

2009-06-18  Mark Rowe  <mrowe@apple.com>

        Speculative Windows build fix.

        * page/win/FrameCGWin.cpp: Add missing #include.

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Dave Levin.

        https://bugs.webkit.org/show_bug.cgi?id=26425
        Final refactorings, picking up a few places where BitmapInfo
        could be used.

        * page/win/FrameCGWin.cpp:
        (WebCore::imageFromRect):
        * platform/win/CursorWin.cpp:
        (WebCore::Cursor::Cursor):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):

2009-06-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 26522: In DOM mode, VoiceOver reads some mouseover text on web sites strangely
        https://bugs.webkit.org/show_bug.cgi?id=26522

        Test: accessibility/non-data-table-cell-title-ui-element.html

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::titleUIElement):

2009-06-18  Kevin Ollivier  <kevino@theolliviers.com>

        wx build fix after recent RenderTheme changes.

        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::~RenderThemeWx):
        (WebCore::RenderTheme::themeForPage):

2009-06-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26460 part two
        Attempt to minimize diff of following functional change by first landing
        non-functional change to:
        * Make readUintX() public and static (since they will need to be once
          BMPImageReader is included in *ImageDecoder via composition rather
          than inheritance).  Add wrappers in each class so callers can be
          simpler.  In the next patch, these wrappers will be beefed up slightly
          and the callers will get even simpler.
        * Change direct setting of m_failed to use setFailed(), since in the
          next patch much of this code won't even have direct access to m_failed
        * Add a helper function in ICOImageDecoder to determine the image type
          instead of simply doing it inline
        * Rewrap lines that used to be <=80 cols and slipped over it during the
          original landing of these decoders
        * Other misc. changes, e.g. adding constructor definitions, reordering
          functions, changing RGBA32Buffer& to RGBA32Buffer*, etc. that have no
          functional effect but minimize the subsequent diff for readability


        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::BMPImageDecoder):
        (WebCore::BMPImageDecoder::processFileHeader):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        (WebCore::BMPImageDecoder::readUint32):
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::decodeBMP):
        (WebCore::BMPImageReader::getInfoHeaderSize):
        (WebCore::BMPImageReader::processInfoHeader):
        (WebCore::BMPImageReader::readInfoHeader):
        (WebCore::BMPImageReader::processBitmasks):
        (WebCore::BMPImageReader::processColorTable):
        (WebCore::BMPImageReader::processRLEData):
        (WebCore::BMPImageReader::processNonRLEData):
        * platform/image-decoders/bmp/BMPImageReader.h:
        (WebCore::BMPImageReader::readUint16Helper):
        (WebCore::BMPImageReader::readUint32Helper):
        (WebCore::BMPImageReader::):
        (WebCore::BMPImageReader::readUint16):
        (WebCore::BMPImageReader::readUint32):
        (WebCore::BMPImageReader::readCurrentPixel):
        (WebCore::BMPImageReader::getComponent):
        (WebCore::BMPImageReader::setI):
        (WebCore::BMPImageReader::setRGBA):
        (WebCore::BMPImageReader::fillRGBA):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::isSizeAvailable):
        (WebCore::ICOImageDecoder::size):
        (WebCore::ICOImageDecoder::decodeImage):
        (WebCore::ICOImageDecoder::processDirectory):
        (WebCore::ICOImageDecoder::processDirectoryEntries):
        (WebCore::ICOImageDecoder::isBetterEntry):
        (WebCore::ICOImageDecoder::processImageType):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        (WebCore::ICOImageDecoder::readUint16):
        (WebCore::ICOImageDecoder::readUint32):

2009-06-18  Peter Kasting  <pkasting@google.com>

        Fix build bustage.

        * platform/image-decoders/gif/GIFImageDecoder.h:

2009-06-18  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6940880> REGRESSION: Breakpoints don't break in 64-bit

        Convert intptr_t to Strings so that we don't loose bits in the
        conversion to JS.  Previously they were being put into 32bit ints.

        * inspector/InspectorController.cpp: Convert the String back to an
        intptr_t.
        (WebCore::InspectorController::addBreakpoint):
        (WebCore::InspectorController::removeBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorController.idl: Use strings in JS to avoid 32bit
        truncation.
        * inspector/InspectorFrontend.cpp: Make the intptr_t into a String.
        (WebCore::InspectorFrontend::parsedScriptSource):
        * platform/text/PlatformString.h: Implemented the necessary conversion
        functions to be able to convert to and from an intptr_t.
        * platform/text/String.cpp: Ditto.
        (WebCore::String::toIntPtrStrict):
        (WebCore::String::toIntPtr):
        (WebCore::charactersToIntPtrStrict):
        (WebCore::charactersToIntPtr):
        * platform/text/StringImpl.cpp: Ditto.
        (WebCore::StringImpl::toIntPtrStrict):
        (WebCore::StringImpl::toIntPtr):
        * platform/text/StringImpl.h: Ditto.

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Eric Seidel.

        Final cleanups in this refactoring:
        (1) Move WindowsBitmap implementation from CG-specific file to
            the platform-common GraphicsContextWin.cpp, since it is
            equally useful on both platforms.
        (2) Revise the TransformationMatrix logic as suggested by
            Adam Roben in his review comments to Part #2 of this
            refactoring.

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::WindowsBitmap::WindowsBitmap):
        (WebCore::GraphicsContext::WindowsBitmap::~WindowsBitmap):
        (WebCore::GraphicsContext::createWindowsBitmap):
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):

2009-06-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26460 part one
        Make isSizeAvailable non-const, since it's not logically const (it
        triggers lazy decoding), and simplify all the implementations (without
        changing behavior; just make less verbose).  Remove some other
        inappropriate consts, which enables the removal of all the mutable
        declarations in the decoders.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::isSizeAvailable):
        (WebCore::ImageDecoder::setSize): Make public to avoid needing a friend declaration in the JPEG decoder, and because the ICO/BMP decoders will soon need this.
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::isSizeAvailable):
        (WebCore::GIFImageDecoder::repetitionCount):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::isSizeAvailable):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::isSizeAvailable):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::isSizeAvailable):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/xbm/XBMImageDecoder.cpp:
        (WebCore::XBMImageDecoder::isSizeAvailable):
        (WebCore::XBMImageDecoder::frameBufferAtIndex):
        (WebCore::XBMImageDecoder::decode):
        * platform/image-decoders/xbm/XBMImageDecoder.h: Rename decodeXBM() to decode() for consistency with the JPEG/PNG decoders, and in the future the ICO/BMP decoders.

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Eric Seidel.

        Move some common functions out of platform files and into
        the common implementation.

        https://bugs.webkit.org/show_bug.cgi?id=26425.
        Add a new platform context method (flush) so that the
        getWindowsContext method can be consolidated into the common
        GraphicsContextWin.cpp file.
         
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::flush):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        (WebCore::GraphicsContextPlatformPrivate::flush):
        * platform/graphics/win/GraphicsContextCGWin.cpp: Remove
          getWindowContext method.
        * platform/graphics/win/GraphicsContextCairoWin.cpp: Remove
          getWindowContext method and fillWithClearColor methods.
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::fillWithClearColor): Moved from *CairoWin.cpp
        (WebCore::GraphicsContext::getWindowsContext): Moved
          from *CairoWin.cpp

2009-06-18  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Oliver Hunt.

        Remove code that I accidentally committed in r44811.

        * editing/markup.cpp:
        (WebCore::createMarkup):

2009-06-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/6983207> Non-layer content is not re-rendered when transition
        starts sometimes (with hardware acceleration).
        
        When deciding which RenderLayers should be composited, when a layer goes into
        compositing mode we repaint the old location. However, we did that before
        we'd looked at all the factors that may force a layer to composite, so missed
        some cases. Fix by doing the repaint once we really know whether it's going
        to composite.

        Test: compositing/repaint/become-overlay-composited-layer.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2009-06-18  Simon Fraser  <simon.fraser@apple.com>

        Fix the Leopard build where USE(ACCELERATED_COMPOSITING) is not defined, and
        the Tiger build where QTMovieLayer does not exist.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieLayer):
        (WebCore::MediaPlayerPrivate::destroyQTMovieLayer):
        (WebCore::MediaPlayerPrivate::currentRenderingMode):
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering):
        (WebCore::MediaPlayerPrivate::hasSetUpVideoRendering):

2009-06-18  Simon Fraser  <simon.fraser@apple.com>

        Fix the Leopard build where USE(ACCELERATED_COMPOSITING) is not defined.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::currentRenderingMode):
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering):

2009-06-17  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=15189
        Adds the HTML5 input event support for textarea.
        
        Also, moves the oninput attribute parse handling to HTMLElement so that
        it can be set on any HTML element so that bubbling events can be handled
        using HTML attribute handlers.

        Test: fast/forms/textarea-input-event.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):

2009-06-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Oliver Hunt.

        Share code between filterEffects
        [https://bugs.webkit.org/show_bug.cgi?id=26479]

        Share more code of filter effects. The imageBuffer creation can move to
        FilterEffect ant every effect asks for the GraphicsContext. Move the
        drawingRect calculation to FilterEffect.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::calculateDrawingRect):
        (WebCore::FilterEffect::getEffectContext):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::apply):
        * svg/graphics/filters/SVGFEFlood.cpp:
        (WebCore::FEFlood::apply):
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):

2009-06-18  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.
        
        https://bugs.webkit.org/show_bug.cgi?id=26499
        
        Support hardware-accelerationed rendering of video elements.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerSawUnsupportedTracks):
        (WebCore::HTMLMediaElement::mediaPlayerRepaint):
        Just move these methods to group the render-related methods together.
        
        (WebCore::HTMLMediaElement::mediaPlayerRenderingCanBeAccelerated):
        Call out method to ask the RenderLayerCompositor if presentation of this video
        can be acclerated. It might say no, if, for example, the video has a reflection.
        
        (WebCore::HTMLMediaElement::mediaPlayerGraphicsLayer):
        Fetch the GraphicsLayer from the RenderVideo that will host the movie layer.
        
        * html/HTMLMediaElement.h:
        Reordered the rendering-related methods, and added two methods related to video
        acceleration.
        
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::acceleratedRenderingStateChanged):
        Called by the rendering system when it determines that the video must go into, or
        fall off of the hardware-accelerated path.
        
        (WebCore::MediaPlayer::supportsAcceleratedRendering):
        Method to say whether the media engine supports accelerated rendering.
        
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerRepaint):
        (WebCore::MediaPlayerClient::mediaPlayerSizeChanged):
        Moved.
        
        (WebCore::MediaPlayerClient::mediaPlayerRenderingCanBeAccelerated):
        (WebCore::MediaPlayerClient::mediaPlayerGraphicsLayer):
        New methods to ask the client if the rendering system can support accelerated
        rendering, and to get a GraphicsLayer to plug the movie layer into.
        
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::supportsAcceleratedRendering):
        (WebCore::MediaPlayerPrivateInterface::acceleratedRenderingStateChanged):
        Forwarding methods from MediaPlayer.
        
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        Some new methods related to using a QTMovieLayer, and to simplify the rendering mode logic.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovieLayer):
        (WebCore::MediaPlayerPrivate::destroyQTMovieLayer):
        Methods to create and destroy the QTMovieLayer.
        
        (WebCore::MediaPlayerPrivate::currentRenderingMode):
        (WebCore::MediaPlayerPrivate::preferredRenderingMode):
        Methods to clarify the code that decides which of the 3 rendering modes to use.
        
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
        Changed to use the new rendering mode methods.
        
        (WebCore::MediaPlayerPrivate::tearDownVideoRendering):
        Destroy the layer if we have one.
        
        (WebCore::MediaPlayerPrivate::hasSetUpVideoRendering):
        Small utility method.
        
        (WebCore::MediaPlayerPrivate::updateStates):
        Move the call to setUpVideoRendering() to before we send out the state notifications,
        so that we will have created the rendering objects already.
        
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering):
        Return true if we have QTMovieLayer.
        
        (WebCore::MediaPlayerPrivate::acceleratedRenderingStateChanged):
        We've been told that we went into or out of accelerated mode; maybe reset
        the renderer, and set the layer if we have to.
        
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::rendererContentChanged):
        We may need to udpate compositing layers if the video went into accelerated mode.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::canUseDirectCompositing):
        Add smarts to deal with video, which allows us to avoid extra backing store.
        
        (WebCore::RenderLayerBacking::contentsBox):
        Use the videoBox to use the content layer for video layers.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        Poke the RenderVideo if the state changed.
        
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        Handle an edge case when the video element itself is a stacking context
        because of opacity or transform.
        
        (WebCore::RenderLayerCompositor::canAccelerateVideoRendering):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo):
        Allow video to throw us into compositing mode if the media engine supports it.
        
        * rendering/RenderLayerCompositor.h:
        New methods related to video.
        
        * rendering/RenderVideo.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        Call rendererContentChanged() to give the compositor a change to throw the video into
        compositing mode.
        
        (WebCore::RenderVideo::supportsAcceleratedRendering):
        (WebCore::RenderVideo::acceleratedRenderingStateChanged):
        (WebCore::RenderVideo::videoGraphicsLayer):
        Methods to allow the MediaPlayer to do rendering-related stuff via the media element.

2009-06-18  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Niko.

        https://bugs.webkit.org/show_bug.cgi?id=26385
        Root SVG element is not checked on requiredFeatures, requiredExtension like other elements

        Also do the isValid check for outer <svg>.

        Test: svg/custom/outer-svg-unknown-feature.svg

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

2009-06-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        - fix <rdar://problem/6913221> REGRESSION (Safari 3-4): Search field on
          apple.com cuts entered text

        Test: fast/forms/search-vertical-alignment.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout): Vertically center the
            the search field's inner block.

2009-06-18  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        Fix compilation with Symbian WINSCW compiler, which produced
        multiple definitions of the CSSPrimitiveValue conversion operators.

        It turns out that they are defined inline but not declared inline.

        Adding the inline keyword to the declaration fixes the build.

        * css/CSSPrimitiveValue.h:

2009-06-18  Markus Goetz <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausman.

        Clarify in docs how to compile with debug information.

        * WebCore.pro:

2009-06-18  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] When writing an URL to the clipboard, save the corresponding title
        in the mime data as well.

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

2009-06-18  Jakub Wieczorek  <faw217@gmail.com>

        [Qt] Fix build. Add HTMLDataGridElement.

        * WebCore.pro:

2009-06-18  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix.

        Add HTMLDataGridElement header and IDL to the build script.

        * GNUmakefile.am:

2009-06-18  Chris Evans  <scarybeasts@gmail.com>

        Reviewed by Adam Barth.

        Fix 8-digit long hex entities. Fixes bug 26454
        https://bugs.webkit.org/show_bug.cgi?id=26454

        Test: fast/parser/eightdigithexentity.html

        * html/HTMLTokenizer.cpp: fix off-by-ones.

2009-06-18  David Levin  <levin@chromium.org>

        Fix chromium linux build.

        Fixes a mistake that happened during the complicated merge for
        landing r44775, r44776, r44777.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::create):

2009-06-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.
        
        https://bugs.webkit.org/show_bug.cgi?id=26499
        
        First step to making video rendering be hardware-accelerated:
        make <video> elements get self-painting RenderLayers, and add
        an isVideo() virtual method to RenderObject.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged):
        (WebCore::HTMLMediaElement::mediaPlayerSizeChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        (WebCore::RenderLayer::isSelfPaintingLayer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isVideo):
        * rendering/RenderVideo.h:
        (WebCore::RenderVideo::requiresLayer):
        (WebCore::RenderVideo::isVideo):

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Refactor a few common routines in the various Windows ports
        and reduce some duplicated code.

        (1) Create TransformationMatrix XFORM casting operator, and
            switch various XFORM structure uses to utilize it.
        (2) Push concatCTM call to GraphicsContextWin now that the
            TransformationMatrix can directly create XFORM (rather
            than converting to CGAffineTransform/cairo_matrix_t first.)

        * WebCore.vcproj/WebCore.vcproj: Add new BitmapInfo structure.
        * platform/graphics/transforms/TransformationMatrix.h:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::scale):
        (WebCore::GraphicsContextPlatformPrivate::rotate):
        (WebCore::GraphicsContextPlatformPrivate::translate):
        (WebCore::GraphicsContextPlatformPrivate::concatCTM):
        * platform/graphics/win/TransformationMatrixWin.cpp: Added.
        (WebCore::TransformationMatrix::operator XFORM): New operator

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Non-CG Windows build fix after @r44758.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderTheme::themeForPage):

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Refactor a few common routines in the various Windows ports
        and reduce some duplicated code.
        https://bugs.webkit.org/show_bug.cgi?id=26425.

        Refactor use of BITMAPINFO for the new BitmapInfo structure.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/BitmapInfo.cpp: Added.
        (WebCore::bitmapInfoForSize):
        (WebCore::BitmapInfo::create):
        (WebCore::BitmapInfo::createBottomUp):
        * platform/win/BitmapInfo.h: Added.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        * platform/graphics/win/TransformationMatrixWin.cpp: Added.
        (WebCore::TransformationMatrix::operator XFORM): New operator
        * platform/win/DragImageCGWin.cpp:
        (WebCore::allocImage):
        * platform/win/DragImageCairoWin.cpp:
        (WebCore::allocImage):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):

2009-06-17  Adam Roben  <aroben@apple.com>

        Remove unnecessary 6th parameter from SOFT_LINK_OPTIONAL

        Reviewed by Mark Rowe.

        * platform/graphics/win/ColorSafari.cpp: Removed the 6th parameter and
        an unnecessary parameter name.
        * platform/win/SoftLinking.h: Removed the unused 6th parameter.

2009-06-17  Adam Roben  <aroben@apple.com>

        Make Settings::shouldPaintNativeControls default to true

        This matches the default up in WebKit (that was changed in r43318).

        Fixes Bug 26493: REGRESSION (r44758): First tab always uses Mac-style
        form controls
        <https://bugs.webkit.org/show_bug.cgi?id=26493>

        Reviewed by Darin Adler and Dave Hyatt.

        No test possible since DRT always uses Mac-style form controls.

        * page/Settings.cpp: Changed the initial value of
        gShouldPaintNativeControls to true.

        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderTheme::themeForPage): Added a FIXME about the design
        flaw here involving querying Settings before it's been initialized.

2009-06-17  David Levin  <levin@chromium.org>

        Fix chromium windows build.

        A mistake that happened during the complicated merge for
        landing r44775, r44776, r44777.

        * rendering/RenderThemeChromiumWin.h:
        (WebCore::RenderThemeChromiumWin::RenderThemeChromiumWin):
        (WebCore::RenderThemeChromiumWin::~RenderThemeChromiumWin):

2009-06-17  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/6981193> Crash in MediaControlInputElement::attachToParent

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaTextDisplayElement::attachToParent): NULL check element renderer or parent renderer.
        (WebCore::MediaControlInputElement::attachToParent): Ditto.

2009-06-17  David Hyatt  <hyatt@apple.com>

        Fix Windows build.  There's no HTMLDataGridElement.cpp file yet.

        * html/HTMLElementsAllInOne.cpp:

2009-06-17  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben and Anders Carlsson.

        Stub out the HTMLDataGridElement.

        * DerivedSources.make:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCoreSources.bkl:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * editing/htmlediting.cpp:
        (WebCore::canHaveChildrenForEditing):
        * html/HTMLDataGridElement.h: Added.
        (WebCore::HTMLDataGridElement::HTMLDataGridElement):
        (WebCore::HTMLDataGridElement::tagPriority):
        * html/HTMLDataGridElement.idl: Added.
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::isAffectedByResidualStyle):
        * html/HTMLTagNames.in:

2009-06-17  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (chromium build fix).

        Fix typo in previous changes.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::defaultGUIFont):

2009-06-17  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26148
        Remove common code from RenderThemeChromiumWin that is shared with
        RenderThemeChromiumSkia.

        Also move supportsControlTints to RenderThemeChromiumLinux since it
        is linux specific.

        There are no tests changed because this just removes functions with
        duplicate implementations between the base and derived classes.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::supportsControlTints):
        * rendering/RenderThemeChromiumLinux.h:
        * rendering/RenderThemeChromiumSkia.cpp:
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::):
        (WebCore::getNonClientMetrics):
        (WebCore::RenderThemeChromiumWin::RenderThemeChromiumWin):
        (WebCore::RenderThemeChromiumWin::~RenderThemeChromiumWin):
        (WebCore::RenderThemeChromiumWin::systemFont):
        (WebCore::RenderThemeChromiumWin::paintCheckbox):
        (WebCore::RenderThemeChromiumWin::paintRadio):
        (WebCore::RenderThemeChromiumWin::paintSliderThumb):
        (WebCore::RenderThemeChromiumWin::caretBlinkIntervalInternal):
        * rendering/RenderThemeChromiumWin.h:

2009-06-17  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26148
        Move RenderThemeChromiumSkia into its own file.  This is purely a code move.

        * rendering/RenderThemeChromiumLinux.cpp:
        * rendering/RenderThemeChromiumLinux.h:
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::):
        (WebCore::setSizeIfAuto):
        (WebCore::mediaElementParent):
        (WebCore::RenderThemeChromiumSkia::defaultGUIFont):
        (WebCore::RenderThemeChromiumSkia::RenderThemeChromiumSkia):
        (WebCore::RenderThemeChromiumSkia::~RenderThemeChromiumSkia):
        (WebCore::RenderThemeChromiumSkia::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumSkia::extraQuirksStyleSheet):
        (WebCore::RenderThemeChromiumSkia::extraMediaControlsStyleSheet):
        (WebCore::RenderThemeChromiumSkia::supportsHover):
        (WebCore::RenderThemeChromiumSkia::supportsFocusRing):
        (WebCore::RenderThemeChromiumSkia::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumSkia::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumSkia::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumSkia::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumSkia::platformTextSearchHighlightColor):
        (WebCore::RenderThemeChromiumSkia::caretBlinkInterval):
        (WebCore::RenderThemeChromiumSkia::systemFont):
        (WebCore::RenderThemeChromiumSkia::minimumMenuListSize):
        (WebCore::RenderThemeChromiumSkia::paintCheckbox):
        (WebCore::RenderThemeChromiumSkia::setCheckboxSize):
        (WebCore::RenderThemeChromiumSkia::paintRadio):
        (WebCore::RenderThemeChromiumSkia::setRadioSize):
        (WebCore::brightenColor):
        (WebCore::paintButtonLike):
        (WebCore::RenderThemeChromiumSkia::paintButton):
        (WebCore::RenderThemeChromiumSkia::paintTextField):
        (WebCore::RenderThemeChromiumSkia::paintTextArea):
        (WebCore::RenderThemeChromiumSkia::paintSearchField):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton):
        (WebCore::RenderThemeChromiumSkia::paintMediaButtonInternal):
        (WebCore::RenderThemeChromiumSkia::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumSkia::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListStyle):
        (WebCore::RenderThemeChromiumSkia::paintMenuList):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintMenuListButton):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingLeft):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingRight):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingTop):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingBottom):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingLeft):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingRight):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingTop):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingBottom):
        (WebCore::RenderThemeChromiumSkia::caretBlinkIntervalInternal):
        (WebCore::RenderThemeChromiumSkia::menuListInternalPadding):
        * rendering/RenderThemeChromiumSkia.h:
        (WebCore::RenderThemeChromiumSkia::supportsControlTints):

2009-06-17  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=26148
        Extract RenderThemeChromiumSkia out of RenderThemeChromiumLinux.  This
        is mostly a code shuffle.  The non-suffle changes are:
           1) Creation of a caretBlinkIntervalInternal.
           2) Moving of some inline functions into the implementation files.
           3) Changing of defaultGUIFont into a static class constant from a
              static function.  Also the type is changed to String.
           4) Changing of defaultFontSize into a static class constant from a
              static variable in the file scope.
           5) The static supportsFocus function was collapsed into
              supportsFocusRing.
           6) Split the extraDefaultStyleSheet into Skia and Linux versions.

        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumSkia::defaultGUIFont):
        (WebCore::RenderThemeChromiumSkia::RenderThemeChromiumSkia):
        (WebCore::RenderThemeChromiumSkia::~RenderThemeChromiumSkia):
        (WebCore::RenderThemeChromiumSkia::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumSkia::extraQuirksStyleSheet):
        (WebCore::RenderThemeChromiumSkia::extraMediaControlsStyleSheet):
        (WebCore::RenderThemeChromiumSkia::supportsHover):
        (WebCore::RenderThemeChromiumSkia::supportsFocusRing):
        (WebCore::RenderThemeChromiumSkia::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumSkia::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumSkia::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumSkia::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumSkia::platformTextSearchHighlightColor):
        (WebCore::RenderThemeChromiumSkia::caretBlinkInterval):
        (WebCore::RenderThemeChromiumSkia::systemFont):
        (WebCore::RenderThemeChromiumSkia::minimumMenuListSize):
        (WebCore::RenderThemeChromiumSkia::paintCheckbox):
        (WebCore::RenderThemeChromiumSkia::setCheckboxSize):
        (WebCore::RenderThemeChromiumSkia::paintRadio):
        (WebCore::RenderThemeChromiumSkia::setRadioSize):
        (WebCore::RenderThemeChromiumSkia::paintButton):
        (WebCore::RenderThemeChromiumSkia::paintTextField):
        (WebCore::RenderThemeChromiumSkia::paintTextArea):
        (WebCore::RenderThemeChromiumSkia::paintSearchField):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumSkia::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton):
        (WebCore::RenderThemeChromiumSkia::paintMediaButtonInternal):
        (WebCore::RenderThemeChromiumSkia::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumSkia::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListStyle):
        (WebCore::RenderThemeChromiumSkia::paintMenuList):
        (WebCore::RenderThemeChromiumSkia::adjustMenuListButtonStyle):
        (WebCore::RenderThemeChromiumSkia::paintMenuListButton):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingLeft):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingRight):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingTop):
        (WebCore::RenderThemeChromiumSkia::popupInternalPaddingBottom):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingLeft):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingRight):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingTop):
        (WebCore::RenderThemeChromiumSkia::buttonInternalPaddingBottom):
        (WebCore::RenderThemeChromiumSkia::caretBlinkIntervalInternal):
        (WebCore::RenderThemeChromiumLinux::RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::~RenderThemeChromiumLinux):
        (WebCore::RenderThemeChromiumLinux::systemColor):
        (WebCore::RenderThemeChromiumLinux::extraDefaultStyleSheet):
        (WebCore::RenderThemeChromiumSkia::menuListInternalPadding):
        * rendering/RenderThemeChromiumLinux.h:

2009-06-17  Adam Roben  <aroben@apple.com>

        Add a SOFT_LINK_OPTIONAL macro

        This macro is useful when soft-linking functions that are present in
        only some versions of a particular library (e.g., APIs added in
        Windows Vista that aren't available on Windows XP).

        Reviewed by Ada Chan.

        * platform/graphics/win/ColorSafari.cpp:
        (WebCore::focusRingColor):
        Use the SoftLinking.h macros instead of doing the soft-link ourselves.
        Also removed an unused call to focusRingColor.isValid().

        * platform/win/SoftLinking.h: Added SOFT_LINK_OPTIONAL.

2009-06-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Gustavo Noronha.

        Fixes: https://bugs.webkit.org/show_bug.cgi?id=26470.
        The use of zero-width or zero-height rectangles in generating
        gradients caused Windows Cairo to crash, and webkitgtk to
        produce invalid images.

        We now test for NaN in the phase argument, which is calculated
        using fmodf and can blow up when the width/height values passed
        are zero.

        Test: fast/gradients/border-image-gradient-sides-and-corners.html

        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):

2009-06-17  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Dimitri Glazkov.

        If loading a font fails because of the sandbox, we ask the browser process to
        try to load it by calling ensureFontLoaded. If it still fails after
        ensureFontLoaded, we hit a ASSERT_NOT_REACHED.

        This case happens once in a while during browser shutdown. The browser will
        queue a message to the renderer to shutdown, and will then stop answering sync
        messages from the renderer. If the renderer is still loading a page during this
        time, it might try to call the browser process to ask to load a font. The
        browser process will ignore the request, and the font will fail to load, even
        after the second try.

        This is unfortunate, but there is no real risk here, since the renderer will be
        going away as soon as it processes another message.
        
        This can't be layout tested as it depends on the sandbox.
        
        https://bugs.webkit.org/show_bug.cgi?id=26484

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::fontContainsCharacter):

2009-06-17  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=26482
        <rdar://problem/6978590> When setting playback rate to 0, the audio element stops 
        playing (doesn't resume later)

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::setRate): Always set the rate, even when "paused".

        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::setRate): Ditto.

2009-06-17  Adam Roben  <aroben@apple.com>

        Add all the generated JS*.cpp files back to WebCore.vcproj

        They are not compiled by the vcproj directly. Instead they are
        compiled as part of DerivedSources.cpp. Having them listed in the
        vcproj makes them be included in Project Find, etc.

        Rubber-stamped in advance by Steve Falkenburg.

        * WebCore.vcproj/WebCore.vcproj:

2009-06-17  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        Don't fire redundant 'change' events for a file upload form.
        https://bugs.webkit.org/show_bug.cgi?id=26471

        * platform/FileChooser.cpp:
        (WebCore::FileChooser::chooseFiles): Suppress change event if the
        existing selected files and the incoming selected files are equal.
        (WebCore::FileChooser::chooseIcon): Returns 0 if there is no selected
        files.

2009-06-17  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=23155
        Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks.

        * platform/KeyboardCodes.h:

2009-06-17  George Staikos  <george.staikos@torchmobile.com>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=23155
        Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        * platform/win/SystemTimeWin.cpp:
        (WebCore::userIdleTime):

2009-06-17  Adam Roben  <aroben@apple.com>

        Speculative Mac build fix

        * page/Page.h: Forward-declare RenderTheme instead of including
        RenderTheme.h so that we don't need to make RenderTheme.h a private
        header for WebKit's benefit.

        * editing/SelectionController.cpp:
        * rendering/InlineTextBox.cpp:
        * rendering/RenderObject.cpp:
        Added #includes of RenderTheme.h.

2009-06-17  Adam Roben  <aroben@apple.com>

        Speculative Mac build fix

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderTheme::create): Added.

2009-06-17  Adam Roben  <aroben@apple.com>

        Speculative Mac build fix

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderTheme::themeForPage): Remove the name of an unused
        parameter.

2009-06-17  Adam Roben  <aroben@apple.com>

        Speculative Mac build fix

        * page/Page.cpp:
        (WebCore::Page::Page): Change the initializer order to match the
        declaration order.

2009-06-16  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Follow up to bug https://bugs.webkit.org/show_bug.cgi?id=26278
        Patch that make WebCore have a RenderTheme per page

        Make the Qt implementation of RenderTheme create a theme per page,
        and use the QStyle associated with the view of each page, in order
        to make the QWidget setStyle() method work as advertised.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):
        (WebCore::RenderThemeQt::qStyle):
        (WebCore::findFrameLineWidth):
        (WebCore::inflateButtonRect):
        (WebCore::RenderThemeQt::adjustRepaintRect):
        (WebCore::RenderThemeQt::isControlStyled):
        (WebCore::RenderThemeQt::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQt::setButtonPadding):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::setPopupPadding):
        * platform/qt/RenderThemeQt.h:

2009-06-16  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Dave Hyatt and Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=26278
        Patch that make WebCore have a RenderTheme per page


        Create a different RenderTheme per page, so that RenderTheme has
        access to page specific theming. This is needed for the Qt port, as Qt
        supports setting the theme (style) per widget.

        This change was suggested and discussed with Dave Hyatt.

        More detailed:

        1) Create a theme per page or one global one, depending on the needs
           of the platform.
        2) Add an accesser to the theme from RenderObject.
        3) Change all uses of the theming to access the theme through
           RenderObject, using the global default theme as fallback, when the
           document of RenderObject has no page.
           When we don't have access to a RenderObject, use the default theme.
        4) Modify all RenderTheme platform implementations to work with the
           above changes, still creating only one global theme.


        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        * css/CSSStyleSelector.cpp:
        (WebCore::loadFullDefaultStyle):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::setActive):
        (WebCore::ContainerNode::setHovered):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::parseMappedAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::setIndeterminate):
        * page/Frame.cpp:
        (WebCore::Frame::selectionLayoutChanged):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateControlTints):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::theme):
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::paintRow):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::RenderThemeGtk::~RenderThemeGtk):
        (WebCore::RenderThemeGtk::gtkEntry):
        (WebCore::RenderThemeGtk::gtkTreeView):
        * platform/gtk/RenderThemeGtk.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::create):
        (WebCore::RenderTheme::themeForPage):
        * platform/qt/RenderThemeQt.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):
        * rendering/RenderMediaControls.cpp:
        (WebCore::determineState):
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::hitTest):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::theme):
        * rendering/RenderObject.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::defaultTheme):
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeChromiumLinux.h:
        (WebCore::RenderThemeChromiumLinux::~RenderThemeChromiumLinux):
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeChromiumWin.h:
        (WebCore::RenderThemeChromiumWin::RenderThemeChromiumWin):
        (WebCore::RenderThemeChromiumWin::~RenderThemeChromiumWin):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::create):
        (WebCore::RenderTheme::themeForPage):
        * rendering/RenderThemeWin.h:

2009-06-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/6974175> ASSERT in JITStubs.cpp at appsaccess.apple.com

        JSDOMWindowCustom was using PropertySlot::putValue, however this interface
        appears to be fundaementally incorrect - PropertySlots are only used to get
        values, all puts use PutPropertySlot.  However PutPropertySlot cannot be
        used in the fashion desired here - it only reports the caching type of a
        write that has been performed.

        (This caused a bug where the put should have triggered a transition, and
        failed to do so.)

        Removing the faulty case from the optimization leads to a ~0.5% progression
        on in-browser SunSpider (presumably the very first case was not being hit
        often, and the simplification here is beneficial).

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

2009-06-17  David Levin  <levin@chromium.org>

        Reviewed by NOBODY, layout tests fix.

        https://bugs.webkit.org/show_bug.cgi?id=26326
        This reverts commit r44751.

        Once that change was checked scrollbars/scrollbar-orientation.html started
        crashing on Windows.

        * dom/Document.cpp:
        (WebCore::Document::detach):
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/Scrollbar.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        * rendering/RenderScrollbar.h:

2009-06-16  Kevin Watters  <kevinwatters@gmail.com>

        Reviewed by Kevin Ollivier.

        In ImageSource::setData, delete the old m_encoder before replacing it with a new one.
        
        https://bugs.webkit.org/show_bug.cgi?id=26458

        * platform/graphics/wx/ImageSourceWx.cpp:
        (WebCore::ImageSource::setData):

2009-06-16  David Levin  <levin@chromium.org>

        Reviewed by David Hyatt.

        REGRESSION: When the main page (ScrollView) has a custom scrollbar, it crashes on destruction.
        https://bugs.webkit.org/show_bug.cgi?id=26326

        Test: scrollbars/scrollbar-crash-on-refresh.html

        * dom/Document.cpp:
        (WebCore::Document::detach):
        Gives the FrameView a change to do any necessary cleanup on
        Document::detach() which is where the renderArena gets detroyed.
        * page/FrameView.cpp:
        (WebCore::FrameView::detachCustomScrollbars):
        Gets rid of any custom scrollbars (if the docment supplied them).
        * page/FrameView.h:
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::isCustomScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        Removed the check for document()->frame().  If frame() is 0 in this code,
        then the call to animation() is also incorrect (since it does document()->frame()->animation()).
        * rendering/RenderScrollbar.h:
        (WebCore::RenderScrollbar::isCustomScrollbar):

2009-06-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adele Peterson.

        Fix of <rdar://6967547> Ctrl-C copies null value erasing text in clipboard in Safari.
        This patch kept the way events were firing as they were before, and Windows events are
        consistent with Mac.       

        * editing/Editor.cpp:
        (WebCore::Editor::tryDHTMLCopy): Added check for canCopy() before clearing PasteBoard
        (WebCore::Editor::tryDHTMLCut): Added check for canCut() before clearing PasteBoard

2009-06-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/6660037> CrashTracer: [USER] 46 crashes in Safari at com.apple.WebCore • WebCore::CachedCSSStyleSheet::addClient 53
        
        When revalidating a resource, calling addClient() on one client might cause another to get removed.
        
        - made CachedResource::addClient() non-virtual and added virtual didAddClient()
        - in CachedResource::switchClientsToRevalidatedResource() add all clients to the client set of the revalidated resource first
        - check if the client is still in the set before invoking didAddClient() for it
        
        No test case, I didn't manage to construct one. You need some combination of 304 revalidation, stylesheets that
        reference each other via @imports and reloading.

        * WebCore.base.exp:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::didAddClient):
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::didAddClient):
        * loader/CachedFont.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::didAddClient):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::addClient):
        (WebCore::CachedResource::addClientToSet):
        (WebCore::CachedResource::switchClientsToRevalidatedResource):
        * loader/CachedResource.h:
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::didAddClient):
        * loader/CachedScript.h:
        * loader/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::didAddClient):
        * loader/CachedXSLStyleSheet.h:

2009-06-16  Simon Fraser  <simon.fraser@apple.com>

        No Review

        Fix code inside an #ifdef that draws the video framerate.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::paint):

2009-06-16  Jian Li  <jianli@chromium.org>

        Reviewed by Dimitri Glazkov.

        Bug 26456: Hook up V8 bindings for Worker's importScripts functionality.
        https://bugs.webkit.org/show_bug.cgi?id=26456

        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp: Fixed missing exception code
          handling in Worker constructor for V8 bindings.
        (WebCore::CALLBACK_FUNC_DECL):

2009-06-16  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Maciej Stachowiak.

        Update of https://bugs.webkit.org/show_bug.cgi?id=26353.
        Provide an assignment operator to avoid improper reference
        counts on the Cairo font objects.  This brings the Windows
        Cairo port in line with the GTKport.

        * platform/graphics/win/FontPlatformData.h:
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):

2009-06-16  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Fix for <rdar://problem/6890126> Theme code should fetch the MediaControlElementType from 
        the MediaControlInputElement, rather than computing it again

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::percentLoaded): New, utility function for controller implementation.
        * html/HTMLMediaElement.h:

        * rendering/MediaControlElements.h:
        (WebCore::MediaControlInputElement::displayType): New, return m_displayType.

        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart): Stop using MediaPlayer object, get button
        state from the button itself and get movie state from HTMLMediaElement.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMediaMuteButton): Get state from button instead of MediaPlayer.
        (WebCore::RenderThemeMac::paintMediaPlayButton): Ditto.

2009-06-16  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Bug 26450: Rename values of enum RedirectOriginCheck to make them
        clearer.
        https://bugs.webkit.org/show_bug.cgi?id=26450

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::create):
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::willSendRequest):
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/ThreadableLoader.h:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader):
        (WebCore::WorkerThreadableLoader::loadResourceSynchronously):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
        * loader/WorkerThreadableLoader.h:
        (WebCore::WorkerThreadableLoader::create):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerContext::importScripts):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::loadRequestAsynchronously):

2009-06-16  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Fisher.

        Fix a UMR in WebCore::BitStack by initializing new memory to 0.
        https://bugs.webkit.org/show_bug.cgi?id=26449
        No new tests, covered by purify.

        * editing/TextIterator.cpp:
        (WebCore::BitStack::push):

2009-06-16  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Xan Lopez.

        Test: fast/multicol/columns-shorthand-parsing.html 

        Fixes https://bugs.webkit.org/show_bug.cgi?id=26453.
        Null Cairo contextwill crash Windows Cairo build.

        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContextPlatformPrivate::syncContext):
          Add a check for null context before attempting to
          retrieve the Cairo surface.

2009-06-16  Peter Kasting  <pkasting@google.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=26447
        Fix animated GIF breakage in Cairo/wx ports.

        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::operator=):
        * platform/image-decoders/wx/ImageDecoderWx.cpp:
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::operator=):

2009-06-16  Pierre d'Herbemont  <pdherbemont@apple.com>

        Reviewed by John Sullivan
        
        <rdar://problem/6937882>
        
        Tweak "time remaining" and "time elapsed" fields in the overlay video controller.

        * css/mediaControlsQT.css:

2009-06-16  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth and David Levin.

        Bug 26146: Change to use ThreadableLoader to load the worker script
        in order to check URL origin for redirection.
        https://bugs.webkit.org/show_bug.cgi?id=26146

        Test: http/tests/workers/worker-redirect.html

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::importScripts):
        * workers/WorkerImportScriptsClient.cpp: Removed.
        * workers/WorkerImportScriptsClient.h: Removed.
        * workers/WorkerScriptLoader.cpp: Renamed from workers/WorkerImportScriptsClient.cpp.
          This to make it more generic so worker script loading could use it.
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::didFinishLoading):
        (WebCore::WorkerScriptLoader::didFail):
        (WebCore::WorkerScriptLoader::didFailRedirectCheck):
        (WebCore::WorkerScriptLoader::didReceiveAuthenticationCancellation):
        (WebCore::WorkerScriptLoader::notifyFinished):
        * workers/WorkerScriptLoader.h: Renamed from workers/WorkerImportScriptsClient.h.
          This to make it more generic so worker script loading could use it.
        * workers/WorkerScriptLoaderClient.h: Added.

2009-06-16  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Darin Adler.

        Use consistent GUID comparison functions.
        https://bugs.webkit.org/show_bug.cgi?id=26427

        * platform/win/WCDataObject.cpp:
        (WebCore::WCDataObject::QueryInterface):

2009-06-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix compiler warning.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_class_init):

2009-08-07  Luke Kenneth Casson Leighton  <lkcl@lkcl.net>

        Reviewed by Eric Seidel.

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

        * WebKit/gtk/gdom/ConvertToGCharPrivate.h: Added.
        (copyAsGChar): added to help GObject bindings convert various types to glib's gchar* 

2009-06-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Remove dummy AtkStreamableContent implementation.

        It's completely empty, we'll add it back (and conditionally
        instead of unconditionally) when it does something.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (GetAtkInterfaceTypeFromWAIType):
        (getInterfaceMaskFromObject):

== Rolled over to ChangeLog-2009-06-16 ==
