<!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>[199664] 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/199664">199664</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2016-04-18 03:36:29 -0700 (Mon, 18 Apr 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Pending API Request URL is wrong after reloading
https://bugs.webkit.org/show_bug.cgi?id=139342

Reviewed by Darin Adler.

Source/WebKit2:

It happens when reloading a web view loaded with anything but a
URL, because the bf list is not updated for those cases and
WebPageProxy::reload() is setting the current bf list item URL as
pending API request URL. This also causes that progress is
reported wrongly, because
WebPageProxy::decidePolicyForNavigationAction() resets the pending
API request URL when it's different than the requested URL. The
page load transaction causes the progress to be changed, reporting
1.0 (the previous one), but later something &lt; 1.0 is reported
again by the progress tracker.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::reload): Use the current active URL as
pending API request URL, falling back to the current bf list item
URL when empty.

Tools:

Update test case to check that the active URL should remain the
same after a reload.

* TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp:
(TestWebKitAPI::TEST):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWebKit2PendingAPIRequestURLcpp">trunk/Tools/TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (199663 => 199664)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-04-18 10:01:45 UTC (rev 199663)
+++ trunk/Source/WebKit2/ChangeLog        2016-04-18 10:36:29 UTC (rev 199664)
</span><span class="lines">@@ -1,5 +1,28 @@
</span><span class="cx"> 2016-04-18  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><ins>+        Pending API Request URL is wrong after reloading
+        https://bugs.webkit.org/show_bug.cgi?id=139342
+
+        Reviewed by Darin Adler.
+
+        It happens when reloading a web view loaded with anything but a
+        URL, because the bf list is not updated for those cases and
+        WebPageProxy::reload() is setting the current bf list item URL as
+        pending API request URL. This also causes that progress is
+        reported wrongly, because
+        WebPageProxy::decidePolicyForNavigationAction() resets the pending
+        API request URL when it's different than the requested URL. The
+        page load transaction causes the progress to be changed, reporting
+        1.0 (the previous one), but later something &lt; 1.0 is reported
+        again by the progress tracker.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::reload): Use the current active URL as
+        pending API request URL, falling back to the current bf list item
+        URL when empty.
+
+2016-04-18  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
</ins><span class="cx">         Pending API request URL no set when loading Data, Alternate HTML or plain text
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=136916
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (199663 => 199664)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-04-18 10:01:45 UTC (rev 199663)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-04-18 10:36:29 UTC (rev 199664)
</span><span class="lines">@@ -1091,8 +1091,11 @@
</span><span class="cx"> {
</span><span class="cx">     SandboxExtension::Handle sandboxExtensionHandle;
</span><span class="cx"> 
</span><del>-    if (m_backForwardList-&gt;currentItem()) {
-        String url = m_backForwardList-&gt;currentItem()-&gt;url();
</del><ins>+    String url = m_pageLoadState.activeURL();
+    if (url.isEmpty() &amp;&amp; m_backForwardList-&gt;currentItem())
+        url = m_backForwardList-&gt;currentItem()-&gt;url();
+
+    if (!url.isEmpty()) {
</ins><span class="cx">         auto transaction = m_pageLoadState.transaction();
</span><span class="cx">         m_pageLoadState.setPendingAPIRequestURL(transaction, url);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (199663 => 199664)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-04-18 10:01:45 UTC (rev 199663)
+++ trunk/Tools/ChangeLog        2016-04-18 10:36:29 UTC (rev 199664)
</span><span class="lines">@@ -1,5 +1,18 @@
</span><span class="cx"> 2016-04-18  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><ins>+        Pending API Request URL is wrong after reloading
+        https://bugs.webkit.org/show_bug.cgi?id=139342
+
+        Reviewed by Darin Adler.
+
+        Update test case to check that the active URL should remain the
+        same after a reload.
+
+        * TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp:
+        (TestWebKitAPI::TEST):
+
+2016-04-18  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
</ins><span class="cx">         Pending API request URL no set when loading Data, Alternate HTML or plain text
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=136916
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWebKit2PendingAPIRequestURLcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp (199663 => 199664)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp        2016-04-18 10:01:45 UTC (rev 199663)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp        2016-04-18 10:36:29 UTC (rev 199664)
</span><span class="lines">@@ -34,11 +34,19 @@
</span><span class="cx"> 
</span><span class="cx"> namespace TestWebKitAPI {
</span><span class="cx"> 
</span><ins>+static bool done;
+
</ins><span class="cx"> TEST(WebKit2, PendingAPIRequestURL)
</span><span class="cx"> {
</span><span class="cx">     WKRetainPtr&lt;WKContextRef&gt; context(AdoptWK, WKContextCreate());
</span><span class="cx">     PlatformWebView webView(context.get());
</span><span class="cx"> 
</span><ins>+    WKPageLoaderClientV0 loaderClient;
+    memset(&amp;loaderClient, 0, sizeof(loaderClient));
+    loaderClient.base.version = 0;
+    loaderClient.didFinishLoadForFrame = [](WKPageRef, WKFrameRef, WKTypeRef, const void*) { done = true; };
+    WKPageSetPageLoaderClient(webView.page(), &amp;loaderClient.base);
+
</ins><span class="cx">     WKRetainPtr&lt;WKURLRef&gt; activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
</span><span class="cx">     EXPECT_NULL(activeURL.get());
</span><span class="cx"> 
</span><span class="lines">@@ -47,49 +55,105 @@
</span><span class="cx">     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
</span><span class="cx">     ASSERT_NOT_NULL(activeURL.get());
</span><span class="cx">     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
</span><del>-    WKPageStopLoading(webView.page());
</del><ins>+    Util::run(&amp;done);
+    done = false;
</ins><span class="cx"> 
</span><ins>+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
+    Util::run(&amp;done);
+    done = false;
+
</ins><span class="cx">     WKRetainPtr&lt;WKStringRef&gt; htmlString = Util::toWK(&quot;&lt;body&gt;Hello, World&lt;/body&gt;&quot;);
</span><span class="cx">     WKRetainPtr&lt;WKURLRef&gt; blankURL = adoptWK(WKURLCreateWithUTF8CString(&quot;about:blank&quot;));
</span><span class="cx">     WKPageLoadHTMLString(webView.page(), htmlString.get(), nullptr);
</span><span class="cx">     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
</span><span class="cx">     ASSERT_NOT_NULL(activeURL.get());
</span><span class="cx">     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
</span><del>-    WKPageStopLoading(webView.page());
</del><ins>+    Util::run(&amp;done);
+    done = false;
</ins><span class="cx"> 
</span><del>-    url = adoptWK(WKURLCreateWithUTF8CString(&quot;http://www.webkit.org&quot;));
</del><ins>+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
+    Util::run(&amp;done);
+    done = false;
+
+    url = adoptWK(Util::createURLForResource(&quot;simple2&quot;, &quot;html&quot;));
</ins><span class="cx">     WKPageLoadHTMLString(webView.page(), htmlString.get(), url.get());
</span><span class="cx">     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
</span><span class="cx">     ASSERT_NOT_NULL(activeURL.get());
</span><span class="cx">     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
</span><del>-    WKPageStopLoading(webView.page());
</del><ins>+    Util::run(&amp;done);
+    done = false;
</ins><span class="cx"> 
</span><ins>+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
+    Util::run(&amp;done);
+    done = false;
+
</ins><span class="cx">     WKRetainPtr&lt;WKDataRef&gt; data = adoptWK(WKDataCreate(nullptr, 0));
</span><span class="cx">     WKPageLoadData(webView.page(), data.get(), nullptr, nullptr, nullptr);
</span><span class="cx">     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
</span><span class="cx">     ASSERT_NOT_NULL(activeURL.get());
</span><span class="cx">     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
</span><del>-    WKPageStopLoading(webView.page());
</del><ins>+    Util::run(&amp;done);
+    done = false;
</ins><span class="cx"> 
</span><ins>+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
+    Util::run(&amp;done);
+    done = false;
+
</ins><span class="cx">     WKPageLoadData(webView.page(), data.get(), nullptr, nullptr, url.get());
</span><span class="cx">     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
</span><span class="cx">     ASSERT_NOT_NULL(activeURL.get());
</span><span class="cx">     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
</span><del>-    WKPageStopLoading(webView.page());
</del><ins>+    Util::run(&amp;done);
+    done = false;
</ins><span class="cx"> 
</span><ins>+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
+    Util::run(&amp;done);
+    done = false;
+
</ins><span class="cx">     WKPageLoadAlternateHTMLString(webView.page(), htmlString.get(), nullptr, url.get());
</span><span class="cx">     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
</span><span class="cx">     ASSERT_NOT_NULL(activeURL.get());
</span><span class="cx">     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
</span><del>-    WKPageStopLoading(webView.page());
</del><ins>+    Util::run(&amp;done);
+    done = false;
</ins><span class="cx"> 
</span><ins>+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
+    Util::run(&amp;done);
+    done = false;
+
</ins><span class="cx">     WKRetainPtr&lt;WKStringRef&gt; plainTextString = Util::toWK(&quot;Hello, World&quot;);
</span><span class="cx">     WKPageLoadPlainTextString(webView.page(), plainTextString.get());
</span><span class="cx">     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
</span><span class="cx">     ASSERT_NOT_NULL(activeURL.get());
</span><span class="cx">     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
</span><del>-    WKPageStopLoading(webView.page());
</del><ins>+    Util::run(&amp;done);
+    done = false;
</ins><span class="cx"> 
</span><ins>+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
+    Util::run(&amp;done);
+    done = false;
+
</ins><span class="cx">     url = adoptWK(WKURLCreateWithUTF8CString(&quot;file:///tmp/index.html&quot;));
</span><span class="cx">     WKPageLoadFile(webView.page(), url.get(), nullptr);
</span><span class="cx">     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
</span></span></pre>
</div>
</div>

</body>
</html>