Skip to content
  • darin@apple.com's avatar
    WebCore: · 579d1234
    darin@apple.com authored
            Reviewed and tweaked quite a bit by Darin.
    
            Fix for http://bugs.webkit.org/show_bug.cgi?id=14959
            No back forward entry added for pages created in javascript
    
            A new HistoryItem is created for calls to Document::open. Calls to
            Document::write save the written data to a SharedBuffer that is also
            stored on the HistoryItem. When the user navigates back to a
            HistoryItem that has a valid buffer, that data is used for the page
            content.
    
            Tests: http/tests/navigation/document-open-adds-history-item.html
                   http/tests/navigation/document-open-delayed-adds-history-item.html
                   http/tests/navigation/document-open-new-window-adds-history-item.html
                   http/tests/navigation/document-open-replace-no-history-item.html
    
            * bindings/js/JSHTMLDocumentCustom.cpp:
            (WebCore::JSHTMLDocument::open): Pass a MIME type of either "text/html" or
            "text/plain" and a boolean for "replace" in rather than always setting replace
            to true and the MIME type to "text/html".
    
            * dom/DOMImplementation.cpp:
            (WebCore::DOMImplementation::createHTMLDocument): Pass in MIME type and
            replace boolean explicitly, since we don't want to rely on Document::open()'s
            default.
    
            * dom/Document.cpp:
            (WebCore::Document::open): Correctly determine the "replace" boolean.
            Pass along the MIME type, replace boolean, and shared buffer to the
            frame loader's didExplicitOpen function.
            (WebCore::Document::write): Pass MIME type and replace boolean explicitly
            to the open function so we don't do treat it as replace if you write without
            an open. Store text written by the script so it can be used later for history.
            (WebCore::Document::clear): Drop the text written byt he script.
    
            * dom/Document.h: Added MIME type and replace boolean parameters for open.
            Had to keep the old version for the sake of DOM bindings. Added the shared
            buffer used for text written by script.
    
            * history/HistoryItem.cpp:
            (WebCore::HistoryItem::HistoryItem): Copy m_substituteData.
            (WebCore::HistoryItem::substituteData): Added.
            (WebCore::HistoryItem::setSubstituteData): Added.
            * history/HistoryItem.h: Added m_substituteData, getter, and setter.
    
            * loader/FrameLoader.cpp:
            (WebCore::FrameLoader::didExplicitOpen): Added code to create or update the
            history item, including attaching the shared buffer that will contain all
            the data written by script.
            (WebCore::FrameLoader::load): Added a SubstituteData parameter, passed through
            when creating the document loader.
            (WebCore::FrameLoader::reloadAllowingStaleData): Create the document loader
            with the substitute data from the current history item.
            (WebCore::FrameLoader::reload): Ditto.
            (WebCore::FrameLoader::shouldTreatURLAsSameAsCurrent): If the current history
            item has substitute data, then consider the URL from the substitute data
            rather than the one in the history item itself.
            (WebCore::FrameLoader::loadItem): Pass in the history item's substitute data.
            * loader/FrameLoader.h: Added parameters to load and didExplicitOpen.
    
            * platform/text/CharacterNames.h: Added byteOrderMark, and also added it under
            its other official name, zeroWidthNoBreakSpace.
    
            * xml/DOMParser.cpp:
            (WebCore::DOMParser::parseFromString): Pass in MIME type and replace boolean
            explicitly, since we don't want to rely on Document::open()'s default.
            * xml/XMLHttpRequest.cpp:
            (WebCore::XMLHttpRequest::getResponseXML): Ditto.
            * xml/XSLTProcessor.cpp:
            (WebCore::XSLTProcessor::createDocumentFromSource): Ditto.
    
    LayoutTests:
    
            Reviewed by Darin.
    
            Test cases for fix to http://bugs.webkit.org/show_bug.cgi?id=14959
            No back forward entry added for pages created in javascript.
    
            * http/tests/navigation/document-open-adds-history-item-expected.txt: Added.
            * http/tests/navigation/document-open-adds-history-item.html: Added.
            * http/tests/navigation/document-open-delayed-adds-history-item-expected.txt: Added.
            * http/tests/navigation/document-open-delayed-adds-history-item.html: Added.
            * http/tests/navigation/document-open-new-window-adds-history-item-expected.txt: Added.
            * http/tests/navigation/document-open-new-window-adds-history-item.html: Added.
            * http/tests/navigation/document-open-replace-no-history-item-expected.txt: Added.
            * http/tests/navigation/document-open-replace-no-history-item.html: Added.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@29816 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    579d1234