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