WebCore:
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 6 Mar 2008 17:21:55 +0000 (17:21 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 6 Mar 2008 17:21:55 +0000 (17:21 +0000)
commit3b8eacb489d25b8adaac2c6a6245d2a53a245c1d
tree4034186df19254324a556d7447e76f509d76be9d
parent51751a777e6255736557089bdc948e0209ce9c44
WebCore:

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17526
          REGRESSION: iframes are added to Safari's History menu
          by separating the visited link machinery from global history

        This should also make page loading faster due to more efficient visited link coloring.

        * WebCore.base.exp: Updated.
        * WebCore.vcproj/WebCore.vcproj: Added PageGroup.h/cpp, removed GlobalHistory.h/cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto. Also removed WebCoreHistory.h/m.

        * css/CSSStyleSelector.cpp: Updated includes.
        (WebCore::CSSStyleSelector::initElementAndPseudoState): Eliminated code to set
        currentEncodedURL.
        (WebCore::checkPseudoState): Moved most of the code inside a new
        PageGroup::isLinkVisited function.
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Tightened code a bit by using
        references and only getting colors when needed.
        (WebCore::CSSStyleSelector::getColorFromPrimitiveValue): Ditto.
        * css/CSSStyleSelector.h: Removed EncodedURL, m_encodedURL, and setEncodedURL.

        * dom/Document.cpp:
        (WebCore::Document::attach): Removed call to setEncodedURL.
        (WebCore::Document::setURL): Ditto.
        (WebCore::Document::recalcStyleSelector): Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget): Changed code to use
        early exit idiom to be a little more readable.
        (WebCore::FrameLoader::urlsMatchItem): Change to use a reference for slightly
        better efficiency.
        (WebCore::FrameLoader::goToItem): Use early exit idiom to be a little more
        readable.
        (WebCore::FrameLoader::updateHistoryForStandardLoad): Moved history code back
        in here and got rid of the helper function updateGlobalHistory, restoring the
        logic before r30549. Also added a call to the new addVisitedLink function.
        (WebCore::FrameLoader::updateHistoryForClientRedirect): Added code to call
        addVisitedLink here.
        (WebCore::FrameLoader::updateHistoryForBackForwardNavigation): Removed comment.
        (WebCore::FrameLoader::updateHistoryForReload): Removed call to
        updateGlobalHistory; we can just go without updating global history or
        visited links here, at least for now, since it's not clear that a reload
        is a "history event".
        (WebCore::FrameLoader::updateHistoryForRedirectWithLockedHistory): Moved
        history code back where it was, and added the call to addVisitedLink, just
        as in updateHistoryForStandardLoad above.
        * loader/FrameLoader.h: Removed updateGlobalHistory function.

        * page/Chrome.cpp:
        (WebCore::ChromeClient::populateVisitedLinks): Added. Empty placeholder so we
        don't have to implement this for every port all at once.
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): Changed to use the
        new PageGroup class.
        * page/ChromeClient.h: Added populateVisitedLinks function, used to fill the
        visited links set from the global history at application startup time.

        * page/FrameTree.cpp:
        (WebCore::FrameTree::find): Updated to use the new PageGroup class.

        * page/GlobalHistory.h: Removed.
        * page/win/GlobalHistoryWin.cpp: Removed.
        * page/mac/GlobalHistoryMac.mm: Removed.
        * platform/mac/WebCoreHistory.h: Removed.
        * platform/mac/WebCoreHistory.m: Removed.
        * platform/win/WebCoreHistory.cpp: Removed.
        * platform/win/WebCoreHistory.h: Removed.

        * page/Page.cpp:
        (WebCore::Page::Page): Set m_group to 0.
        (WebCore::Page::setGroupName): Set up m_group. If the page is not in any
        group, set it to 0 for now to postpone the cost of creating a group.
        (WebCore::Page::initGroup): Added. Sets m_group to point to a single-page
        group; used when getting a group.
        (WebCore::Page::removeAllVisitedLinks): Added. Calls removeVisitedLinks
        on all page groups.
        * page/Page.h: Moved enums inside the WebCore namespace. Removed the
        frameNamespace function and instead added the group and groupPtr functions.

        * page/PageGroup.cpp: Added. Contains all the visited code from the
        CSSStyleSelector in the isVisitedLink function, but more efficient because
        we don't allocate memory for the buffer.
        * page/PageGroup.h: Added.

        * platform/gtk/TemporaryLinkStubs.cpp: Removed historyContains.
        * platform/qt/TemporaryLinkStubs.cpp: Removed unneeded include.
        * platform/wx/TemporaryLinkStubs.cpp: Removed historyContains.

WebKit:

        * WebKit.xcodeproj/project.pbxproj: Added WebHistoryInternal.h.

WebKit/mac:

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17526
          REGRESSION: iframes are added to Safari's History menu
          by separating the visited link machinery from global history

        * History/WebHistory.mm: Moved WebHistoryPrivate inside this file.
        (-[WebHistoryPrivate removeItemFromDateCaches:]): Removed the underscore from this
        method name, since it's on a private object.
        (-[WebHistoryPrivate removeItemForURLString:]): Added a call to the
        PageGroup::removeAllVisitedLinks function if the last URL was removed.
        (-[WebHistoryPrivate addItemToDateCaches:]): Removed the underscore from this
        method name, since it's on a private object.
        (-[WebHistoryPrivate removeAllItems]): Call PageGroup::removeAllVisitedLinks.
        (-[WebHistoryPrivate ageLimitDate]): Removed the underscore from this
        method name, since it's on a private object.
        (-[WebHistoryPrivate loadHistoryGutsFromURL:savedItemsCount:collectDiscardedItemsInto:error:]):
        Ditto.
        (-[WebHistoryPrivate saveHistoryGuts:URL:error:]): Ditto. Also changed this
        to correctly return the error by using the newer version of writeToURL: and
        removed the FIXME about that.
        (-[WebHistoryPrivate addVisitedLinksToPageGroup:]): Added. Calls addVisitedLink
        for every link in the history.
        (-[WebHistory saveToURL:error:]): Removed the FIXME, since we do get the error now.
        (-[WebHistory addItem:]): Moved into the WebPrivate category.
        (-[WebHistory addItemForURL:]): Ditto.
        (-[WebHistory _addItemForURL:title:]): Added. Used for the normal case where we
        create an item and already know its title.
        (-[WebHistory ageLimitDate]): Moved into the WebPrivate category.
        (-[WebHistory containsItemForURLString:]): Ditto.
        (-[WebHistory removeItem:]): Ditto.
        (-[WebHistory setLastVisitedTimeInterval:forItem:]): Ditto.
        (-[WebHistory _itemForURLString:]): Ditto.
        (-[WebHistory _addVisitedLinksToPageGroup:]): Added. For use only inside WebKit.

        * History/WebHistoryInternal.h: Added.
        * History/WebHistoryItemInternal.h: Tweaked formatting and includes.
        * History/WebHistoryPrivate.h: Moved the WebHistoryPrivate class out of this header.
        Also reorganized what was left behind.

        * WebCoreSupport/WebChromeClient.h: Added populateVisitedLinks.
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::populateVisitedLinks): Added a call to the new
        -[WebHistory _addVisitedLinksToPageGroup:] method.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistory): Changed code to use the new
        -[WebHistory _addItemForURL:title:] method.

WebKit/win:

        Reviewed by Mitz.

        - fix http://bugs.webkit.org/show_bug.cgi?id=17526
          REGRESSION: iframes are added to Safari's History menu
          by separating the visited link machinery from global history

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::populateVisitedLinks): Added a call to the new
        WebHistory::addVisitedLinksToPageGroup function.
        * WebCoreSupport/WebChromeClient.h: Added populateVisitedLinks.
        Also fixed the webView function to be non-virtual.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory): Changed to use the
        new WebHistory::addItem function.
        (WebFrameLoaderClient::webHistory): Changed to return a WebHistory*,
        there's no reason to AddRef the result from this function.
        * WebCoreSupport/WebFrameLoaderClient.h: Ditto.

        * WebHistory.cpp: Removed IWebHistoryPrivate and _WebCoreHistoryProvider.
        (WebHistory::QueryInterface): Removed IWebHistoryPrivate.
        (sharedHistoryStorage): Added.
        (WebHistory::sharedHistory): Added.
        (WebHistory::optionalSharedHistory): Changed to use sharedHistory().
        (WebHistory::setOptionalSharedHistory): Changed to require a WebHistory
        object, not just an IWebHistory.
        (WebHistory::removeAllItems): Call PageGroup::removeAllVisitedLinks.
        (WebHistory::addItem): Changed parameter types since this is called with
        arguments from WebCore -- at some point this could allow better efficiency.
        (WebHistory::removeItemForURLString):  Call PageGroup::removeAllVisitedLinks
        if the last URL is being removed.
        (addVisitedLinkToPageGroup): Added. Helper. Adds a single link to a group's
        visited link set.
        (WebHistory::addVisitedLinksToPageGroup): Added. Adds all links to a group's
        visited link.
        * WebHistory.h: Removed IWebHistoryPrivate. Removed optionalSharedHistoryInternal
        and added sharedHistory. Replaced addItemForURL and containsItemForURLString with
        non-virtual addItem and addVisitedLinksToPageGroup functions.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@30840 268f45cc-cd09-0410-ab3c-d52691b4dbfc
42 files changed:
WebCore/ChangeLog
WebCore/WebCore.base.exp
WebCore/WebCore.vcproj/WebCore.vcproj
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/css/CSSStyleSelector.cpp
WebCore/css/CSSStyleSelector.h
WebCore/dom/Document.cpp
WebCore/loader/FrameLoader.cpp
WebCore/loader/FrameLoader.h
WebCore/page/Chrome.cpp
WebCore/page/ChromeClient.h
WebCore/page/FrameTree.cpp
WebCore/page/Page.cpp
WebCore/page/Page.h
WebCore/page/PageGroup.cpp [new file with mode: 0644]
WebCore/page/PageGroup.h [moved from WebCore/page/GlobalHistory.h with 56% similarity]
WebCore/page/mac/GlobalHistoryMac.mm [deleted file]
WebCore/page/win/GlobalHistoryWin.cpp [deleted file]
WebCore/platform/gtk/TemporaryLinkStubs.cpp
WebCore/platform/mac/WebCoreHistory.h [deleted file]
WebCore/platform/mac/WebCoreHistory.m [deleted file]
WebCore/platform/qt/TemporaryLinkStubs.cpp
WebCore/platform/win/WebCoreHistory.cpp [deleted file]
WebCore/platform/win/WebCoreHistory.h [deleted file]
WebCore/platform/wx/TemporaryLinkStubs.cpp
WebKit/ChangeLog
WebKit/WebKit.xcodeproj/project.pbxproj
WebKit/mac/ChangeLog
WebKit/mac/History/WebHistory.mm
WebKit/mac/History/WebHistoryInternal.h [new file with mode: 0644]
WebKit/mac/History/WebHistoryItemInternal.h
WebKit/mac/History/WebHistoryPrivate.h
WebKit/mac/WebCoreSupport/WebChromeClient.h
WebKit/mac/WebCoreSupport/WebChromeClient.mm
WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
WebKit/win/ChangeLog
WebKit/win/WebCoreSupport/WebChromeClient.cpp
WebKit/win/WebCoreSupport/WebChromeClient.h
WebKit/win/WebCoreSupport/WebFrameLoaderClient.cpp
WebKit/win/WebCoreSupport/WebFrameLoaderClient.h
WebKit/win/WebHistory.cpp
WebKit/win/WebHistory.h