Title: [223282] trunk
Revision
223282
Author
g...@gnome.org
Date
2017-10-13 10:07:32 -0700 (Fri, 13 Oct 2017)

Log Message

[GLib] WebKitNavigationAction should tell whether it is a redirect
https://bugs.webkit.org/show_bug.cgi?id=178178

Source/WebKit:

There is no good way to know whether a given navigation action has been caused
by a redirect through the glib API. This is necessary to implement some app mode
heuristics for Epiphany.

Reviewed by Carlos Garcia Campos.

* UIProcess/API/glib/WebKitNavigationAction.cpp:
(webkit_navigation_action_is_redirect): returns whether the navigation action is a redirect.
* UIProcess/API/glib/WebKitNavigationActionPrivate.h: add isRedirect to the wrapper object.
(_WebKitNavigationAction::_WebKitNavigationAction):
* UIProcess/API/gtk/WebKitNavigationAction.h: add the new API.
* UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: ditto.
* UIProcess/API/wpe/WebKitNavigationAction.h: ditto.

Tools:

Test that WebKitNavigationAction properly reports being a redirect.

Reviewed by Carlos Garcia Campos.

* TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp:
(testNavigationPolicy): test that loading /redirect leads to a redirect WebKitNavigationAction.
(serverCallback): add a /redirect path to the server, which causes a redirect.

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (223281 => 223282)


--- trunk/Source/WebKit/ChangeLog	2017-10-13 17:05:38 UTC (rev 223281)
+++ trunk/Source/WebKit/ChangeLog	2017-10-13 17:07:32 UTC (rev 223282)
@@ -1,3 +1,22 @@
+2017-10-11  Gustavo Noronha Silva  <gustavo.noro...@collabora.co.uk>
+
+        [GLib] WebKitNavigationAction should tell whether it is a redirect
+        https://bugs.webkit.org/show_bug.cgi?id=178178
+
+        There is no good way to know whether a given navigation action has been caused
+        by a redirect through the glib API. This is necessary to implement some app mode
+        heuristics for Epiphany.
+
+        Reviewed by Carlos Garcia Campos.
+
+        * UIProcess/API/glib/WebKitNavigationAction.cpp:
+        (webkit_navigation_action_is_redirect): returns whether the navigation action is a redirect.
+        * UIProcess/API/glib/WebKitNavigationActionPrivate.h: add isRedirect to the wrapper object.
+        (_WebKitNavigationAction::_WebKitNavigationAction):
+        * UIProcess/API/gtk/WebKitNavigationAction.h: add the new API.
+        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: ditto.
+        * UIProcess/API/wpe/WebKitNavigationAction.h: ditto.
+
 2017-10-12  Brady Eidson  <beid...@apple.com>
 
         SW "Hello world".

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitNavigationAction.cpp (223281 => 223282)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitNavigationAction.cpp	2017-10-13 17:05:38 UTC (rev 223281)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitNavigationAction.cpp	2017-10-13 17:07:32 UTC (rev 223282)
@@ -150,3 +150,19 @@
     g_return_val_if_fail(navigation, FALSE);
     return navigation->isUserGesture;
 }
+
+/**
+ * webkit_navigation_action_is_redirect:
+ * @navigation: a #WebKitNavigationAction
+ *
+ * Returns whether the @navigation was redirected.
+ *
+ * Returns: %TRUE if the original navigation was redirected, %FALSE otherwise.
+ *
+ * Since: 2.20
+ */
+gboolean webkit_navigation_action_is_redirect(WebKitNavigationAction* navigation)
+{
+    g_return_val_if_fail(navigation, FALSE);
+    return navigation->isRedirect;
+}

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitNavigationActionPrivate.h (223281 => 223282)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitNavigationActionPrivate.h	2017-10-13 17:05:38 UTC (rev 223281)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitNavigationActionPrivate.h	2017-10-13 17:07:32 UTC (rev 223282)
@@ -30,6 +30,7 @@
         , mouseButton(toWebKitMouseButton(navigationActionData.mouseButton))
         , modifiers(toPlatformModifiers(navigationActionData.modifiers))
         , isUserGesture(navigationActionData.userGestureTokenIdentifier)
+        , isRedirect(navigationActionData.isRedirect)
         , request(uriRequest)
     {
     }
@@ -47,6 +48,7 @@
     unsigned mouseButton;
     unsigned modifiers;
     bool isUserGesture : 1;
+    bool isRedirect : 1;
     GRefPtr<WebKitURIRequest> request;
 };
 

Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitNavigationAction.h (223281 => 223282)


--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitNavigationAction.h	2017-10-13 17:05:38 UTC (rev 223281)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitNavigationAction.h	2017-10-13 17:07:32 UTC (rev 223282)
@@ -79,6 +79,9 @@
 WEBKIT_API gboolean
 webkit_navigation_action_is_user_gesture     (WebKitNavigationAction *navigation);
 
+WEBKIT_API gboolean
+webkit_navigation_action_is_redirect         (WebKitNavigationAction *navigation);
+
 G_END_DECLS
 
 #endif

Modified: trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt (223281 => 223282)


--- trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt	2017-10-13 17:05:38 UTC (rev 223281)
+++ trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt	2017-10-13 17:07:32 UTC (rev 223282)
@@ -649,6 +649,7 @@
 webkit_navigation_action_get_modifiers
 webkit_navigation_action_get_request
 webkit_navigation_action_is_user_gesture
+webkit_navigation_action_is_redirect
 
 <SUBSECTION Standard>
 WEBKIT_TYPE_NAVIGATION_ACTION

Modified: trunk/Source/WebKit/UIProcess/API/wpe/WebKitNavigationAction.h (223281 => 223282)


--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitNavigationAction.h	2017-10-13 17:05:38 UTC (rev 223281)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitNavigationAction.h	2017-10-13 17:07:32 UTC (rev 223282)
@@ -79,6 +79,9 @@
 WEBKIT_API gboolean
 webkit_navigation_action_is_user_gesture     (WebKitNavigationAction *navigation);
 
+WEBKIT_API gboolean
+webkit_navigation_action_is_redirect         (WebKitNavigationAction *navigation);
+
 G_END_DECLS
 
 #endif

Modified: trunk/Tools/ChangeLog (223281 => 223282)


--- trunk/Tools/ChangeLog	2017-10-13 17:05:38 UTC (rev 223281)
+++ trunk/Tools/ChangeLog	2017-10-13 17:07:32 UTC (rev 223282)
@@ -1,3 +1,16 @@
+2017-10-11  Gustavo Noronha Silva  <gustavo.noro...@collabora.co.uk>
+
+        [GLib] WebKitNavigationAction should tell whether it is a redirect
+        https://bugs.webkit.org/show_bug.cgi?id=178178
+
+        Test that WebKitNavigationAction properly reports being a redirect.
+
+        Reviewed by Carlos Garcia Campos.
+
+        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp:
+        (testNavigationPolicy): test that loading /redirect leads to a redirect WebKitNavigationAction.
+        (serverCallback): add a /redirect path to the server, which causes a redirect.
+
 2017-10-13  Chris Dumez  <cdu...@apple.com>
 
         Unreviewed, fix webkitpy failure after r223273

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp (223281 => 223282)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp	2017-10-13 17:05:38 UTC (rev 223281)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp	2017-10-13 17:07:32 UTC (rev 223282)
@@ -121,6 +121,7 @@
     g_assert_cmpint(webkit_navigation_action_get_navigation_type(navigationAction), ==, WEBKIT_NAVIGATION_TYPE_OTHER);
     g_assert_cmpint(webkit_navigation_action_get_mouse_button(navigationAction), ==, 0);
     g_assert_cmpint(webkit_navigation_action_get_modifiers(navigationAction), ==, 0);
+    g_assert_false(webkit_navigation_action_is_redirect(navigationAction));
     g_assert(!webkit_navigation_policy_decision_get_frame_name(decision));
     WebKitURIRequest* request = webkit_navigation_action_get_request(navigationAction);
     g_assert_cmpstr(webkit_uri_request_get_uri(request), ==, "http://webkitgtk.org/");
@@ -131,6 +132,19 @@
     test->waitUntilLoadFinished();
     g_assert_cmpint(test->m_loadEvents.size(), ==, 3);
 
+    test->m_policyDecisionResponse = PolicyClientTest::Use;
+    test->m_respondToPolicyDecisionAsynchronously = false;
+    test->loadURI(kServer->getURIForPath("/redirect").data());
+    test->waitUntilLoadFinished();
+    g_assert_cmpint(test->m_loadEvents.size(), ==, 4);
+
+    decision = WEBKIT_NAVIGATION_POLICY_DECISION(test->m_previousPolicyDecision.get());
+    navigationAction = webkit_navigation_policy_decision_get_navigation_action(decision);
+    g_assert_true(webkit_navigation_action_is_redirect(navigationAction));
+    g_assert(!webkit_navigation_policy_decision_get_frame_name(decision));
+    request = webkit_navigation_action_get_request(navigationAction);
+    g_assert_cmpstr(webkit_uri_request_get_uri(request), ==, kServer->getURIForPath("/").data());
+
     // If we are waiting until load completion, it will never complete if we ignore the
     // navigation. So we tell the main loop to quit sometime later.
     test->m_policyDecisionResponse = PolicyClientTest::Ignore;
@@ -248,6 +262,9 @@
         soup_message_set_status(message, SOUP_STATUS_OK);
         soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, responseString, strlen(responseString));
         soup_message_body_complete(message->response_body);
+    } else if (g_str_equal(path, "/redirect")) {
+        soup_message_set_status(message, SOUP_STATUS_MOVED_PERMANENTLY);
+        soup_message_headers_append(message->response_headers, "Location", "/");
     } else
         soup_message_set_status(message, SOUP_STATUS_NOT_FOUND);
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to