On load from back/forward cache, call checkCompleted() for ALL frames inside FrameLoa...
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 29 Jun 2020 16:32:33 +0000 (16:32 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 29 Jun 2020 16:32:33 +0000 (16:32 +0000)
https://bugs.webkit.org/show_bug.cgi?id=213657

Reviewed by Youenn Fablet.

On load from back/forward cache, call checkCompleted() for ALL frames inside FrameLoader::commitProvisionalLoad().
Previously, we were doing it for the main frame in FrameLoader::commitProvisionalLoad() and for subframes in
FrameLoader::open(). Doing it all in one place results in more understandable code and is less error-prone.

Note that calling checkCompleted() for subframes was new in r262221 and is covered by:
fast/history/multiple-back-forward-navigations.html

* loader/FrameLoader.cpp:
(WebCore::FrameLoader::commitProvisionalLoad):
(WebCore::FrameLoader::open):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@263662 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/loader/FrameLoader.cpp

index dfd65eb..8761ab0 100644 (file)
@@ -1,3 +1,21 @@
+2020-06-29  Chris Dumez  <cdumez@apple.com>
+
+        On load from back/forward cache, call checkCompleted() for ALL frames inside FrameLoader::commitProvisionalLoad()
+        https://bugs.webkit.org/show_bug.cgi?id=213657
+
+        Reviewed by Youenn Fablet.
+
+        On load from back/forward cache, call checkCompleted() for ALL frames inside FrameLoader::commitProvisionalLoad().
+        Previously, we were doing it for the main frame in FrameLoader::commitProvisionalLoad() and for subframes in
+        FrameLoader::open(). Doing it all in one place results in more understandable code and is less error-prone.
+
+        Note that calling checkCompleted() for subframes was new in r262221 and is covered by:
+        fast/history/multiple-back-forward-navigations.html
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::commitProvisionalLoad):
+        (WebCore::FrameLoader::open):
+
 2020-06-09  Sergio Villar Senin  <svillar@igalia.com>
 
         [css-flexbox] WebKit mistakenly lets pointer events (click/hover/etc) pass through flex items, if they have negative margin
index 4f4ee30..e7ac338 100644 (file)
@@ -2077,7 +2077,13 @@ void FrameLoader::commitProvisionalLoad()
         notifier().sendRemainingDelegateMessages(m_documentLoader.get(), mainResourceIdentifier, mainResourceRequest, ResourceResponse(),
             nullptr, static_cast<int>(m_documentLoader->response().expectedContentLength()), 0, mainResouceError);
 
-        checkCompleted();
+        Vector<Ref<Frame>> targetFrames;
+        targetFrames.append(m_frame);
+        for (auto* child = m_frame.tree().firstChild(); child; child = child->tree().traverseNext(&m_frame))
+            targetFrames.append(*child);
+
+        for (auto& frame : targetFrames)
+            frame->loader().checkCompleted();
     } else
         didOpenURL();
 
@@ -2350,10 +2356,6 @@ void FrameLoader::open(CachedFrameBase& cachedFrame)
     updateFirstPartyForCookies();
 
     cachedFrame.restore();
-
-    // For the main frame, this gets called in FrameLoader::commitProvisionalLoad().
-    if (!m_frame.isMainFrame())
-        checkCompleted();
 }
 
 bool FrameLoader::isReplacing() const