Title: [199664] trunk
Revision
199664
Author
[email protected]
Date
2016-04-18 03:36:29 -0700 (Mon, 18 Apr 2016)

Log Message

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 < 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):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (199663 => 199664)


--- 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)
@@ -1,5 +1,28 @@
 2016-04-18  Carlos Garcia Campos  <[email protected]>
 
+        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 < 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  <[email protected]>
+
         Pending API request URL no set when loading Data, Alternate HTML or plain text
         https://bugs.webkit.org/show_bug.cgi?id=136916
 

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (199663 => 199664)


--- 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)
@@ -1091,8 +1091,11 @@
 {
     SandboxExtension::Handle sandboxExtensionHandle;
 
-    if (m_backForwardList->currentItem()) {
-        String url = ""
+    String url = ""
+    if (url.isEmpty() && m_backForwardList->currentItem())
+        url = ""
+
+    if (!url.isEmpty()) {
         auto transaction = m_pageLoadState.transaction();
         m_pageLoadState.setPendingAPIRequestURL(transaction, url);
 

Modified: trunk/Tools/ChangeLog (199663 => 199664)


--- trunk/Tools/ChangeLog	2016-04-18 10:01:45 UTC (rev 199663)
+++ trunk/Tools/ChangeLog	2016-04-18 10:36:29 UTC (rev 199664)
@@ -1,5 +1,18 @@
 2016-04-18  Carlos Garcia Campos  <[email protected]>
 
+        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  <[email protected]>
+
         Pending API request URL no set when loading Data, Alternate HTML or plain text
         https://bugs.webkit.org/show_bug.cgi?id=136916
 

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2/PendingAPIRequestURL.cpp (199663 => 199664)


--- 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)
@@ -34,11 +34,19 @@
 
 namespace TestWebKitAPI {
 
+static bool done;
+
 TEST(WebKit2, PendingAPIRequestURL)
 {
     WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate());
     PlatformWebView webView(context.get());
 
+    WKPageLoaderClientV0 loaderClient;
+    memset(&loaderClient, 0, sizeof(loaderClient));
+    loaderClient.base.version = 0;
+    loaderClient.didFinishLoadForFrame = [](WKPageRef, WKFrameRef, WKTypeRef, const void*) { done = true; };
+    WKPageSetPageLoaderClient(webView.page(), &loaderClient.base);
+
     WKRetainPtr<WKURLRef> activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
     EXPECT_NULL(activeURL.get());
 
@@ -47,49 +55,105 @@
     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
     ASSERT_NOT_NULL(activeURL.get());
     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
-    WKPageStopLoading(webView.page());
+    Util::run(&done);
+    done = false;
 
+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
+    Util::run(&done);
+    done = false;
+
     WKRetainPtr<WKStringRef> htmlString = Util::toWK("<body>Hello, World</body>");
     WKRetainPtr<WKURLRef> blankURL = adoptWK(WKURLCreateWithUTF8CString("about:blank"));
     WKPageLoadHTMLString(webView.page(), htmlString.get(), nullptr);
     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
     ASSERT_NOT_NULL(activeURL.get());
     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
-    WKPageStopLoading(webView.page());
+    Util::run(&done);
+    done = false;
 
-    url = ""
+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
+    Util::run(&done);
+    done = false;
+
+    url = "" "html"));
     WKPageLoadHTMLString(webView.page(), htmlString.get(), url.get());
     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
     ASSERT_NOT_NULL(activeURL.get());
     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
-    WKPageStopLoading(webView.page());
+    Util::run(&done);
+    done = false;
 
+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
+    Util::run(&done);
+    done = false;
+
     WKRetainPtr<WKDataRef> data = "" 0));
     WKPageLoadData(webView.page(), data.get(), nullptr, nullptr, nullptr);
     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
     ASSERT_NOT_NULL(activeURL.get());
     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
-    WKPageStopLoading(webView.page());
+    Util::run(&done);
+    done = false;
 
+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
+    Util::run(&done);
+    done = false;
+
     WKPageLoadData(webView.page(), data.get(), nullptr, nullptr, url.get());
     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
     ASSERT_NOT_NULL(activeURL.get());
     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
-    WKPageStopLoading(webView.page());
+    Util::run(&done);
+    done = false;
 
+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
+    Util::run(&done);
+    done = false;
+
     WKPageLoadAlternateHTMLString(webView.page(), htmlString.get(), nullptr, url.get());
     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
     ASSERT_NOT_NULL(activeURL.get());
     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
-    WKPageStopLoading(webView.page());
+    Util::run(&done);
+    done = false;
 
+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), url.get()));
+    Util::run(&done);
+    done = false;
+
     WKRetainPtr<WKStringRef> plainTextString = Util::toWK("Hello, World");
     WKPageLoadPlainTextString(webView.page(), plainTextString.get());
     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
     ASSERT_NOT_NULL(activeURL.get());
     EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
-    WKPageStopLoading(webView.page());
+    Util::run(&done);
+    done = false;
 
+    WKPageReload(webView.page());
+    activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
+    ASSERT_NOT_NULL(activeURL.get());
+    EXPECT_TRUE(WKURLIsEqual(activeURL.get(), blankURL.get()));
+    Util::run(&done);
+    done = false;
+
     url = ""
     WKPageLoadFile(webView.page(), url.get(), nullptr);
     activeURL = adoptWK(WKPageCopyActiveURL(webView.page()));
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to