Changeset 223282 in webkit


Ignore:
Timestamp:
Oct 13, 2017 10:07:32 AM (7 years ago)
Author:
Gustavo Noronha Silva
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.

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r223277 r223282  
     12017-10-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
     2
     3        [GLib] WebKitNavigationAction should tell whether it is a redirect
     4        https://bugs.webkit.org/show_bug.cgi?id=178178
     5
     6        There is no good way to know whether a given navigation action has been caused
     7        by a redirect through the glib API. This is necessary to implement some app mode
     8        heuristics for Epiphany.
     9
     10        Reviewed by Carlos Garcia Campos.
     11
     12        * UIProcess/API/glib/WebKitNavigationAction.cpp:
     13        (webkit_navigation_action_is_redirect): returns whether the navigation action is a redirect.
     14        * UIProcess/API/glib/WebKitNavigationActionPrivate.h: add isRedirect to the wrapper object.
     15        (_WebKitNavigationAction::_WebKitNavigationAction):
     16        * UIProcess/API/gtk/WebKitNavigationAction.h: add the new API.
     17        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: ditto.
     18        * UIProcess/API/wpe/WebKitNavigationAction.h: ditto.
     19
    1202017-10-12  Brady Eidson  <beidson@apple.com>
    221
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitNavigationAction.cpp

    r218553 r223282  
    151151    return navigation->isUserGesture;
    152152}
     153
     154/**
     155 * webkit_navigation_action_is_redirect:
     156 * @navigation: a #WebKitNavigationAction
     157 *
     158 * Returns whether the @navigation was redirected.
     159 *
     160 * Returns: %TRUE if the original navigation was redirected, %FALSE otherwise.
     161 *
     162 * Since: 2.20
     163 */
     164gboolean webkit_navigation_action_is_redirect(WebKitNavigationAction* navigation)
     165{
     166    g_return_val_if_fail(navigation, FALSE);
     167    return navigation->isRedirect;
     168}
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitNavigationActionPrivate.h

    r218553 r223282  
    3131        , modifiers(toPlatformModifiers(navigationActionData.modifiers))
    3232        , isUserGesture(navigationActionData.userGestureTokenIdentifier)
     33        , isRedirect(navigationActionData.isRedirect)
    3334        , request(uriRequest)
    3435    {
     
    4849    unsigned modifiers;
    4950    bool isUserGesture : 1;
     51    bool isRedirect : 1;
    5052    GRefPtr<WebKitURIRequest> request;
    5153};
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitNavigationAction.h

    r170702 r223282  
    8080webkit_navigation_action_is_user_gesture     (WebKitNavigationAction *navigation);
    8181
     82WEBKIT_API gboolean
     83webkit_navigation_action_is_redirect         (WebKitNavigationAction *navigation);
     84
    8285G_END_DECLS
    8386
  • trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt

    r222967 r223282  
    650650webkit_navigation_action_get_request
    651651webkit_navigation_action_is_user_gesture
     652webkit_navigation_action_is_redirect
    652653
    653654<SUBSECTION Standard>
  • trunk/Source/WebKit/UIProcess/API/wpe/WebKitNavigationAction.h

    r218553 r223282  
    8080webkit_navigation_action_is_user_gesture     (WebKitNavigationAction *navigation);
    8181
     82WEBKIT_API gboolean
     83webkit_navigation_action_is_redirect         (WebKitNavigationAction *navigation);
     84
    8285G_END_DECLS
    8386
  • trunk/Tools/ChangeLog

    r223281 r223282  
     12017-10-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
     2
     3        [GLib] WebKitNavigationAction should tell whether it is a redirect
     4        https://bugs.webkit.org/show_bug.cgi?id=178178
     5
     6        Test that WebKitNavigationAction properly reports being a redirect.
     7
     8        Reviewed by Carlos Garcia Campos.
     9
     10        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp:
     11        (testNavigationPolicy): test that loading /redirect leads to a redirect WebKitNavigationAction.
     12        (serverCallback): add a /redirect path to the server, which causes a redirect.
     13
    1142017-10-13  Chris Dumez  <cdumez@apple.com>
    215
  • trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitPolicyClient.cpp

    r218685 r223282  
    122122    g_assert_cmpint(webkit_navigation_action_get_mouse_button(navigationAction), ==, 0);
    123123    g_assert_cmpint(webkit_navigation_action_get_modifiers(navigationAction), ==, 0);
     124    g_assert_false(webkit_navigation_action_is_redirect(navigationAction));
    124125    g_assert(!webkit_navigation_policy_decision_get_frame_name(decision));
    125126    WebKitURIRequest* request = webkit_navigation_action_get_request(navigationAction);
     
    131132    test->waitUntilLoadFinished();
    132133    g_assert_cmpint(test->m_loadEvents.size(), ==, 3);
     134
     135    test->m_policyDecisionResponse = PolicyClientTest::Use;
     136    test->m_respondToPolicyDecisionAsynchronously = false;
     137    test->loadURI(kServer->getURIForPath("/redirect").data());
     138    test->waitUntilLoadFinished();
     139    g_assert_cmpint(test->m_loadEvents.size(), ==, 4);
     140
     141    decision = WEBKIT_NAVIGATION_POLICY_DECISION(test->m_previousPolicyDecision.get());
     142    navigationAction = webkit_navigation_policy_decision_get_navigation_action(decision);
     143    g_assert_true(webkit_navigation_action_is_redirect(navigationAction));
     144    g_assert(!webkit_navigation_policy_decision_get_frame_name(decision));
     145    request = webkit_navigation_action_get_request(navigationAction);
     146    g_assert_cmpstr(webkit_uri_request_get_uri(request), ==, kServer->getURIForPath("/").data());
    133147
    134148    // If we are waiting until load completion, it will never complete if we ignore the
     
    249263        soup_message_body_append(message->response_body, SOUP_MEMORY_STATIC, responseString, strlen(responseString));
    250264        soup_message_body_complete(message->response_body);
     265    } else if (g_str_equal(path, "/redirect")) {
     266        soup_message_set_status(message, SOUP_STATUS_MOVED_PERMANENTLY);
     267        soup_message_headers_append(message->response_headers, "Location", "/");
    251268    } else
    252269        soup_message_set_status(message, SOUP_STATUS_NOT_FOUND);
Note: See TracChangeset for help on using the changeset viewer.