<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[285089] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/285089">285089</a></dd>
<dt>Author</dt> <dd>wenson_hsieh@apple.com</dd>
<dt>Date</dt> <dd>2021-10-30 20:19:15 -0700 (Sat, 30 Oct 2021)</dd>
</dl>

<h3>Log Message</h3>
<pre>Layer tree should not be stuck in frozen state after explicitly stopping a page load
https://bugs.webkit.org/show_bug.cgi?id=232532
rdar://84522357

Reviewed by Tim Horton.

Source/WebCore:

Add WEBCORE_EXPORT to a method. See WebKit/ChangeLog for more details.

Test: http/tests/navigation/unfreeze-layer-tree-after-stopping-load.html

* loader/FrameLoader.h:

Source/WebKit:

>From diagnostic logs gathered in rdar://84522357, it's apparently possible for the layer tree to be stuck in a
state where it's indefinitely frozen after the user explicitly stops the page load (e.g. by tapping on the "x"
button in Safari). Specifically, these logs indicate that the `PageTransition` layer tree freeze reason may
persist even after the user has canceled the load, leading to situations where content may be visible but
unresponsive.

>From code inspection, this may happen for multiple reasons, one of which is that a media element has incremented
the load event delay count, which in turn prevents us from transitioning to completed state inside
`FrameLoader::checkLoadCompleteForThisFrame()`. It's unknown whether this (in particular) is the cause of
unresponsiveness observed by the reporter of rdar://84522357, but we can at least use this in order to come up
with a layout test; to mitigate all instances where the `PageTransition` reason may persist after the load has
been stopped, we make `WebPage::stopLoading()` complete the page transition (thereby lifting the freeze reason)
if needed.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::stopLoading):

Tools:

Add support for `TestRunner.stopLoading()`, which immediately stops the page load, emulating what would normally
happen if the user taps or clicks the "x" button to cancel loading in Safari. See the layout test for more
details.

* DumpRenderTree/TestRunner.cpp:
(stopLoadingCallback):
(TestRunner::staticFunctions):
* DumpRenderTree/TestRunner.h:
* DumpRenderTree/mac/TestRunnerMac.mm:
(TestRunner::stopLoading):
* DumpRenderTree/win/TestRunnerWin.cpp:
(TestRunner::stopLoading):
* WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
* WebKitTestRunner/InjectedBundle/TestRunner.cpp:
(WTR::TestRunner::stopLoading):
* WebKitTestRunner/InjectedBundle/TestRunner.h:

LayoutTests:

Add a test that verifies that a `requestAnimationFrame()` callback fires even after stopping page load. This
test fails without the fix in this patch, since the layer tree ends up in a permanently frozen state.

* http/tests/navigation/unfreeze-layer-tree-after-stopping-load-expected.txt: Added.
* http/tests/navigation/unfreeze-layer-tree-after-stopping-load.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoaderh">trunk/Source/WebCore/loader/FrameLoader.h</a></li>
<li><a href="#trunkSourceWebKitChangeLog">trunk/Source/WebKit/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitWebProcessWebPageWebPagecpp">trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsDumpRenderTreeTestRunnercpp">trunk/Tools/DumpRenderTree/TestRunner.cpp</a></li>
<li><a href="#trunkToolsDumpRenderTreeTestRunnerh">trunk/Tools/DumpRenderTree/TestRunner.h</a></li>
<li><a href="#trunkToolsDumpRenderTreemacTestRunnerMacmm">trunk/Tools/DumpRenderTree/mac/TestRunnerMac.mm</a></li>
<li><a href="#trunkToolsDumpRenderTreewinTestRunnerWincpp">trunk/Tools/DumpRenderTree/win/TestRunnerWin.cpp</a></li>
<li><a href="#trunkToolsWebKitTestRunnerInjectedBundleBindingsTestRunneridl">trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl</a></li>
<li><a href="#trunkToolsWebKitTestRunnerInjectedBundleTestRunnercpp">trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp</a></li>
<li><a href="#trunkToolsWebKitTestRunnerInjectedBundleTestRunnerh">trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestshttptestsnavigationunfreezelayertreeafterstoppingloadexpectedtxt">trunk/LayoutTests/http/tests/navigation/unfreeze-layer-tree-after-stopping-load-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsnavigationunfreezelayertreeafterstoppingloadhtml">trunk/LayoutTests/http/tests/navigation/unfreeze-layer-tree-after-stopping-load.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/LayoutTests/ChangeLog 2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2021-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        Layer tree should not be stuck in frozen state after explicitly stopping a page load
+        https://bugs.webkit.org/show_bug.cgi?id=232532
+        rdar://84522357
+
+        Reviewed by Tim Horton.
+
+        Add a test that verifies that a `requestAnimationFrame()` callback fires even after stopping page load. This
+        test fails without the fix in this patch, since the layer tree ends up in a permanently frozen state.
+
+        * http/tests/navigation/unfreeze-layer-tree-after-stopping-load-expected.txt: Added.
+        * http/tests/navigation/unfreeze-layer-tree-after-stopping-load.html: Added.
+
</ins><span class="cx"> 2021-10-30  Myles C. Maxfield  <mmaxfield@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [GPU Process] Small ImageBuffers cause the web process to crash
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationunfreezelayertreeafterstoppingloadexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/navigation/unfreeze-layer-tree-after-stopping-load-expected.txt (0 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/unfreeze-layer-tree-after-stopping-load-expected.txt                             (rev 0)
+++ trunk/LayoutTests/http/tests/navigation/unfreeze-layer-tree-after-stopping-load-expected.txt        2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+This test requires WebKitTestRunner/DumpRenderTree.
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsnavigationunfreezelayertreeafterstoppingloadhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/navigation/unfreeze-layer-tree-after-stopping-load.html (0 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/navigation/unfreeze-layer-tree-after-stopping-load.html                             (rev 0)
+++ trunk/LayoutTests/http/tests/navigation/unfreeze-layer-tree-after-stopping-load.html        2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+<!DOCTYPE html>
+<body>
+This test requires WebKitTestRunner/DumpRenderTree.
+<video width="1px" height="1px" src="http://127.0.0.1:8000/resources/load-and-stall.py?name=../../../compositing/resources/video.mp4&mimeType=video%2Fmp4&stallAt=0&stallFor=999"></video>
+<script>
+testRunner.dumpAsText();
+testRunner.waitUntilDone();
+
+document.querySelector("video").play().catch(() => { });
+
+if (testRunner.stopLoading)
+    testRunner.stopLoading();
+
+requestAnimationFrame(() => testRunner.forceImmediateCompletion());
+</script>
+</body>
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Source/WebCore/ChangeLog      2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2021-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        Layer tree should not be stuck in frozen state after explicitly stopping a page load
+        https://bugs.webkit.org/show_bug.cgi?id=232532
+        rdar://84522357
+
+        Reviewed by Tim Horton.
+
+        Add WEBCORE_EXPORT to a method. See WebKit/ChangeLog for more details.
+
+        Test: http/tests/navigation/unfreeze-layer-tree-after-stopping-load.html
+
+        * loader/FrameLoader.h:
+
</ins><span class="cx"> 2021-10-30  Chris Dumez  <cdumez@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [ BigSur wk2 Debug arm64 ] webaudio/AudioBufferSource/audiobuffersource-playbackrate.html is a flaky crash
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoader.h (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoader.h        2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Source/WebCore/loader/FrameLoader.h   2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -298,7 +298,7 @@
</span><span class="cx"> 
</span><span class="cx">     const URL& previousURL() const { return m_previousURL; }
</span><span class="cx"> 
</span><del>-    void completePageTransitionIfNeeded();
</del><ins>+    WEBCORE_EXPORT void completePageTransitionIfNeeded();
</ins><span class="cx"> 
</span><span class="cx">     void setOverrideCachePolicyForTesting(ResourceRequestCachePolicy policy) { m_overrideCachePolicyForTesting = policy; }
</span><span class="cx">     void setOverrideResourceLoadPriorityForTesting(ResourceLoadPriority priority) { m_overrideResourceLoadPriorityForTesting = priority; }
</span></span></pre></div>
<a id="trunkSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ChangeLog (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ChangeLog    2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Source/WebKit/ChangeLog       2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+2021-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        Layer tree should not be stuck in frozen state after explicitly stopping a page load
+        https://bugs.webkit.org/show_bug.cgi?id=232532
+        rdar://84522357
+
+        Reviewed by Tim Horton.
+
+        From diagnostic logs gathered in rdar://84522357, it's apparently possible for the layer tree to be stuck in a
+        state where it's indefinitely frozen after the user explicitly stops the page load (e.g. by tapping on the "x"
+        button in Safari). Specifically, these logs indicate that the `PageTransition` layer tree freeze reason may
+        persist even after the user has canceled the load, leading to situations where content may be visible but
+        unresponsive.
+
+        From code inspection, this may happen for multiple reasons, one of which is that a media element has incremented
+        the load event delay count, which in turn prevents us from transitioning to completed state inside
+        `FrameLoader::checkLoadCompleteForThisFrame()`. It's unknown whether this (in particular) is the cause of
+        unresponsiveness observed by the reporter of rdar://84522357, but we can at least use this in order to come up
+        with a layout test; to mitigate all instances where the `PageTransition` reason may persist after the load has
+        been stopped, we make `WebPage::stopLoading()` complete the page transition (thereby lifting the freeze reason)
+        if needed.
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::stopLoading):
+
</ins><span class="cx"> 2021-10-30  Myles C. Maxfield  <mmaxfield@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Web process shouldn't crash if ImageBuffer::ensureBackendCreated() fails
</span></span></pre></div>
<a id="trunkSourceWebKitWebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp       2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp  2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -1818,7 +1818,10 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     SendStopResponsivenessTimer stopper;
</span><del>-    m_page->userInputBridge().stopLoadingFrame(*m_mainFrame->coreFrame());
</del><ins>+
+    Ref coreFrame = *m_mainFrame->coreFrame();
+    m_page->userInputBridge().stopLoadingFrame(coreFrame.get());
+    coreFrame->loader().completePageTransitionIfNeeded();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool WebPage::defersLoading() const
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog    2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Tools/ChangeLog       2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+2021-10-30  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        Layer tree should not be stuck in frozen state after explicitly stopping a page load
+        https://bugs.webkit.org/show_bug.cgi?id=232532
+        rdar://84522357
+
+        Reviewed by Tim Horton.
+
+        Add support for `TestRunner.stopLoading()`, which immediately stops the page load, emulating what would normally
+        happen if the user taps or clicks the "x" button to cancel loading in Safari. See the layout test for more
+        details.
+
+        * DumpRenderTree/TestRunner.cpp:
+        (stopLoadingCallback):
+        (TestRunner::staticFunctions):
+        * DumpRenderTree/TestRunner.h:
+        * DumpRenderTree/mac/TestRunnerMac.mm:
+        (TestRunner::stopLoading):
+        * DumpRenderTree/win/TestRunnerWin.cpp:
+        (TestRunner::stopLoading):
+        * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
+        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+        (WTR::TestRunner::stopLoading):
+        * WebKitTestRunner/InjectedBundle/TestRunner.h:
+
</ins><span class="cx"> 2021-10-30  Chris Dumez  <cdumez@apple.com>
</span><span class="cx"> 
</span><span class="cx">         Improve error handling in sendWithAsyncReply()
</span></span></pre></div>
<a id="trunkToolsDumpRenderTreeTestRunnercpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/DumpRenderTree/TestRunner.cpp (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/DumpRenderTree/TestRunner.cpp        2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Tools/DumpRenderTree/TestRunner.cpp   2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -1802,6 +1802,13 @@
</span><span class="cx">     return JSValueMakeUndefined(context);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static JSValueRef stopLoadingCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    TestRunner* controller = static_cast<TestRunner*>(JSObjectGetPrivate(thisObject));
+    controller->stopLoading();
+    return JSValueMakeUndefined(context);
+}
+
</ins><span class="cx"> static JSValueRef forceImmediateCompletionCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
</span><span class="cx"> {
</span><span class="cx">     TestRunner* controller = static_cast<TestRunner*>(JSObjectGetPrivate(thisObject));
</span><span class="lines">@@ -2113,6 +2120,7 @@
</span><span class="cx">         { "setSpellCheckerLoggingEnabled", setSpellCheckerLoggingEnabledCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
</span><span class="cx">         { "setOpenPanelFiles", setOpenPanelFilesCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
</span><span class="cx">         { "setOpenPanelFilesMediaIcon", SetOpenPanelFilesMediaIconCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
</span><ins>+        { "stopLoading", stopLoadingCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
</ins><span class="cx">         { "forceImmediateCompletion", forceImmediateCompletionCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
</span><span class="cx"> #if PLATFORM(IOS_FAMILY)
</span><span class="cx">         { "setPagePaused", setPagePausedCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
</span></span></pre></div>
<a id="trunkToolsDumpRenderTreeTestRunnerh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/DumpRenderTree/TestRunner.h (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/DumpRenderTree/TestRunner.h  2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Tools/DumpRenderTree/TestRunner.h     2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -76,6 +76,7 @@
</span><span class="cx">     void execCommand(JSStringRef name, JSStringRef value);
</span><span class="cx">     bool findString(JSContextRef, JSStringRef, JSObjectRef optionsArray);
</span><span class="cx">     void forceImmediateCompletion();
</span><ins>+    void stopLoading();
</ins><span class="cx">     void goBack();
</span><span class="cx">     JSValueRef originsWithApplicationCache(JSContextRef);
</span><span class="cx">     long long applicationCacheDiskUsageForOrigin(JSStringRef name);
</span></span></pre></div>
<a id="trunkToolsDumpRenderTreemacTestRunnerMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Tools/DumpRenderTree/mac/TestRunnerMac.mm (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/DumpRenderTree/mac/TestRunnerMac.mm  2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Tools/DumpRenderTree/mac/TestRunnerMac.mm     2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -282,6 +282,11 @@
</span><span class="cx">         fprintf(stderr, "TestRunner::notifyDone() called unexpectedly.");
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void TestRunner::stopLoading()
+{
+    [mainFrame.webView stopLoading:nil];
+}
+
</ins><span class="cx"> void TestRunner::forceImmediateCompletion()
</span><span class="cx"> {
</span><span class="cx">     if (m_waitToDump) {
</span></span></pre></div>
<a id="trunkToolsDumpRenderTreewinTestRunnerWincpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/DumpRenderTree/win/TestRunnerWin.cpp (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/DumpRenderTree/win/TestRunnerWin.cpp 2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Tools/DumpRenderTree/win/TestRunnerWin.cpp    2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -109,6 +109,11 @@
</span><span class="cx">     applicationCache->deleteAllApplicationCaches();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void TestRunner::stopLoading()
+{
+    // FIXME: Not implemented.
+}
+
</ins><span class="cx"> long long TestRunner::applicationCacheDiskUsageForOrigin(JSStringRef url)
</span><span class="cx"> {
</span><span class="cx">     COMPtr<IWebSecurityOrigin2> origin;
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerInjectedBundleBindingsTestRunneridl"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl      2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl 2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -94,6 +94,7 @@
</span><span class="cx">     undefined setNavigationGesturesEnabled(boolean value);
</span><span class="cx">     undefined setIgnoresViewportScaleLimits(boolean value);
</span><span class="cx">     undefined setShouldDownloadUndisplayableMIMETypes(boolean value);
</span><ins>+    undefined stopLoading();
</ins><span class="cx"> 
</span><span class="cx">     // Special DOM functions.
</span><span class="cx">     undefined clearBackForwardList();
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerInjectedBundleTestRunnercpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp       2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp  2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -968,6 +968,11 @@
</span><span class="cx">     InjectedBundle::singleton().queueLoadHTMLString(toWK(content).get(), baseURLWK.get(), unreachableURLWK.get());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void TestRunner::stopLoading()
+{
+    WKBundlePageStopLoading(page());
+}
+
</ins><span class="cx"> void TestRunner::queueReload()
</span><span class="cx"> {
</span><span class="cx">     InjectedBundle::singleton().queueReload();
</span></span></pre></div>
<a id="trunkToolsWebKitTestRunnerInjectedBundleTestRunnerh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h (285088 => 285089)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h 2021-10-31 02:37:24 UTC (rev 285088)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/TestRunner.h    2021-10-31 03:19:15 UTC (rev 285089)
</span><span class="lines">@@ -338,6 +338,7 @@
</span><span class="cx">     void setIgnoresViewportScaleLimits(bool);
</span><span class="cx">     void setShouldDownloadUndisplayableMIMETypes(bool);
</span><span class="cx">     void setShouldAllowDeviceOrientationAndMotionAccess(bool);
</span><ins>+    void stopLoading();
</ins><span class="cx"> 
</span><span class="cx">     bool didCancelClientRedirect() const { return m_didCancelClientRedirect; }
</span><span class="cx">     void setDidCancelClientRedirect(bool value) { m_didCancelClientRedirect = value; }
</span></span></pre>
</div>
</div>

</body>
</html>