2010-02-10  Mark Rowe  <mrowe@apple.com>

        MSAA: selected, selectable, extended selectable, and multiple
        selectable states are not reported

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

        Follow-up fix to account for the fact that different function names
        are used on the branch.

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

2010-02-10  Mark Rowe  <mrowe@apple.com>

        Merge r54615.

    2010-02-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Complete the fix for <rdar://problem/7577604> Drag and Drop: background elements are bleeding through
        https://bugs.webkit.org/show_bug.cgi?id=34546

        * manual-tests/drag-image-table-part-decorations.html:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint): Don’t paint collapsed borders if this object shouldn’t
        paint within the current painting root.

2010-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r54311.

    2010-02-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7577604> Drag and Drop: background elements are bleeding through
        https://bugs.webkit.org/show_bug.cgi?id=34546

        * manual-tests/drag-image-table-part-decorations.html: Added.
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations): Bail out if this object shouldn’t
        paint within the current painting root.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintBoxDecorations): Ditto.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell): Ditto.
        (WebCore::RenderTableCell::paintBoxDecorations): Ditto.

2010-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r54083.

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

        Reviewed by Adam Roben.

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

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

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

2010-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r48879.

    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.

2010-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r48374.

    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. 

2010-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r48364.

    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):

2010-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r48363.

    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):

2010-02-02  Mark Rowe  <mrowe@apple.com>

        Merge r54242.

    2010-02-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34076
        <rdar://problem/7594601> Crash in mangleme in WebCore::Element::getAttribute

        Test: fast/forms/misplaced-img-form-registration.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::registerImgElement): Assert that the same image isn't added
        to vector again.
        (WebCore::HTMLFormElement::removeImgElement): Similarly, assert that we're removing something
        that's actually registered.

        * html/HTMLImageElement.cpp: (WebCore::HTMLImageElement::~HTMLImageElement): If parser fails
        to insert the image element, then there will be no removed from tree notification either,
        need to unregister right away.

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

        Merge r53114.

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

        Reviewed by Dan Bernstein.

        Fix handling of unusual kana sequences in search
        https://bugs.webkit.org/show_bug.cgi?id=33506

        * editing/TextIterator.cpp:
        (WebCore::composedVoicedSoundMark): Removed unnnecessary case for a
        non-kana-letter character. This function only works for kana letters.
        (WebCore::SearchBuffer::isBadMatch): Fixed voiced sound mark code to
        properly handle cases where one character has a shorter list of
        combining voiced sound marks than the other.

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

        Merge r53078.

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

        Reviewed by Alexey Proskuryakov.

        REGRESSION: Japanese text search ignores small vs. large and voicing mark differences
        https://bugs.webkit.org/show_bug.cgi?id=30437
        rdar://problem/7214058

        Test: fast/text/find-kana.html

        * editing/TextIterator.cpp:
        (WebCore::isKanaLetter): Added.
        (WebCore::isSmallKanaLetter): Added.
        (WebCore::composedVoicedSoundMark): Added.
        (WebCore::isCombiningVoicedSoundMark): Added.
        (WebCore::containsKanaLetters): Added.
        (WebCore::normalizeCharacters): Added.
        (WebCore::SearchBuffer::SearchBuffer): Initialize the data members
        m_targetRequiresKanaWorkaround and m_normalizedTarget.
        (WebCore::SearchBuffer::isBadMatch): Added. Checks for matches that
        ICU's default collation considers correct, but we consider incorrect.
        (WebCore::SearchBuffer::search): Added code to call isBadMatch and
        move to the next match with usearch_next if the result is true.

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

        Merge r51704.

    2009-12-04  Enrica Casucci  <enrica@apple.com>

        Reviewed by John Sullivan.

        Mail.app crashes when indenting table pasted from Numbers.app.
        <rdar://problem/7209507>
        https://bugs.webkit.org/show_bug.cgi?id=32166

        Test: LayoutTests/editing/execCommand/indent-partial-table.html
        
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentRegion): Added test to verify that the end of the paragraph
        after the selection has not been moved.

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

        Merge r51962.

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

        Reviewed by Alexey Proskuryakov.

        Crash in XMLTokenizer::popCurrentNode if window.close() is called during parsing
        https://bugs.webkit.org/show_bug.cgi?id=31576

        Add a RefCounted wrapper object around xmlParserCtxtPtr so we can
        maintain it's lifetime more effectively.

        Test: fast/parser/xhtml-close-while-parsing.xhtml

        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::popCurrentNode):
        * dom/XMLTokenizer.h:
        (WebCore::XMLParserContext::context):
        (WebCore::XMLParserContext::XMLParserContext):
        (WebCore::XMLTokenizer::context):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLParserContext::createStringParser):
        (WebCore::XMLParserContext::createMemoryParser):
        (WebCore::XMLParserContext::~XMLParserContext):
        (WebCore::XMLTokenizer::~XMLTokenizer):
        (WebCore::XMLTokenizer::doWrite):
        (WebCore::XMLTokenizer::initializeParserContext):
        (WebCore::XMLTokenizer::doEnd):
        (WebCore::XMLTokenizer::lineNumber):
        (WebCore::XMLTokenizer::columnNumber):
        (WebCore::XMLTokenizer::stopParsing):
        (WebCore::parseXMLDocumentFragment):
        (WebCore::parseAttributes):

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

        Merge r50110.

    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.

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

        Merge r50017.

    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.

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

        Merge r52784.

    2010-01-04  Chris Evans  <cevans@chromium.org>

        Reviewed by Adam Barth.

        Adopt a more conservative approach for loading CSS cross-origin. When
        loading CSS cross-origin, it must be start with valid CSS if the MIME
        type is broken.

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

        Test: http/tests/security/cross-origin-css.html
        Test: http/tests/security/cross-origin-css-in-xml.xml

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet): Enforce stricter load
        requirements for cross-origin loads.
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet): Enforce stricter load
        requirements for cross-origin loads.
        * css/CSSStyleSheet.h:
        * css/CSSStyleSheet.cpp:
        * css/CSSParser.cpp:
        * css/CSSGrammar.y:
        * css/CSSParser.h:
        Add ability to tell whether the CSS parse started with a syntactically
        valid CSS rule.
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::sheetText): Add ability to return
        whether the MIME type was acceptable for CSS.
        (WebCore::CachedCSSStyleSheet::canUseSheet): If requested, return
        whether the MIME type was valid or not.
        * dom/ProcessingInstruction.cpp
        (WebCore::ProcessingInstruction::setCSSStyleSheet): Make use of strict
        mode explicit and add comment.

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

        Merge r51645.

    2009-12-03  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Multiple Undos removes the last posted comment and/or the ones before it.
        <rdar://problem/6557066>
        https://bugs.webkit.org/show_bug.cgi?id=32079
        
        The fix consists in preventing Undos and Redos to be applied to elements that
        are no longer editable. We do not attempt to remove the commands from the queue.
        It is a relatively simple fix that comes with a little extra overhead for the apply
        and unapply methods where we are now performing the editability check.

        Test: editing/undo/undo-indent-noneditable.html

        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        (WebCore::AppendNodeCommand::doUnapply):
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doApply):
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):
        (WebCore::InsertIntoTextNodeCommand::doUnapply):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        * editing/JoinTextNodesCommand.cpp:
        (WebCore::JoinTextNodesCommand::doApply):
        (WebCore::JoinTextNodesCommand::doUnapply):
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doApply):
        (WebCore::MergeIdenticalElementsCommand::doUnapply):
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::doApply):
        (WebCore::RemoveNodeCommand::doUnapply):
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply):
        (WebCore::SplitElementCommand::doUnapply):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply):
        (WebCore::SplitTextNodeCommand::doUnapply):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::doUnapply):
        (WebCore::WrapContentsInDummySpanCommand::doReapply):

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

        Merge r50310.

    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/7067033>
        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.

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

        Merge r47726.

    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.

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

        Merge r51659.

    2009-12-03  Enrica Casucci  <enrica@apple.com>

        Reviewed by John Sullivan.

        SpinTracer: 349 spins in Mail at WebCore::Editor::advanceToNextMisspelling(bool)
        <rdar://problem/7198592>
        https://bugs.webkit.org/show_bug.cgi?id=32129

        Fixed the way the next paragraph is calculated.
        I've added a repro case in Safari and attached it to the Bugzilla bug.

        * editing/Editor.cpp:
        (WebCore::findFirstMisspellingOrBadGrammarInRange): Changed the way we move to the
        next paragraph in the loop.

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

        Merge r53813.

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

        Rubber-stamped by Geoffrey Garen.

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

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

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

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

        Merge r53812.

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

        Reviewed by Geoffrey Garen.

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

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

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

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

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

        Merge r50466.

    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.

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

        Merge r50470.

    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().

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

        Merge r50435.

    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:

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

        Merge r50083.

    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):

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

        Merge r53567.

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

        MSAA: accSelect() is not implemented

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

        Reviewed by Darin Adler.

        Test: platform/win/accessibility/selection-and-focus.html

        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::setSelected):
        Return early if the object is not selectable.

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

        Merge r53512.

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

        MSAA: The child <option> elements of a non-multiple <select> are not
        exposed

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

        Reviewed by Alice Liu.

        This exposes the child <option> elements in a format similar to
        Firefox's: the <select> element has one child, a hidden list object,
        and this list has as its children the <option> elements.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files to project.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate):
        If the element is a RenderMenuList, create an AccessibilityMenuList.
        (WebCore::AXObjectCache::getOrCreate):
        Add new types to create by role value.

        * accessibility/AccessibilityMenuList.cpp: Added.
        (WebCore::AccessibilityMenuList::AccessibilityMenuList):
        Call the base class constructor. Assert that the RenderObject passed
        is a RenderMenuList.
        (WebCore::AccessibilityMenuList::press):
        Show or hide the popup menu.
        (WebCore::AccessibilityMenuList::addChildren):
        Create an AccessibilityMenuListPopup. If the platform ignores its
        accessibility, remove it from the object cache and return early.
        Otherwise, set its parent object to this object, add it to our list of
        children, and tell it to add its children.
        (WebCore::AccessibilityMenuList::childrenChanged):
        Tell our child hidden list that its children changed.
        (WebCore::AccessibilityMenuList::isCollapsed):
        Return whether the popup menu is visible.

        * accessibility/AccessibilityMenuList.h: Added.
        (WebCore::AccessibilityMenuList::create):
        Adopt and return a new RenderMenuList.
        (WebCore::AccessibilityMenuList::isMenuList):
        (WebCore::AccessibilityMenuList::roleValue):
        (WebCore::AccessibilityMenuList::accessibilityIsIgnored):
        (WebCore::AccessibilityMenuList::canSetFocusAttribute):

        * accessibility/AccessibilityMenuListOption.cpp: Added.
        (WebCore::AccessibilityMenuListOption::AccessibilityMenuListOption):
        Initialize the pointer to our parent popup menu.
        (WebCore::AccessibilityMenuListOption::setElement):
        Assert that the element is an <option> element.
        (WebCore::AccessibilityMenuListOption::actionElement):
        Return our element.
        (WebCore::AccessibilityMenuListOption::parentObject):
        Return our parent popup menu.
        (WebCore::AccessibilityMenuListOption::isEnabled):
        Return true if the element itself is enabled.
        (WebCore::AccessibilityMenuListOption::isVisible):
        Return true if the popup is visible, or return true if the popup is
        collapsed but the element is selected.
        (WebCore::AccessibilityMenuListOption::isOffScreen):
        Return true if the object is invisible.
        (WebCore::AccessibilityMenuListOption::isSelected):
        (WebCore::AccessibilityMenuListOption::setSelected):
        (WebCore::AccessibilityMenuListOption::nameForMSAA):
        Return the <option> element's text.
        (WebCore::AccessibilityMenuListOption::canSetSelectedAttribute):
        Return true if enabled.
        (WebCore::AccessibilityMenuListOption::elementRect):
        Return the AccessibilityMenuList's rect.

        * accessibility/AccessibilityMenuListOption.h: Added.
        (WebCore::AccessibilityMenuListOption::create):
        Adopt and return a new AccessibilityMenuListOption.
        (WebCore::AccessibilityMenuListOption::setParent):
        (WebCore::AccessibilityMenuListOption::isMenuListOption):
        (WebCore::AccessibilityMenuListOption::roleValue):
        (WebCore::AccessibilityMenuListOption::canHaveChildren):
        (WebCore::AccessibilityMenuListOption::size):

        * accessibility/AccessibilityMenuListPopup.cpp: Added.
        (WebCore::AccessibilityMenuListPopup::AccessibilityMenuListPopup):
        Initialize the pointer to our parent list.
        (WebCore::AccessibilityMenuListPopup::isVisible):
        Return false; we're never considered visible.
        (WebCore::AccessibilityMenuListPopup::isOffScreen):
        Return true if the popup is collapsed.
        (WebCore::AccessibilityMenuListPopup::parentObject):
        Return our parent AccessibilityMenuList.
        (WebCore::AccessibilityMenuListPopup::isEnabled):
        Return true if our parent is enabled.
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
        If the element is an <option> element, create a list item for it, and
        set the object's element to this element.
        (WebCore::AccessibilityMenuListPopup::press):
        Call our parent's press() function to show or hide the popup menu.
        (WebCore::AccessibilityMenuListPopup::addChildren):
        Walk the select element's children, and create list items for them. Add
        them to our list of children.
        (WebCore::AccessibilityMenuListPopup::childrenChanged):
        If any of our children have been detached from the document, remove
        them from the AXObjectCache and from our child list.
        (WebCore::AccessibilityMenuListPopup::setMenuList):

        * accessibility/AccessibilityMenuListPopup.h: Added.
        (WebCore::AccessibilityMenuListPopup::create):
        Adopt and return an AccessibilityMenuListPopup.
        (WebCore::AccessibilityMenuListPopup::isMenuListPopup):
        (WebCore::AccessibilityMenuListPopup::elementRect):
        (WebCore::AccessibilityMenuListPopup::size):
        (WebCore::AccessibilityMenuListPopup::roleValue):

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::actionVerb):
        Add the menuListAction and menuListPopupAction verbs.

        * accessibility/AccessibilityObject.h:
        (WebCore::):
        Add new roles.
        (WebCore::AccessibilityObject::isMenuList):
        Stubbed.
        (WebCore::AccessibilityObject::isMenuListHiddenList):
        Stubbed.
        (WebCore::AccessibilityObject::isMenuListOption):
        Stubbed.
        (WebCore::AccessibilityObject::isVisible):
        Stubbed.

        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ignore the new object type.

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ditto.

        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ditto.

        * accessibility/qt/AccessibilityObjectQt.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ditto.

        * accessibility/win/AccessibilityObjectWin.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Allow the new object types.

        * accessibility/wx/AccessibilityObjectWx.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Ignore the new object type.

        * accessibility/win/AccessibilityObjectWin.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        If the object is an AccessibilityMenuListHiddenList or
        AccessibilityMenuListOption, include it.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::disabled):
        Call ownElementDisabled().

        * html/HTMLOptionElement.h:
        (WebCore::HTMLOptionElement::ownElementDisabled):
        Return the base class implementation of disabled, which returns
        whether this <option> itself is disabled.

        * platform/LocalizedStrings.h:
        Declare new localized string functions.

        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::AXMenuListPopupActionVerb):
        Stubbed.
        (WebCore::AXMenuListActionVerb):
        Stubbed.

        * platform/haiku/LocalizedStringsHaiku.cpp:
        (WebCore::AXMenuListPopupActionVerb):
        Stubbed.
        (WebCore::AXMenuListActionVerb):
        Stubbed.

        * platform/mac/LocalizedStringsMac.mm:
        (WebCore::AXMenuListPopupActionVerb):
        Call the view factory's method.
        (WebCore::AXMenuListActionVerb):
        Ditto.

        * platform/qt/Localizations.cpp:
        (WebCore::AXMenuListPopupActionVerb):
        Stubbed.
        (WebCore::AXMenuListActionVerb):
        Stubbed.

        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::AXMenuListPopupActionVerb):
        Stubbed.
        (WebCore::AXMenuListActionVerb):
        Stubbed.

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

        Merge r53220.

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

        MSAA: selected, selectable, extended selectable, and multiple
        selectable states are not reported

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

        Reviewed by Darin Adler.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isMultiSelectable):
        Use the correct function name - the function name overriden by
        and used in AccessiblityRenderObject.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):
        Update for function rename.
        (webkit_accessible_selection_select_all_selection):
        Ditto.

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

        Merge r52351.

    2009-12-17  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility role of list items is wrong

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

        Reviewed by Adam Roben.

        Test: platform/win/accessibility/list-item-role.html

        * accessibility/AccessibilityObject.h:
        (WebCore::):
        Add a ListItemRole to the enum.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::msaaRoleForRenderer):
        Return the role for the RenderObject, or UnknownRole if unknown.
        (WebCore::AccessibilityRenderObject::roleValueForMSAA):
        Call msaaRoleForRenderer() to get the role. If it is UnknownRole, fall
        back to m_role.

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

        Merge r52773.

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

        MSAA: <select> elements should broadcast value change events

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

        <rdar://problem/7332364>

        Reviewed by Darin Adler.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postNotification):
        If the post type is async, follow the old code path; otherwise, call
        postPlatformNotification().

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        Added a new accessibility notification, AXMenuListValueChanged. Added
        a new parameter to postNotification() to specify whether the post should
        be synchronous or asynchronous.

        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        If the WebCore notification is AXMenuListValueChanged, broadcast an
        EVENT_OBJECT_VALUECHANGE event.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::setSelectedIndex):
        When the selected index of a RenderMenuList is changed, call
        RenderMenuList::didSetSelectedIndex().

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::RenderMenuList):
        Initialize new member
        (WebCore::RenderMenuList::didSetSelectedIndex):
        If the selected index has changed, post AXMenuListValueChanged to the
        object synchronously.

        * rendering/RenderMenuList.h:
        Declare didSetSelectedIndex(), and add a member to hold the last
        selected index.

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

        Merge r52352.

    2009-12-18  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(r52233): MSAA: Accessibility role of lists is wrong

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

        Reviewed by Adam Roben.

        Test: platform/win/accessibility/list-role.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::roleValueForMSAA):
        Return roleValue(), rather than m_role, as subclasses may override it.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::roleValueForMSAA):
        Fallback to roleValue(), rather than m_role, as it may be overriden.

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

        Merge r52233.

    2009-12-16  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility role of text nodes is wrong

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

        Reviewed by Alice Liu.

        Test: platform/win/accessibility/text-role.html

        * accessibility/AccessibilityObject.h:
        (WebCore::):
        Add a new role to the enum.
        (WebCore::AccessibilityObject::roleValueForMSAA):
        Declare a function to return the accessibility role for MSAA; the base
        implementation returns the old role value.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        Initialize m_roleForMSAA.
        (WebCore::AccessibilityRenderObject::roleValueForMSAA):
        If m_roleForMSAA has been set, return it. If the renderer is a
        RenderText, set the role to EditableTextRole to match IE and Firefox.
        Otherwise, set the role for MSAA to the old role value.

        * accessibility/AccessibilityRenderObject.h:
        Add a member to hold the role for MSAA, and declare an override of
        roleValueForMSAA().

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

        Merge r50196.

    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::):

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

        Merge r53867.

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

        Reviewed by Jon Honeycutt.

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

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

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

        Merge r52527.

    2009-12-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7487164> First line of text cannot be selected
        https://bugs.webkit.org/show_bug.cgi?id=32749

        Test: fast/text/remove-zero-length-run.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionLineBox): Changed code that assumed that if a box was being
            removed, it was the only box in the RenderText. Instead, correctly preserve the list of
            text boxes.
        (WebCore::RenderText::checkConsistency): Updated for earlier rename.

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

        Merge r53581.

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

        <rdar://problem/7086565> Crash in WebCore::PlugInView::dispatchNPEvent

        Reviewed by Sam Weinig.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::handleEvent):
        Ref the PluginView to protect it from deletion while calling into the
        plug-in.

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

        Merge r46792.

    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):

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

        Merge r50698.

    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):

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

        Merge r52073.

    2009-12-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7341364> Crash at HTMLParser::popOneBlockCommon() after
        handling misnested residual style tags

        Test: fast/parser/residual-style-close-ref-clone.html

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleResidualStyleCloseTagAcrossBlocks): Gave the
        block stack a strong reference to the cloned residual style element. 

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

        Merge r48810.

    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):

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

        Merge r51877.

    2009-12-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Navigating to a cached page can result in accessing a destroyed HTMLInputElement.
        <rdar://problem/6856662> and https://webkit.org/b/32293

        Test: fast/loader/input-element-page-cache-crash.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Make sure to unregister for the activation
          callback after the new m_autocomplete setting has been stored so the unregistration actually
          takes place.

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

        Merge r51727.

    2009-12-05  Adam Langley  <agl@google.com>

        Reviewed by Adam Barth.

        Check that a CSS format() argument is of a valid type.

        https://bugs.webkit.org/show_bug.cgi?id=31815
        http://code.google.com/p/chromium/issues/detail?id=28582

        Test: fast/css/url-format-non-string.html

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

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

        Merge r51881.

    2009-12-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebCore source level debugging on Windows not reliable in some cases
        https://bugs.webkit.org/show_bug.cgi?id=32297

        Customized pdb file name/location for WebCore static library.

        * WebCore.vcproj/WebCoreCommon.vsprops: Add ProgramDataBaseFileName.

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

        Merge r51205.

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

        Reviewed by Dave Hyatt.

        -webkit-user-drag: element Drag images include overflow decorations from incorrect nodes
        https://bugs.webkit.org/show_bug.cgi?id=31656

        Make sure we're a child of the painting root before drawing overflow features.

        * manual-tests/user-drag-with-decorations.html: Added.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):

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

        Merge r52749.

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

        Reviewed by Ada Chan and Mark Rowe.

        Updated copyright string

        * Info.plist:
        * WebCore.vcproj/QTMovieWin.rc:

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

        Merge r53273.

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

        Windows build fixes.
        Add forward declarations and additional includes of windows.h.

        * platform/Cursor.h: Add forward declaration of HCURSOR. Move destructor implementation into cpp.
        * platform/graphics/transforms/TransformationMatrix.h: Add forward declaration of XFORM. Remove windows.h include.
        * platform/graphics/win/TransformationMatrixWin.cpp: Add include of windows.h.
        * platform/win/CursorWin.cpp: Moved destructor of SharedCursor here.
        (WebCore::SharedCursor::~SharedCursor): Moved here.
        * platform/win/EventLoopWin.cpp: Add include of windows.h.
        * platform/win/SystemInfo.cpp: Add include of windows.h.

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

        Merge r52141.

    2009-12-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        WebCore part of <rdar://problem/7173515> Use LOGFONT support in Core
        Graphics when available

        When using a version of Core Graphics with LOGFONT support, this fixes
        <rdar://problem/5764844> First-time launch is painfully slow due to font
        plist creation
        and <rdar://problem/6576281> 12px synthetic-italics Tahoma text is less
        readable in Safari than in Firefox/IE due to poorly-spaced letters

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): No longer call drawGDIGlyphs for stroked
        text.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::createGDIFont): Added a synthesizeItalic parameter. When set
        to true, if italics are desired but the best match lacks italics,
        creates and returns a synthetic italics font.
        (WebCore::FontCache::createFontPlatformData): Ask to synthesize italics
        if needed.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Updated an
        assertion, and changed to create the CGFont from the LOGFONT.
        (WebCore::createFontCustomPlatformData): Changed cgFont to be a
        RetainPtr. Do not create a CGFont from the font data if it can be
        created from the LOGFONT in fontPlatformData().
        * platform/graphics/win/FontDatabase.cpp:
        (WebCore::populateFontDatabase): Avoid font database work if fonts are
        not going to be looked up by name.
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::platformDataInit): Create the CGFont from
        a LOGFONT based on the HFONT.

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

        Fix the build.

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

2009-10-30  Mark Rowe  <mrowe@apple.com>

        Merge r50354.

    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-30  Mark Rowe  <mrowe@apple.com>

        Merge r50353.

    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-27  Mark Rowe  <mrowe@apple.com>

        Merge r50165.

    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-23  Mark Rowe  <mrowe@apple.com>

        Merge r47534.

    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-10-16  Mark Rowe  <mrowe@apple.com>

        Merge r48971.

    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-16  Mark Rowe  <mrowe@apple.com>

        Merge r48683.

    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-10-14  Mark Rowe  <mrowe@apple.com>

        Merge r48531.

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

        Fix windows build.
        
        * platform/win/PopupMenuWin.cpp:

2009-10-14  Mark Rowe  <mrowe@apple.com>

        Merge r48529.

    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-10-14  Mark Rowe  <mrowe@apple.com>

        Merge r48446.

    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-10-14  Mark Rowe  <mrowe@apple.com>

        Merge r48396.

    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-10-14  Mark Rowe  <mrowe@apple.com>

        Merge r48375.

    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-10-14  Mark Rowe  <mrowe@apple.com>

        Merge r48370.

    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-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r48308.

    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-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r46645.

    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-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r49111.

    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-13  Mark Rowe  <mrowe@apple.com>

        Merge r47534.

    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-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r48492.

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

        Reviewed by Oliver Hunt.

        <rdar://problem/7007541> 
        CrashTracer: 4800+ crashes 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-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r49026.

    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-13  Mark Rowe  <mrowe@apple.com>

        Merge r47494.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r49218.

    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-12  Mark Rowe  <mrowe@apple.com>

        Merge r47883.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48787.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48775.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48572.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r47801.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r47771.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48848.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48547.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48546.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r47900.

    Merge r48743.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r46136.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r47509.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48647.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r46521.

    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
        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>

        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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48957.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48956.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48953.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r46548.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48369.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r46058.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r45945.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48725.

    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-10-08  Mark Rowe  <mrowe@apple.com>

        Merge r48521.

    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-10-08  Mark Rowe  <mrowe@apple.com>

        Merge r48960.

    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-10-08  Mark Rowe  <mrowe@apple.com>

        Merge r46604.

    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-10-08  Mark Rowe  <mrowe@apple.com>

        Merge r48443.

    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-10-08  Mark Rowe  <mrowe@apple.com>

        Merge r48359.

    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-10-08  Mark Rowe  <mrowe@apple.com>

        Merge r48358.

    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-10-08  Mark Rowe  <mrowe@apple.com>

        Merge r46598.

    === 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-09-14  Mark Rowe  <mrowe@apple.com>

        Merge r48367.

    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-04  Mark Rowe  <mrowe@apple.com>

        Merge r48085.

    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  Mark Rowe  <mrowe@apple.com>

        Merge r48070.

    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  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adele Petersen.

        - Fix <rdar://problem/7192902>

        Never throw away the first frame in an animation.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2009-09-04  Mark Rowe  <mrowe@apple.com>

        Merge r48062.

    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-08-22  Mark Rowe  <mrowe@apple.com>

        Merge r47679.

    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  Mark Rowe  <mrowe@apple.com>

        Merge r47663.

    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-20  Mark Rowe  <mrowe@apple.com>

        Merge r47606.

    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-19  Mark Rowe  <mrowe@apple.com>

        Merge r47535.

    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  Mark Rowe  <mrowe@apple.com>

        Merge r47531.

    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-18  Mark Rowe  <mrowe@apple.com>

        Merge r47482.

    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  Steve Falkenburg  <sfalken@apple.com>

        Merge r47438.

    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-17  Steve Falkenburg  <sfalken@apple.com>

        Merge r47311.

    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-07-27  Mark Rowe  <mrowe@apple.com>

        Merge r46449.

    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-23  Mark Rowe  <mrowe@apple.com>

        Merge r46246.

    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-20  Mark Rowe  <mrowe@apple.com>

        Merge r46039.

    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-16  Mark Rowe  <mrowe@apple.com>

        Merge r45979.

    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-15  Steve Falkenburg  <sfalken@apple.com>

        Merge r45892.
    
    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  Mark Rowe  <mrowe@apple.com>

        Merge r45850.

    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-14  Mark Rowe  <mrowe@apple.com>

        Merge r45836.

    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-14  Mark Rowe  <mrowe@apple.com>

        Merge r45832.

    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-12  Mark Rowe  <mrowe@apple.com>

        Merge r45758.

    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-12  Mark Rowe  <mrowe@apple.com>

        Merge r45755.

    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-12  Mark Rowe  <mrowe@apple.com>

        Merge r45744.

    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-12  Mark Rowe  <mrowe@apple.com>

        Merge r45734.

    2009-07-10  Brady Eidson  <beidson@apple.com>

        Style cleanup over my last patch.

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

2009-07-12  Mark Rowe  <mrowe@apple.com>

        Merge r45733.

    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-12  Mark Rowe  <mrowe@apple.com>

        Merge r45732.

    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-12  Mark Rowe  <mrowe@apple.com>

        Merge r45728.

    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-12  Mark Rowe  <mrowe@apple.com>

        Merge r45721.

    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-12  Mark Rowe  <mrowe@apple.com>

        Merge r45715.

    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-12  Mark Rowe  <mrowe@apple.com>

        Merge r45710.

    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-10  Beth Dakin  <bdakin@apple.com>

        <rdar://problem/7045243> Roll text metrics change out

        * css/html.css:
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/graphics/win/SimpleFontDataCGWin.cpp:
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):

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

        <rdar://problem/7047403> Disable channel messaging

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

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

        <rdar://problem/7048551> Disable datagrid

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/build-generated-files.sh:

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-07  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 GTK+ symbols.
        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 GTK+ port.

        * 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-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 ==
