From 14e7d1b986e7eb88ce4e2db59bf978656df1ac64 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Thu, 7 Aug 2014 14:58:11 +0000 Subject: [PATCH] [GTK] Use WebKitNavigationAction also for WebKitNavigationPolicyDecision https://bugs.webkit.org/show_bug.cgi?id=135695 Reviewed by Gustavo Noronha Silva. Source/WebKit2: WebKitNavigationAction was introduced to extend WebKitWebView::create signal and its API is mostly duplicated in WebKitNavigationPolicyDecision. Use WebKitNavigationAction insternally in WebKitNavigationPolicyDecision and deprecated all the duplicated API in favor of a single property navigation-action. * UIProcess/API/gtk/WebKitDefines.h: Remove unused macro WEBKIT_OBSOLETE and add WEBKIT_DEPRECATED and WEBKIT_DEPRECATED_FOR. * UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp: (_WebKitNavigationPolicyDecisionPrivate::~_WebKitNavigationPolicyDecisionPrivate): Free the WebKitNavigationAction. (webkitNavigationPolicyDecisionGetProperty): Add getter for navigation-action and use WebKitNavigationAction in all other getters. (webkit_navigation_policy_decision_class_init): Add navigation-action property and deprecated all others except frame-name. (webkit_navigation_policy_decision_get_navigation_action): Return the WebKitNavigationAction. (webkit_navigation_policy_decision_get_navigation_type): Use WebKitNavigationAction. (webkit_navigation_policy_decision_get_mouse_button): Ditto. (webkit_navigation_policy_decision_get_modifiers): Ditto. (webkit_navigation_policy_decision_get_request): Ditto. (webkitNavigationPolicyDecisionCreate): (webkitNewWindowPolicyDecisionCreate): * UIProcess/API/gtk/WebKitNavigationPolicyDecision.h: * UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h: * UIProcess/API/gtk/WebKitPolicyClient.cpp: Use a custom PolicyClient class so that we receive a NavigationActionData in the callbacks. (attachPolicyClientToView): (toWebKitNavigationType): Deleted. (decidePolicyForNavigationAction): Deleted. (decidePolicyForNewWindowAction): Deleted. (decidePolicyForResponse): Deleted. * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp: (webkitResponsePolicyDecisionCreate): * UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h: * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for deprecated symbols. * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols. Tools: Use WebKitNavigationAction API. * MiniBrowser/gtk/BrowserWindow.c: (webViewDecidePolicy): * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp: (testNavigationPolicy): Canonical link: https://commits.webkit.org/153572@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@172211 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebKit2/ChangeLog | 45 ++++++++ .../WebKit2/UIProcess/API/gtk/WebKitDefines.h | 5 +- .../gtk/WebKitNavigationPolicyDecision.cpp | 106 ++++++++++++++---- .../API/gtk/WebKitNavigationPolicyDecision.h | 26 +++-- .../WebKitNavigationPolicyDecisionPrivate.h | 4 +- .../UIProcess/API/gtk/WebKitPolicyClient.cpp | 93 +++++---------- .../API/gtk/WebKitResponsePolicyDecision.cpp | 16 +-- .../gtk/WebKitResponsePolicyDecisionPrivate.h | 2 +- .../API/gtk/docs/webkit2gtk-docs.sgml | 9 +- .../API/gtk/docs/webkit2gtk-sections.txt | 4 +- Tools/ChangeLog | 14 +++ Tools/MiniBrowser/gtk/BrowserWindow.c | 8 +- .../WebKit2Gtk/TestWebKitPolicyClient.cpp | 11 +- 13 files changed, 221 insertions(+), 122 deletions(-) diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog index 21521defb2e2..5c2d5711fb24 100644 --- a/Source/WebKit2/ChangeLog +++ b/Source/WebKit2/ChangeLog @@ -1,3 +1,48 @@ +2014-08-07 Carlos Garcia Campos + + [GTK] Use WebKitNavigationAction also for WebKitNavigationPolicyDecision + https://bugs.webkit.org/show_bug.cgi?id=135695 + + Reviewed by Gustavo Noronha Silva. + + WebKitNavigationAction was introduced to extend WebKitWebView::create signal + and its API is mostly duplicated in WebKitNavigationPolicyDecision. + Use WebKitNavigationAction insternally in WebKitNavigationPolicyDecision and + deprecated all the duplicated API in favor of a single property navigation-action. + + * UIProcess/API/gtk/WebKitDefines.h: Remove unused macro + WEBKIT_OBSOLETE and add WEBKIT_DEPRECATED and WEBKIT_DEPRECATED_FOR. + * UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp: + (_WebKitNavigationPolicyDecisionPrivate::~_WebKitNavigationPolicyDecisionPrivate): + Free the WebKitNavigationAction. + (webkitNavigationPolicyDecisionGetProperty): Add getter for + navigation-action and use WebKitNavigationAction in all other getters. + (webkit_navigation_policy_decision_class_init): Add navigation-action + property and deprecated all others except frame-name. + (webkit_navigation_policy_decision_get_navigation_action): Return the WebKitNavigationAction. + (webkit_navigation_policy_decision_get_navigation_type): Use WebKitNavigationAction. + (webkit_navigation_policy_decision_get_mouse_button): Ditto. + (webkit_navigation_policy_decision_get_modifiers): Ditto. + (webkit_navigation_policy_decision_get_request): Ditto. + (webkitNavigationPolicyDecisionCreate): + (webkitNewWindowPolicyDecisionCreate): + * UIProcess/API/gtk/WebKitNavigationPolicyDecision.h: + * UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h: + * UIProcess/API/gtk/WebKitPolicyClient.cpp: Use a custom + PolicyClient class so that we receive a NavigationActionData in + the callbacks. + (attachPolicyClientToView): + (toWebKitNavigationType): Deleted. + (decidePolicyForNavigationAction): Deleted. + (decidePolicyForNewWindowAction): Deleted. + (decidePolicyForResponse): Deleted. + * UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp: + (webkitResponsePolicyDecisionCreate): + * UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h: + * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: Add new section for + deprecated symbols. + * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: Add new symbols. + 2014-08-06 Antti Koivisto Move Soup specific code out of WebCoreArgumentCoders.cpp diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h b/Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h index 8b637652b6b2..520e9957c38c 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h @@ -38,10 +38,11 @@ # else # define WEBKIT_API __declspec(dllimport) # endif -# define WEBKIT_OBSOLETE_API WEBKIT_API #else # define WEBKIT_API __attribute__((visibility("default"))) -# define WEBKIT_OBSOLETE_API WEBKIT_API __attribute__((deprecated)) #endif +#define WEBKIT_DEPRECATED WEBKIT_API G_DEPRECATED +#define WEBKIT_DEPRECATED_FOR(f) WEBKIT_API G_DEPRECATED_FOR(f) + #endif // WebKitDefines_h diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp index 83366dccd7da..00bd8ac1743d 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.cpp @@ -20,9 +20,9 @@ #include "config.h" #include "WebKitNavigationPolicyDecision.h" -#include "APIURLRequest.h" -#include "WebEvent.h" #include "WebKitEnumTypes.h" +#include "WebKitNavigationActionPrivate.h" +#include "WebKitNavigationPolicyDecisionPrivate.h" #include "WebKitPolicyDecisionPrivate.h" #include "WebKitURIRequestPrivate.h" #include @@ -44,10 +44,12 @@ using namespace WebCore; */ struct _WebKitNavigationPolicyDecisionPrivate { - WebKitNavigationType navigationType; - unsigned modifiers; - unsigned mouseButton; - GRefPtr request; + ~_WebKitNavigationPolicyDecisionPrivate() + { + webkit_navigation_action_free(navigationAction); + } + + WebKitNavigationAction* navigationAction; CString frameName; }; @@ -55,6 +57,7 @@ WEBKIT_DEFINE_TYPE(WebKitNavigationPolicyDecision, webkit_navigation_policy_deci enum { PROP_0, + PROP_NAVIGATION_ACTION, PROP_NAVIGATION_TYPE, PROP_MOUSE_BUTTON, PROP_MODIFIERS, @@ -66,17 +69,20 @@ static void webkitNavigationPolicyDecisionGetProperty(GObject* object, guint pro { WebKitNavigationPolicyDecision* decision = WEBKIT_NAVIGATION_POLICY_DECISION(object); switch (propId) { + case PROP_NAVIGATION_ACTION: + g_value_set_boxed(value, webkit_navigation_policy_decision_get_navigation_action(decision)); + break; case PROP_NAVIGATION_TYPE: - g_value_set_enum(value, webkit_navigation_policy_decision_get_navigation_type(decision)); + g_value_set_enum(value, webkit_navigation_action_get_navigation_type(decision->priv->navigationAction)); break; case PROP_MOUSE_BUTTON: - g_value_set_enum(value, webkit_navigation_policy_decision_get_mouse_button(decision)); + g_value_set_enum(value, webkit_navigation_action_get_mouse_button(decision->priv->navigationAction)); break; case PROP_MODIFIERS: - g_value_set_uint(value, webkit_navigation_policy_decision_get_modifiers(decision)); + g_value_set_uint(value, webkit_navigation_action_get_modifiers(decision->priv->navigationAction)); break; case PROP_REQUEST: - g_value_set_object(value, webkit_navigation_policy_decision_get_request(decision)); + g_value_set_object(value, webkit_navigation_action_get_request(decision->priv->navigationAction)); break; case PROP_FRAME_NAME: g_value_set_string(value, webkit_navigation_policy_decision_get_frame_name(decision)); @@ -92,12 +98,31 @@ static void webkit_navigation_policy_decision_class_init(WebKitNavigationPolicyD GObjectClass* objectClass = G_OBJECT_CLASS(decisionClass); objectClass->get_property = webkitNavigationPolicyDecisionGetProperty; + /** + * WebKitNavigationPolicyDecision:navigation-action: + * + * The #WebKitNavigationAction that triggered this policy decision. + * + * Since: 2.6 + */ + g_object_class_install_property( + objectClass, + PROP_NAVIGATION_ACTION, + g_param_spec_boxed( + "navigation-action", + _("Navigation action"), + _("The WebKitNavigationAction triggering this decision"), + WEBKIT_TYPE_NAVIGATION_ACTION, + WEBKIT_PARAM_READABLE)); + /** * WebKitNavigationPolicyDecision:navigation-type: * * The type of navigation that triggered this policy decision. This is * useful for enacting different policies depending on what type of user * action caused the navigation. + * + * Deprecated: 2.6: Use #WebKitNavigationPolicyDecision:navigation-action instead */ g_object_class_install_property(objectClass, PROP_NAVIGATION_TYPE, @@ -116,6 +141,8 @@ static void webkit_navigation_policy_decision_class_init(WebKitNavigationPolicyD * of the button triggering that event. The button numbers match those from GDK. * If the navigation was not triggered by a mouse event, the value of this * property will be 0. + * + * Deprecated: 2.6: Use #WebKitNavigationPolicyDecision:navigation-action instead */ g_object_class_install_property(objectClass, PROP_MOUSE_BUTTON, @@ -133,6 +160,8 @@ static void webkit_navigation_policy_decision_class_init(WebKitNavigationPolicyD * #GdkModifierType values describing the modifiers used for that click. * If the navigation was not triggered by a mouse event or no modifiers * were active, the value of this property will be zero. + * + * Deprecated: 2.6: Use #WebKitNavigationPolicyDecision:navigation-action instead */ g_object_class_install_property(objectClass, PROP_MODIFIERS, @@ -147,6 +176,8 @@ static void webkit_navigation_policy_decision_class_init(WebKitNavigationPolicyD * * This property contains the #WebKitURIRequest associated with this * navigation. + * + * Deprecated: 2.6: Use #WebKitNavigationPolicyDecision:navigation-action instead */ g_object_class_install_property(objectClass, PROP_REQUEST, @@ -173,6 +204,22 @@ static void webkit_navigation_policy_decision_class_init(WebKitNavigationPolicyD WEBKIT_PARAM_READABLE)); } +/** + * webkit_navigation_policy_decision_get_navigation_action: + * @decision: a #WebKitNavigationPolicyDecision + * + * Gets the value of the #WebKitNavigationPolicyDecision:navigation-action property. + * + * Returns: (transfer none): The #WebKitNavigationAction triggering this policy decision. + * + * Since: 2.6 + */ +WebKitNavigationAction* webkit_navigation_policy_decision_get_navigation_action(WebKitNavigationPolicyDecision* decision) +{ + g_return_val_if_fail(WEBKIT_IS_NAVIGATION_POLICY_DECISION(decision), nullptr); + return decision->priv->navigationAction; +} + /** * webkit_navigation_policy_decision_get_navigation_type: * @decision: a #WebKitNavigationPolicyDecision @@ -180,11 +227,13 @@ static void webkit_navigation_policy_decision_class_init(WebKitNavigationPolicyD * Gets the value of the #WebKitNavigationPolicyDecision:navigation-type property. * * Returns: The type of navigation triggering this policy decision. + * + * Deprecated: 2.6: Use webkit_navigation_policy_decision_get_navigation_action() instead. */ WebKitNavigationType webkit_navigation_policy_decision_get_navigation_type(WebKitNavigationPolicyDecision* decision) { g_return_val_if_fail(WEBKIT_IS_NAVIGATION_POLICY_DECISION(decision), WEBKIT_NAVIGATION_TYPE_OTHER); - return decision->priv->navigationType; + return webkit_navigation_action_get_navigation_type(decision->priv->navigationAction); } /** @@ -194,11 +243,13 @@ WebKitNavigationType webkit_navigation_policy_decision_get_navigation_type(WebKi * Gets the value of the #WebKitNavigationPolicyDecision:mouse-button property. * * Returns: The mouse button used if this decision was triggered by a mouse event or 0 otherwise + * + * Deprecated: 2.6: Use webkit_navigation_policy_decision_get_navigation_action() instead. */ guint webkit_navigation_policy_decision_get_mouse_button(WebKitNavigationPolicyDecision* decision) { g_return_val_if_fail(WEBKIT_IS_NAVIGATION_POLICY_DECISION(decision), 0); - return decision->priv->mouseButton; + return webkit_navigation_action_get_mouse_button(decision->priv->navigationAction); } /** @@ -208,11 +259,13 @@ guint webkit_navigation_policy_decision_get_mouse_button(WebKitNavigationPolicyD * Gets the value of the #WebKitNavigationPolicyDecision:modifiers property. * * Returns: The modifiers active if this decision was triggered by a mouse event + * + * Deprecated: 2.6: Use webkit_navigation_policy_decision_get_navigation_action() instead. */ unsigned webkit_navigation_policy_decision_get_modifiers(WebKitNavigationPolicyDecision* decision) { g_return_val_if_fail(WEBKIT_IS_NAVIGATION_POLICY_DECISION(decision), 0); - return decision->priv->modifiers; + return webkit_navigation_action_get_modifiers(decision->priv->navigationAction); } /** @@ -222,11 +275,13 @@ unsigned webkit_navigation_policy_decision_get_modifiers(WebKitNavigationPolicyD * Gets the value of the #WebKitNavigationPolicyDecision:request property. * * Returns: (transfer none): The URI request that is associated with this navigation + * + * Deprecated: 2.6: Use webkit_navigation_policy_decision_get_navigation_action() instead. */ WebKitURIRequest* webkit_navigation_policy_decision_get_request(WebKitNavigationPolicyDecision* decision) { - g_return_val_if_fail(WEBKIT_IS_NAVIGATION_POLICY_DECISION(decision), 0); - return decision->priv->request.get(); + g_return_val_if_fail(WEBKIT_IS_NAVIGATION_POLICY_DECISION(decision), nullptr); + return webkit_navigation_action_get_request(decision->priv->navigationAction); } /** @@ -243,14 +298,19 @@ const char* webkit_navigation_policy_decision_get_frame_name(WebKitNavigationPol return decision->priv->frameName.data(); } -WebKitNavigationPolicyDecision* webkitNavigationPolicyDecisionCreate(WebKitNavigationType navigationType, unsigned mouseButton, unsigned modifiers, API::URLRequest* request, const char* frameName, WebFramePolicyListenerProxy* listener) +WebKitPolicyDecision* webkitNavigationPolicyDecisionCreate(const NavigationActionData& navigationActionData, const ResourceRequest& request, WebFramePolicyListenerProxy* listener) +{ + WebKitNavigationPolicyDecision* navigationDecision = WEBKIT_NAVIGATION_POLICY_DECISION(g_object_new(WEBKIT_TYPE_NAVIGATION_POLICY_DECISION, nullptr)); + GRefPtr uriRequest = adoptGRef(webkitURIRequestCreateForResourceRequest(request)); + navigationDecision->priv->navigationAction = webkitNavigationActionCreate(uriRequest.get(), navigationActionData); + WebKitPolicyDecision* decision = WEBKIT_POLICY_DECISION(navigationDecision); + webkitPolicyDecisionSetListener(decision, listener); + return decision; +} + +WebKitPolicyDecision* webkitNewWindowPolicyDecisionCreate(const NavigationActionData& navigationActionData, const ResourceRequest& request, const String& frameName, WebFramePolicyListenerProxy* listener) { - WebKitNavigationPolicyDecision* decision = WEBKIT_NAVIGATION_POLICY_DECISION(g_object_new(WEBKIT_TYPE_NAVIGATION_POLICY_DECISION, NULL)); - decision->priv->navigationType = navigationType; - decision->priv->mouseButton = mouseButton; - decision->priv->modifiers = modifiers; - decision->priv->request = adoptGRef(webkitURIRequestCreateForResourceRequest(request->resourceRequest())); - decision->priv->frameName = frameName; - webkitPolicyDecisionSetListener(WEBKIT_POLICY_DECISION(decision), listener); + WebKitPolicyDecision* decision = webkitNavigationPolicyDecisionCreate(navigationActionData, request, listener); + WEBKIT_NAVIGATION_POLICY_DECISION(decision)->priv->frameName = frameName.utf8().data(); return decision; } diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h b/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h index e8524613f434..0d9fb261af5f 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecision.h @@ -62,16 +62,24 @@ struct _WebKitNavigationPolicyDecisionClass { WEBKIT_API GType webkit_navigation_policy_decision_get_type (void); -WEBKIT_API WebKitNavigationType -webkit_navigation_policy_decision_get_navigation_type (WebKitNavigationPolicyDecision *decision); -WEBKIT_API guint -webkit_navigation_policy_decision_get_mouse_button (WebKitNavigationPolicyDecision *decision); -WEBKIT_API guint -webkit_navigation_policy_decision_get_modifiers (WebKitNavigationPolicyDecision *decision); -WEBKIT_API WebKitURIRequest * -webkit_navigation_policy_decision_get_request (WebKitNavigationPolicyDecision *decision); +WEBKIT_API WebKitNavigationAction * +webkit_navigation_policy_decision_get_navigation_action (WebKitNavigationPolicyDecision *decision); + +WEBKIT_DEPRECATED_FOR(webkit_navigation_policy_decision_get_navigation_action) WebKitNavigationType +webkit_navigation_policy_decision_get_navigation_type (WebKitNavigationPolicyDecision *decision); + +WEBKIT_DEPRECATED_FOR(webkit_navigation_policy_decision_get_navigation_action) guint +webkit_navigation_policy_decision_get_mouse_button (WebKitNavigationPolicyDecision *decision); + +WEBKIT_DEPRECATED_FOR(webkit_navigation_policy_decision_get_navigation_action) guint +webkit_navigation_policy_decision_get_modifiers (WebKitNavigationPolicyDecision *decision); + +WEBKIT_DEPRECATED_FOR(webkit_navigation_policy_decision_get_navigation_action) WebKitURIRequest * +webkit_navigation_policy_decision_get_request (WebKitNavigationPolicyDecision *decision); + WEBKIT_API const gchar * -webkit_navigation_policy_decision_get_frame_name (WebKitNavigationPolicyDecision *decision); +webkit_navigation_policy_decision_get_frame_name (WebKitNavigationPolicyDecision *decision); + G_END_DECLS #endif diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h b/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h index 84ee827cd0b6..9d94ee00eb09 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitNavigationPolicyDecisionPrivate.h @@ -20,9 +20,11 @@ #ifndef WebKitNavigationPolicyDecisionPrivate_h #define WebKitNavigationPolicyDecisionPrivate_h +#include "NavigationActionData.h" #include "WebKitNavigationPolicyDecision.h" #include "WebKitPrivate.h" -WebKitNavigationPolicyDecision* webkitNavigationPolicyDecisionCreate(WebKitNavigationType, unsigned mouseButton, unsigned modifiers, API::URLRequest*, const char* frameName, WebKit::WebFramePolicyListenerProxy*); +WebKitPolicyDecision* webkitNavigationPolicyDecisionCreate(const WebKit::NavigationActionData&, const WebCore::ResourceRequest&, WebKit::WebFramePolicyListenerProxy*); +WebKitPolicyDecision* webkitNewWindowPolicyDecisionCreate(const WebKit::NavigationActionData&, const WebCore::ResourceRequest&, const String& frameName, WebKit::WebFramePolicyListenerProxy*); #endif // WebKitNavigationPolicyDecisionPrivate_h diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp index 1ae9b10fe4d7..f2737ece52ad 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitPolicyClient.cpp @@ -20,6 +20,7 @@ #include "config.h" #include "WebKitPolicyClient.h" +#include "APIPolicyClient.h" #include "WebKitNavigationPolicyDecisionPrivate.h" #include "WebKitResponsePolicyDecisionPrivate.h" #include "WebKitWebViewBasePrivate.h" @@ -29,77 +30,37 @@ using namespace WebKit; -static inline WebKitNavigationType toWebKitNavigationType(WKFrameNavigationType type) -{ - switch (type) { - case kWKFrameNavigationTypeLinkClicked: - return WEBKIT_NAVIGATION_TYPE_LINK_CLICKED; - case kWKFrameNavigationTypeFormSubmitted: - return WEBKIT_NAVIGATION_TYPE_FORM_SUBMITTED; - case kWKFrameNavigationTypeBackForward: - return WEBKIT_NAVIGATION_TYPE_BACK_FORWARD; - case kWKFrameNavigationTypeReload: - return WEBKIT_NAVIGATION_TYPE_RELOAD; - case kWKFrameNavigationTypeFormResubmitted: - return WEBKIT_NAVIGATION_TYPE_FORM_RESUBMITTED; - case kWKFrameNavigationTypeOther: - return WEBKIT_NAVIGATION_TYPE_OTHER; - default: - ASSERT_NOT_REACHED(); - return WEBKIT_NAVIGATION_TYPE_LINK_CLICKED; +class PolicyClient: public API::PolicyClient { +public: + explicit PolicyClient(WebKitWebView* webView) + : m_webView(webView) + { } -} -static void decidePolicyForNavigationAction(WKPageRef, WKFrameRef, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKFrameRef, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef /* userData */, const void* clientInfo) -{ - GRefPtr decision = - adoptGRef(webkitNavigationPolicyDecisionCreate(toWebKitNavigationType(navigationType), - wkEventMouseButtonToWebKitMouseButton(mouseButton), - wkEventModifiersToGdkModifiers(modifiers), - toImpl(request), - 0, /* frame name */ - toImpl(listener))); - webkitWebViewMakePolicyDecision(WEBKIT_WEB_VIEW(clientInfo), - WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION, - WEBKIT_POLICY_DECISION(decision.get())); -} +private: + virtual void decidePolicyForNavigationAction(WebPageProxy*, WebFrameProxy*, const NavigationActionData& navigationActionData, WebFrameProxy* /*originatingFrame*/, const WebCore::ResourceRequest& /*originalRequest*/, const WebCore::ResourceRequest& request, RefPtr listener, API::Object* /*userData*/) override + { + GRefPtr decision = adoptGRef(webkitNavigationPolicyDecisionCreate(navigationActionData, request, listener.get())); + webkitWebViewMakePolicyDecision(m_webView, WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION, decision.get()); + } -static void decidePolicyForNewWindowAction(WKPageRef, WKFrameRef, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKStringRef frameName, WKFramePolicyListenerRef listener, WKTypeRef /* userData */, const void* clientInfo) -{ - GRefPtr decision = - adoptGRef(webkitNavigationPolicyDecisionCreate(toWebKitNavigationType(navigationType), - wkEventMouseButtonToWebKitMouseButton(mouseButton), - wkEventModifiersToGdkModifiers(modifiers), - toImpl(request), - toImpl(frameName)->string().utf8().data(), - toImpl(listener))); - webkitWebViewMakePolicyDecision(WEBKIT_WEB_VIEW(clientInfo), - WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION, - WEBKIT_POLICY_DECISION(decision.get())); -} + virtual void decidePolicyForNewWindowAction(WebPageProxy*, WebFrameProxy*, const NavigationActionData& navigationActionData, const WebCore::ResourceRequest& request, const String& frameName, RefPtr listener, API::Object* /*userData*/) override + { + GRefPtr decision = adoptGRef(webkitNewWindowPolicyDecisionCreate(navigationActionData, request, frameName, listener.get())); + webkitWebViewMakePolicyDecision(m_webView, WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION, decision.get()); + } -static void decidePolicyForResponse(WKPageRef, WKFrameRef, WKURLResponseRef response, WKURLRequestRef request, bool canShowMIMEType, WKFramePolicyListenerRef listener, WKTypeRef /* userData */, const void* clientInfo) -{ - GRefPtr decision = - adoptGRef(webkitResponsePolicyDecisionCreate(toImpl(request), toImpl(response), canShowMIMEType, toImpl(listener))); - webkitWebViewMakePolicyDecision(WEBKIT_WEB_VIEW(clientInfo), - WEBKIT_POLICY_DECISION_TYPE_RESPONSE, - WEBKIT_POLICY_DECISION(decision.get())); -} + virtual void decidePolicyForResponse(WebPageProxy*, WebFrameProxy*, const WebCore::ResourceResponse& response, const WebCore::ResourceRequest& request, bool canShowMIMEType, RefPtr listener, API::Object* /*userData*/) override + { + GRefPtr decision = adoptGRef(webkitResponsePolicyDecisionCreate(request, response, canShowMIMEType, listener.get())); + webkitWebViewMakePolicyDecision(m_webView, WEBKIT_POLICY_DECISION_TYPE_RESPONSE, decision.get()); + } + + WebKitWebView* m_webView; +}; void attachPolicyClientToView(WebKitWebView* webView) { - WKPagePolicyClientV1 policyClient = { - { - 1, // version - webView, // clientInfo - }, - 0, // decidePolicyForNavigationAction_deprecatedForUseWithV0 - decidePolicyForNewWindowAction, - 0, // decidePolicyForResponse_deprecatedForUseWithV0 - 0, // unableToImplementPolicy - decidePolicyForNavigationAction, - decidePolicyForResponse - }; - WKPageSetPagePolicyClient(toAPI(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView))), &policyClient.base); + WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView)); + page->setPolicyClient(std::make_unique(webView)); } diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp index b6054b8144d1..76c3b9274ef1 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitResponsePolicyDecision.cpp @@ -20,8 +20,6 @@ #include "config.h" #include "WebKitResponsePolicyDecision.h" -#include "APIURLRequest.h" -#include "APIURLResponse.h" #include "WebKitPolicyDecisionPrivate.h" #include "WebKitPrivate.h" #include "WebKitURIRequestPrivate.h" @@ -31,6 +29,7 @@ #include using namespace WebKit; +using namespace WebCore; /** * SECTION: WebKitResponsePolicyDecision @@ -155,12 +154,13 @@ gboolean webkit_response_policy_decision_is_mime_type_supported(WebKitResponsePo return decision->priv->canShowMIMEType; } -WebKitResponsePolicyDecision* webkitResponsePolicyDecisionCreate(API::URLRequest* request, API::URLResponse* response, bool canShowMIMEType, WebFramePolicyListenerProxy* listener) +WebKitPolicyDecision* webkitResponsePolicyDecisionCreate(const ResourceRequest& request, const ResourceResponse& response, bool canShowMIMEType, WebFramePolicyListenerProxy* listener) { - WebKitResponsePolicyDecision* decision = WEBKIT_RESPONSE_POLICY_DECISION(g_object_new(WEBKIT_TYPE_RESPONSE_POLICY_DECISION, NULL)); - decision->priv->request = adoptGRef(webkitURIRequestCreateForResourceRequest(request->resourceRequest())); - decision->priv->response = adoptGRef(webkitURIResponseCreateForResourceResponse(response->resourceResponse())); - decision->priv->canShowMIMEType = canShowMIMEType; - webkitPolicyDecisionSetListener(WEBKIT_POLICY_DECISION(decision), listener); + WebKitResponsePolicyDecision* responseDecision = WEBKIT_RESPONSE_POLICY_DECISION(g_object_new(WEBKIT_TYPE_RESPONSE_POLICY_DECISION, nullptr)); + responseDecision->priv->request = adoptGRef(webkitURIRequestCreateForResourceRequest(request)); + responseDecision->priv->response = adoptGRef(webkitURIResponseCreateForResourceResponse(response)); + responseDecision->priv->canShowMIMEType = canShowMIMEType; + WebKitPolicyDecision* decision = WEBKIT_POLICY_DECISION(responseDecision); + webkitPolicyDecisionSetListener(decision, listener); return decision; } diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h b/Source/WebKit2/UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h index ff83a7df3081..2ff91085bc77 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitResponsePolicyDecisionPrivate.h @@ -23,6 +23,6 @@ #include "WebKitPrivate.h" #include "WebKitResponsePolicyDecision.h" -WebKitResponsePolicyDecision* webkitResponsePolicyDecisionCreate(API::URLRequest*, API::URLResponse*, bool canShowMIMEType, WebKit::WebFramePolicyListenerProxy*); +WebKitPolicyDecision* webkitResponsePolicyDecisionCreate(const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, bool canShowMIMEType, WebKit::WebFramePolicyListenerProxy*); #endif // WebKitResponsePolicyDecisionPrivate_h diff --git a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml index 030d5605edd6..66387df487f2 100644 --- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml +++ b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml @@ -58,11 +58,16 @@ Index - + + + Index of deprecated symbols + + + Index of new symbols in 2.2 - + Index of new symbols in 2.4 diff --git a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt index e46dc2ed5f0c..7c4803351050 100644 --- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt +++ b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt @@ -16,7 +16,8 @@ WEBKIT_WEB_VIEW_BASE_GET_CLASS webkit_web_view_base_get_type WebKitWebViewBasePrivate WEBKIT_API -WEBKIT_OBSOLETE_API +WEBKIT_DEPRECATED +WEBKIT_DEPRECATED_FOR
@@ -613,6 +614,7 @@ webkit_policy_decision_get_type WebKitNavigationPolicyDecision WebKitNavigationPolicyDecision WebKitNavigationType +webkit_navigation_policy_decision_get_navigation_action webkit_navigation_policy_decision_get_frame_name webkit_navigation_policy_decision_get_modifiers webkit_navigation_policy_decision_get_mouse_button diff --git a/Tools/ChangeLog b/Tools/ChangeLog index 35e2c74ef7a9..b68b02d0f9e8 100644 --- a/Tools/ChangeLog +++ b/Tools/ChangeLog @@ -1,3 +1,17 @@ +2014-08-07 Carlos Garcia Campos + + [GTK] Use WebKitNavigationAction also for WebKitNavigationPolicyDecision + https://bugs.webkit.org/show_bug.cgi?id=135695 + + Reviewed by Gustavo Noronha Silva. + + Use WebKitNavigationAction API. + + * MiniBrowser/gtk/BrowserWindow.c: + (webViewDecidePolicy): + * TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp: + (testNavigationPolicy): + 2014-08-07 Carlos Garcia Campos [GTK] Test /webkit2/WebKitUserContentManager/injected-script fails diff --git a/Tools/MiniBrowser/gtk/BrowserWindow.c b/Tools/MiniBrowser/gtk/BrowserWindow.c index 65b096c0ea1d..2754931500b6 100644 --- a/Tools/MiniBrowser/gtk/BrowserWindow.c +++ b/Tools/MiniBrowser/gtk/BrowserWindow.c @@ -370,15 +370,15 @@ static gboolean webViewDecidePolicy(WebKitWebView *webView, WebKitPolicyDecision { switch (decisionType) { case WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION: { - WebKitNavigationPolicyDecision *navigationDecision = WEBKIT_NAVIGATION_POLICY_DECISION(decision); - if (webkit_navigation_policy_decision_get_navigation_type(navigationDecision) != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED - || webkit_navigation_policy_decision_get_mouse_button(navigationDecision) != GDK_BUTTON_MIDDLE) + WebKitNavigationAction *navigationAction = webkit_navigation_policy_decision_get_navigation_action(WEBKIT_NAVIGATION_POLICY_DECISION(decision)); + if (webkit_navigation_action_get_navigation_type(navigationAction) != WEBKIT_NAVIGATION_TYPE_LINK_CLICKED + || webkit_navigation_action_get_mouse_button(navigationAction) != GDK_BUTTON_MIDDLE) return FALSE; // Opening a new window if link clicked with the middle button. WebKitWebView *newWebView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(webkit_web_view_get_context(webView))); GtkWidget *newWindow = browser_window_new(newWebView, GTK_WINDOW(window)); - webkit_web_view_load_request(newWebView, webkit_navigation_policy_decision_get_request(navigationDecision)); + webkit_web_view_load_request(newWebView, webkit_navigation_action_get_request(navigationAction)); gtk_widget_show(newWindow); webkit_policy_decision_ignore(decision); diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp index fa91257fe652..85140fcdff2a 100644 --- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp +++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebKitPolicyClient.cpp @@ -117,11 +117,12 @@ static void testNavigationPolicy(PolicyClientTest* test, gconstpointer) // Ideally we'd like to have a more intensive test here, but it's still pretty tricky // to trigger different types of navigations with the GTK+ WebKit2 API. WebKitNavigationPolicyDecision* decision = WEBKIT_NAVIGATION_POLICY_DECISION(test->m_previousPolicyDecision.get()); - g_assert_cmpint(webkit_navigation_policy_decision_get_navigation_type(decision), ==, WEBKIT_NAVIGATION_TYPE_OTHER); - g_assert_cmpint(webkit_navigation_policy_decision_get_mouse_button(decision), ==, 0); - g_assert_cmpint(webkit_navigation_policy_decision_get_modifiers(decision), ==, 0); - g_assert_cmpstr(webkit_navigation_policy_decision_get_frame_name(decision), ==, 0); - WebKitURIRequest* request = webkit_navigation_policy_decision_get_request(decision); + WebKitNavigationAction* navigationAction = webkit_navigation_policy_decision_get_navigation_action(decision); + 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(!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/"); test->m_policyDecisionResponse = PolicyClientTest::Use;