Changeset 49067 in webkit


Ignore:
Timestamp:
Oct 3, 2009 5:17:08 PM (15 years ago)
Author:
abarth@webkit.org
Message:

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

Reviewed by Sam Weinig.

Factor back-forward list methods out of FrameLoader
https://bugs.webkit.org/show_bug.cgi?id=30037

This change moves these back-forward related methods from FrameLoader
to Page. It's possible we should move these methods into some kind of
"page controller" object, but we can figure that out in a future patch.

  • loader/FrameLoader.cpp:
  • loader/FrameLoader.h:
  • loader/RedirectScheduler.cpp: (WebCore::RedirectScheduler::timerFired):
  • page/ContextMenuController.cpp: (WebCore::ContextMenuController::contextMenuItemSelected):
  • page/DOMWindow.cpp: (WebCore::DOMWindow::close):
  • page/History.cpp: (WebCore::History::length):
  • page/Page.cpp: (WebCore::Page::canGoBackOrForward): (WebCore::Page::goBackOrForward): (WebCore::Page::getHistoryLength):
  • page/Page.h:
  • platform/ContextMenu.cpp: (WebCore::ContextMenu::populate): (WebCore::ContextMenu::checkOrEnableIfNeeded):

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

Reviewed by Sam Weinig.

Factor PageController out of FrameLoader and Page
https://bugs.webkit.org/show_bug.cgi?id=30037

  • webkit/webkitwebview.cpp: (webkit_web_view_can_go_back_or_forward):
Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r49064 r49067  
     12009-10-03  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Factor back-forward list methods out of FrameLoader
     6        https://bugs.webkit.org/show_bug.cgi?id=30037
     7
     8        This change moves these back-forward related methods from FrameLoader
     9        to Page.  It's possible we should move these methods into some kind of
     10        "page controller" object, but we can figure that out in a future patch.
     11
     12        * loader/FrameLoader.cpp:
     13        * loader/FrameLoader.h:
     14        * loader/RedirectScheduler.cpp:
     15        (WebCore::RedirectScheduler::timerFired):
     16        * page/ContextMenuController.cpp:
     17        (WebCore::ContextMenuController::contextMenuItemSelected):
     18        * page/DOMWindow.cpp:
     19        (WebCore::DOMWindow::close):
     20        * page/History.cpp:
     21        (WebCore::History::length):
     22        * page/Page.cpp:
     23        (WebCore::Page::canGoBackOrForward):
     24        (WebCore::Page::goBackOrForward):
     25        (WebCore::Page::getHistoryLength):
     26        * page/Page.h:
     27        * platform/ContextMenu.cpp:
     28        (WebCore::ContextMenu::populate):
     29        (WebCore::ContextMenu::checkOrEnableIfNeeded):
     30
    1312009-10-02  Pavel Feldman  <pfeldman@chromium.org>
    232
  • trunk/WebCore/loader/FrameLoader.cpp

    r49059 r49067  
    12711271}
    12721272
    1273 void FrameLoader::goBackOrForward(int distance)
    1274 {
    1275     if (distance == 0)
    1276         return;
    1277        
    1278     Page* page = m_frame->page();
    1279     if (!page)
    1280         return;
    1281     BackForwardList* list = page->backForwardList();
    1282     if (!list)
    1283         return;
    1284    
    1285     HistoryItem* item = list->itemAtIndex(distance);
    1286     if (!item) {
    1287         if (distance > 0) {
    1288             int forwardListCount = list->forwardListCount();
    1289             if (forwardListCount > 0)
    1290                 item = list->itemAtIndex(forwardListCount);
    1291         } else {
    1292             int backListCount = list->backListCount();
    1293             if (backListCount > 0)
    1294                 item = list->itemAtIndex(-backListCount);
    1295         }
    1296     }
    1297    
    1298     ASSERT(item); // we should not reach this line with an empty back/forward list
    1299     if (item)
    1300         page->goToItem(item, FrameLoadTypeIndexedBackForward);
    1301 }
    1302 
    13031273void FrameLoader::loadURLIntoChildFrame(const KURL& url, const String& referer, Frame* childFrame)
    13041274{
     
    39563926
    39573927    return false;
    3958 }
    3959 
    3960 bool FrameLoader::canGoBackOrForward(int distance) const
    3961 {
    3962     if (Page* page = m_frame->page()) {
    3963         if (distance == 0)
    3964             return true;
    3965         if (distance > 0 && distance <= page->backForwardList()->forwardListCount())
    3966             return true;
    3967         if (distance < 0 && -distance <= page->backForwardList()->backListCount())
    3968             return true;
    3969     }
    3970     return false;
    3971 }
    3972 
    3973 int FrameLoader::getHistoryLength()
    3974 {
    3975     if (Page* page = m_frame->page())
    3976         return page->backForwardList()->backListCount() + 1;
    3977     return 0;
    39783928}
    39793929
  • trunk/WebCore/loader/FrameLoader.h

    r49059 r49067  
    239239        KURL baseURL() const;
    240240
    241         bool canGoBackOrForward(int distance) const;
    242         void goBackOrForward(int distance);
    243         int getHistoryLength();
    244 
    245241        void begin();
    246242        void begin(const KURL&, bool dispatchWindowObjectAvailable = true, SecurityOrigin* forcedSecurityOrigin = 0);
  • trunk/WebCore/loader/RedirectScheduler.cpp

    r49013 r49067  
    283283            // go(i!=0) from a frame navigates into the history of the frame only,
    284284            // in both IE and NS (but not in Mozilla). We can't easily do that.
    285             if (loader->canGoBackOrForward(redirection->historySteps))
    286                 loader->goBackOrForward(redirection->historySteps);
     285            if (m_frame->page()->canGoBackOrForward(redirection->historySteps))
     286                m_frame->page()->goBackOrForward(redirection->historySteps);
    287287            return;
    288288        case ScheduledRedirection::formSubmission:
  • trunk/WebCore/page/ContextMenuController.cpp

    r48430 r49067  
    167167        break;
    168168    case ContextMenuItemTagGoBack:
    169         frame->loader()->goBackOrForward(-1);
     169        if (Page* page = frame->page())
     170            page->goBackOrForward(-1);
    170171        break;
    171172    case ContextMenuItemTagGoForward:
    172         frame->loader()->goBackOrForward(1);
     173        if (Page* page = frame->page())
     174            page->goBackOrForward(1);
    173175        break;
    174176    case ContextMenuItemTagStop:
  • trunk/WebCore/page/DOMWindow.cpp

    r49043 r49067  
    744744
    745745    if (m_frame->loader()->openedByDOM()
    746         || m_frame->loader()->getHistoryLength() <= 1
     746        || page->getHistoryLength() <= 1
    747747        || allowScriptsToCloseWindows)
    748748        m_frame->scheduleClose();
  • trunk/WebCore/page/History.cpp

    r48994 r49067  
    5151    if (!m_frame)
    5252        return 0;
    53     return m_frame->loader()->getHistoryLength();
     53    if (!m_frame->page())
     54        return 0;
     55    return m_frame->page()->getHistoryLength();
    5456}
    5557
  • trunk/WebCore/page/Page.cpp

    r48748 r49067  
    229229}
    230230
     231bool Page::canGoBackOrForward(int distance) const
     232{
     233    if (distance == 0)
     234        return true;
     235    if (distance > 0 && distance <= m_backForwardList->forwardListCount())
     236        return true;
     237    if (distance < 0 && -distance <= m_backForwardList->backListCount())
     238        return true;
     239    return false;
     240}
     241
     242void Page::goBackOrForward(int distance)
     243{
     244    if (distance == 0)
     245        return;
     246
     247    HistoryItem* item = m_backForwardList->itemAtIndex(distance);
     248    if (!item) {
     249        if (distance > 0) {
     250            int forwardListCount = m_backForwardList->forwardListCount();
     251            if (forwardListCount > 0)
     252                item = m_backForwardList->itemAtIndex(forwardListCount);
     253        } else {
     254            int backListCount = m_backForwardList->backListCount();
     255            if (backListCount > 0)
     256                item = m_backForwardList->itemAtIndex(-backListCount);
     257        }
     258    }
     259
     260    ASSERT(item); // we should not reach this line with an empty back/forward list
     261    if (item)
     262        goToItem(item, FrameLoadTypeIndexedBackForward);
     263}
     264
    231265void Page::goToItem(HistoryItem* item, FrameLoadType type)
    232266{
     
    246280    m_mainFrame->loader()->stopAllLoaders(databasePolicy);
    247281    m_mainFrame->loader()->goToItem(item, type);
     282}
     283
     284int Page::getHistoryLength()
     285{
     286    return m_backForwardList->backListCount() + 1;
    248287}
    249288
  • trunk/WebCore/page/Page.h

    r48748 r49067  
    112112        bool goBack();
    113113        bool goForward();
     114        bool canGoBackOrForward(int distance) const;
     115        void goBackOrForward(int distance);
    114116        void goToItem(HistoryItem*, FrameLoadType);
     117        int getHistoryLength();
    115118
    116119        HistoryItem* globalHistoryItem() const { return m_globalHistoryItem.get(); }
  • trunk/WebCore/platform/ContextMenu.cpp

    r48430 r49067  
    362362                appendItem(ReloadItem);
    363363#else
    364                 if (loader->canGoBackOrForward(-1))
     364                if (frame->page() && frame->page()->canGoBackOrForward(-1))
    365365                    appendItem(BackItem);
    366366
    367                 if (loader->canGoBackOrForward(1))
     367                if (frame->page() && frame->page()->canGoBackOrForward(1))
    368368                    appendItem(ForwardItem);
    369369
     
    722722#if PLATFORM(GTK)
    723723        case ContextMenuItemTagGoBack:
    724             shouldEnable = frame->loader()->canGoBackOrForward(-1);
     724            shouldEnable = frame->page() && frame->page()->canGoBackOrForward(-1);
    725725            break;
    726726        case ContextMenuItemTagGoForward:
    727             shouldEnable = frame->loader()->canGoBackOrForward(1);
     727            shouldEnable = frame->page() && frame->page()->canGoBackOrForward(1);
    728728            break;
    729729        case ContextMenuItemTagStop:
  • trunk/WebKit/gtk/ChangeLog

    r48998 r49067  
     12009-10-03  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Factor PageController out of FrameLoader and Page
     6        https://bugs.webkit.org/show_bug.cgi?id=30037
     7
     8        * webkit/webkitwebview.cpp:
     9        (webkit_web_view_can_go_back_or_forward):
     10
    1112009-10-01  Xan Lopez  <xlopez@igalia.com>
    212
  • trunk/WebKit/gtk/webkit/webkitwebview.cpp

    r48877 r49067  
    28802880    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
    28812881
    2882     Frame* frame = core(webView)->mainFrame();
    2883     return frame->loader()->canGoBackOrForward(steps);
     2882    return core(webView)->goBackOrForward(steps);
    28842883}
    28852884
Note: See TracChangeset for help on using the changeset viewer.