Changeset 86644 in webkit


Ignore:
Timestamp:
May 16, 2011 5:50:20 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-05-16 Ian Henderson <ianh@apple.com>

Reviewed by Joseph Pecoraro.

Page::goToItem doesn't work while loading is deferred
https://bugs.webkit.org/show_bug.cgi?id=60412

  • loader/navigation-while-deferring-loads-expected.txt: Added.
  • loader/navigation-while-deferring-loads.html: Added.
  • platform/gtk/Skipped:
  • platform/qt/Skipped:
  • platform/win/Skipped:

2011-05-16 Ian Henderson <ianh@apple.com>

Reviewed by Joseph Pecoraro.

Page::goToItem doesn't work while loading is deferred
https://bugs.webkit.org/show_bug.cgi?id=60412

If goToItem is called while loading is deferred, save the arguments
and try again later instead of doing nothing.

Test: loader/navigation-while-deferring-loads.html

  • loader/FrameLoader.cpp: (WebCore::FrameLoader::setDefersLoading): Pipe the "defersLoading" state into HistoryController.
  • loader/HistoryController.cpp: (WebCore::HistoryController::HistoryController): (WebCore::HistoryController::goToItem): Save the HistoryItem and FrameLoadType if loading is deferred. (WebCore::HistoryController::setDefersLoading): If we have a saved HistoryItem after resuming, try going to it.
  • loader/HistoryController.h:
  • page/Page.cpp: (WebCore::Page::goToItem): No longer bail early if loading is deferred, since HistoryController now handles this case.

2011-05-16 Ian Henderson <ianh@apple.com>

Reviewed by Joseph Pecoraro.

Page::goToItem doesn't work while loading is deferred
https://bugs.webkit.org/show_bug.cgi?id=60412

Add setDefersLoading and goBack methods to LayoutTestController. We
need to use goBack() instead of history.back() because the latter goes
through NavigationScheduler, hence doesn't exhibit the bug.

  • DumpRenderTree/LayoutTestController.cpp: (goBackCallback): (setDefersLoadingCallback): (LayoutTestController::staticFunctions):
  • DumpRenderTree/LayoutTestController.h:
  • DumpRenderTree/gtk/LayoutTestControllerGtk.cpp: (LayoutTestController::goBack): (LayoutTestController::setDefersLoading):
  • DumpRenderTree/mac/LayoutTestControllerMac.mm: (LayoutTestController::goBack): (LayoutTestController::setDefersLoading):
  • DumpRenderTree/win/LayoutTestControllerWin.cpp: (LayoutTestController::goBack): (LayoutTestController::setDefersLoading):
  • DumpRenderTree/wx/LayoutTestControllerWx.cpp: (LayoutTestController::goBack): (LayoutTestController::setDefersLoading):
Location:
trunk
Files:
2 added
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r86643 r86644  
     12011-05-16  Ian Henderson  <ianh@apple.com>
     2
     3        Reviewed by Joseph Pecoraro.
     4
     5        Page::goToItem doesn't work while loading is deferred
     6        https://bugs.webkit.org/show_bug.cgi?id=60412
     7
     8        * loader/navigation-while-deferring-loads-expected.txt: Added.
     9        * loader/navigation-while-deferring-loads.html: Added.
     10        * platform/gtk/Skipped:
     11        * platform/qt/Skipped:
     12        * platform/win/Skipped:
     13
    1142011-05-16  Andrew Scherkus  <scherkus@chromium.org>
    215
  • trunk/LayoutTests/platform/chromium/test_expectations.txt

    r86643 r86644  
    206206// Animation API is disabled
    207207WONTFIX SKIP : animations/animation-api-1.html = FAIL
     208
     209// Unskip after implementing LayoutTestController::setDefersLoading and ::goBack.
     210BUGWK60877 SKIP : loader/navigation-while-deferring-loads.html = FAIL
    208211
    209212// -----------------------------------------------------------------
  • trunk/LayoutTests/platform/gtk/Skipped

    r86611 r86644  
    14221422http/tests/navigation/response204.html
    14231423
     1424# Unskip after implementing LayoutTestController::setDefersLoading and ::goBack.
     1425loader/navigation-while-deferring-loads.html
     1426
    14241427# This platform does not support the Page Visibility API.
    14251428fast/events/page-visibility-iframe-delete-test.html
  • trunk/LayoutTests/platform/qt/Skipped

    r86611 r86644  
    25922592http/tests/inspector/network/x-frame-options-deny.html
    25932593
     2594# Unskip after implementing LayoutTestController::setDefersLoading and ::goBack.
     2595loader/navigation-while-deferring-loads.html
     2596
    25942597# [Qt] fast/events/backspace-nagivates-back fails on Qt bots (Mac and Linux)
    25952598# https://bugs.webkit.org/show_bug.cgi?id=60311
  • trunk/LayoutTests/platform/win/Skipped

    r86507 r86644  
    12961296fast/events/page-visibility-iframe-propagation-test.html
    12971297fast/events/page-visibility-transition-test.html
     1298
     1299# Unskip after implementing LayoutTestController::setDefersLoading and ::goBack.
     1300loader/navigation-while-deferring-loads.html
  • trunk/Source/WebCore/ChangeLog

    r86640 r86644  
     12011-05-16  Ian Henderson  <ianh@apple.com>
     2
     3        Reviewed by Joseph Pecoraro.
     4
     5        Page::goToItem doesn't work while loading is deferred
     6        https://bugs.webkit.org/show_bug.cgi?id=60412
     7
     8        If goToItem is called while loading is deferred, save the arguments
     9        and try again later instead of doing nothing.
     10
     11        Test: loader/navigation-while-deferring-loads.html
     12
     13        * loader/FrameLoader.cpp:
     14        (WebCore::FrameLoader::setDefersLoading):
     15        Pipe the "defersLoading" state into HistoryController.
     16        * loader/HistoryController.cpp:
     17        (WebCore::HistoryController::HistoryController):
     18        (WebCore::HistoryController::goToItem):
     19        Save the HistoryItem and FrameLoadType if loading is deferred.
     20        (WebCore::HistoryController::setDefersLoading):
     21        If we have a saved HistoryItem after resuming, try going to it.
     22        * loader/HistoryController.h:
     23        * page/Page.cpp:
     24        (WebCore::Page::goToItem):
     25        No longer bail early if loading is deferred, since HistoryController
     26        now handles this case.
     27
    1282011-05-16  Andrew Wilson  <atwilson@chromium.org>
    229
  • trunk/Source/WebCore/loader/FrameLoader.cpp

    r86542 r86644  
    253253    if (m_policyDocumentLoader)
    254254        m_policyDocumentLoader->setDefersLoading(defers);
     255    history()->setDefersLoading(defers);
    255256
    256257    if (!defers) {
  • trunk/Source/WebCore/loader/HistoryController.cpp

    r85618 r86644  
    6969    : m_frame(frame)
    7070    , m_frameLoadComplete(true)
     71    , m_defersLoading(false)
    7172{
    7273}
     
    249250    if (!m_frame->loader()->client()->shouldGoToHistoryItem(targetItem))
    250251        return;
     252    if (m_defersLoading) {
     253        m_deferredItem = targetItem;
     254        m_deferredFrameLoadType = type;
     255        return;
     256    }
    251257
    252258    // Set the BF cursor before commit, which lets the user quickly click back/forward again.
     
    264270    // Now that all other frames have provisional items, do the actual navigation.
    265271    recursiveGoToItem(targetItem, currentItem.get(), type);
     272}
     273
     274void HistoryController::setDefersLoading(bool defer)
     275{
     276    m_defersLoading = defer;
     277    if (!defer && m_deferredItem) {
     278        goToItem(m_deferredItem.get(), m_deferredFrameLoadType);
     279        m_deferredItem = 0;
     280    }
    266281}
    267282
  • trunk/Source/WebCore/loader/HistoryController.h

    r86325 r86644  
    8585    void replaceState(PassRefPtr<SerializedScriptValue>, const String& title, const String& url);
    8686
     87    void setDefersLoading(bool);
     88
    8789private:
    8890    friend class Page;
     
    111113
    112114    bool m_frameLoadComplete;
     115
     116    bool m_defersLoading;
     117    RefPtr<HistoryItem> m_deferredItem;
     118    FrameLoadType m_deferredFrameLoadType;
    113119};
    114120
  • trunk/Source/WebCore/page/Page.cpp

    r86391 r86644  
    339339void Page::goToItem(HistoryItem* item, FrameLoadType type)
    340340{
    341     if (defersLoading())
    342         return;
    343 
    344341    // stopAllLoaders may end up running onload handlers, which could cause further history traversals that may lead to the passed in HistoryItem
    345342    // being deref()-ed. Make sure we can still use it with HistoryController::goToItem later.
  • trunk/Tools/ChangeLog

    r86624 r86644  
     12011-05-16  Ian Henderson  <ianh@apple.com>
     2
     3        Reviewed by Joseph Pecoraro.
     4
     5        Page::goToItem doesn't work while loading is deferred
     6        https://bugs.webkit.org/show_bug.cgi?id=60412
     7
     8        Add setDefersLoading and goBack methods to LayoutTestController.  We
     9        need to use goBack() instead of history.back() because the latter goes
     10        through NavigationScheduler, hence doesn't exhibit the bug.
     11
     12        * DumpRenderTree/LayoutTestController.cpp:
     13        (goBackCallback):
     14        (setDefersLoadingCallback):
     15        (LayoutTestController::staticFunctions):
     16        * DumpRenderTree/LayoutTestController.h:
     17        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
     18        (LayoutTestController::goBack):
     19        (LayoutTestController::setDefersLoading):
     20        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
     21        (LayoutTestController::goBack):
     22        (LayoutTestController::setDefersLoading):
     23        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
     24        (LayoutTestController::goBack):
     25        (LayoutTestController::setDefersLoading):
     26        * DumpRenderTree/wx/LayoutTestControllerWx.cpp:
     27        (LayoutTestController::goBack):
     28        (LayoutTestController::setDefersLoading):
     29
    1302011-05-16  Sam Weinig  <sam@webkit.org>
    231
  • trunk/Tools/DumpRenderTree/LayoutTestController.cpp

    r86205 r86644  
    657657}
    658658
     659static JSValueRef goBackCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
     660{
     661    LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
     662    controller->goBack();
     663   
     664    return JSValueMakeUndefined(context);
     665}
     666
    659667static JSValueRef grantDesktopNotificationPermissionCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
    660668{
     
    12321240    LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
    12331241    controller->setDeferMainResourceDataLoad(JSValueToBoolean(context, arguments[0]));
     1242
     1243    return JSValueMakeUndefined(context);
     1244}
     1245
     1246static JSValueRef setDefersLoadingCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
     1247{
     1248    if (argumentCount < 1)
     1249        return JSValueMakeUndefined(context);
     1250
     1251    LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
     1252    controller->setDefersLoading(JSValueToBoolean(context, arguments[0]));
    12341253
    12351254    return JSValueMakeUndefined(context);
     
    22912310        { "counterValueForElementById", counterValueForElementByIdCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    22922311        { "originsWithApplicationCache", originsWithApplicationCacheCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     2312        { "goBack", goBackCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    22932313        { "grantDesktopNotificationPermission", grantDesktopNotificationPermissionCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    22942314        { "hasSpellingMarker", hasSpellingMarkerCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     
    23442364        { "setDatabaseQuota", setDatabaseQuotaCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    23452365        { "setDeferMainResourceDataLoad", setDeferMainResourceDataLoadCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
     2366        { "setDefersLoading", setDefersLoadingCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    23462367        { "setDomainRelaxationForbiddenForURLScheme", setDomainRelaxationForbiddenForURLSchemeCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
    23472368        { "setEditingBehavior", setEditingBehaviorCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
  • trunk/Tools/DumpRenderTree/LayoutTestController.h

    r86205 r86644  
    6464    void execCommand(JSStringRef name, JSStringRef value);
    6565    bool findString(JSContextRef, JSStringRef, JSObjectRef optionsArray);
     66    void goBack();
    6667    JSValueRef originsWithApplicationCache(JSContextRef);
    6768    long long applicationCacheDiskUsageForOrigin(JSStringRef name);
     
    100101    void setDatabaseQuota(unsigned long long quota);
    101102    void setDomainRelaxationForbiddenForURLScheme(bool forbidden, JSStringRef scheme);
     103    void setDefersLoading(bool);
    102104    void setIconDatabaseEnabled(bool iconDatabaseEnabled);
    103105    void setJavaScriptProfilingEnabled(bool profilingEnabled);
  • trunk/Tools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp

    r86205 r86644  
    721721}
    722722
     723void LayoutTestController::goBack()
     724{
     725    // FIXME: implement to enable loader/navigation-while-deferring-loads.html
     726}
     727
     728void LayoutTestController::setDefersLoading(bool)
     729{
     730    // FIXME: implement to enable loader/navigation-while-deferring-loads.html
     731}
     732
    723733void LayoutTestController::setAppCacheMaximumSize(unsigned long long size)
    724734{
  • trunk/Tools/DumpRenderTree/mac/LayoutTestControllerMac.mm

    r86205 r86644  
    434434}
    435435
     436void LayoutTestController::goBack()
     437{
     438    [[mainFrame webView] goBack];
     439}
     440
     441void LayoutTestController::setDefersLoading(bool defers)
     442{
     443    [[mainFrame webView] setDefersCallbacks:defers];
     444}
     445
    436446void LayoutTestController::setDomainRelaxationForbiddenForURLScheme(bool forbidden, JSStringRef scheme)
    437447{
  • trunk/Tools/DumpRenderTree/win/LayoutTestControllerWin.cpp

    r86205 r86644  
    10481048}
    10491049
     1050void LayoutTestController::goBack()
     1051{
     1052    // FIXME: implement to enable loader/navigation-while-deferring-loads.html
     1053}
     1054
     1055void LayoutTestController::setDefersLoading(bool)
     1056{
     1057    // FIXME: implement to enable loader/navigation-while-deferring-loads.html
     1058}
     1059
    10501060void LayoutTestController::setDomainRelaxationForbiddenForURLScheme(bool forbidden, JSStringRef scheme)
    10511061{
  • trunk/Tools/DumpRenderTree/wx/LayoutTestControllerWx.cpp

    r86246 r86644  
    288288}
    289289
     290void LayoutTestController::goBack()
     291{
     292    // FIXME: implement to enable loader/navigation-while-deferring-loads.html
     293}
     294
     295void LayoutTestController::setDefersLoading(bool)
     296{
     297    // FIXME: implement to enable loader/navigation-while-deferring-loads.html
     298}
     299
    290300void LayoutTestController::setDomainRelaxationForbiddenForURLScheme(bool, JSStringRef)
    291301{
Note: See TracChangeset for help on using the changeset viewer.