Title: [122426] trunk/Source/WebKit2
Revision
122426
Author
[email protected]
Date
2012-07-12 01:35:36 -0700 (Thu, 12 Jul 2012)

Log Message

[WK2][EFL] Add policy client to Ewk_View
https://bugs.webkit.org/show_bug.cgi?id=90953

Patch by Christophe Dumez <[email protected]> on 2012-07-12
Reviewed by Kenneth Rohde Christiansen.

Emit new "policy,decision,navigation" and "policy,decision,new,window"
on the Ewk_View when policy decisions should be taken by the client.

A new Ewk_Navigation_Policy_Decision type is introduced to provide
information about the navigation request and make a decision.
By default, the navigation request is accepted.

* PlatformEfl.cmake:
* UIProcess/API/efl/EWebKit2.h:
* UIProcess/API/efl/ewk_navigation_policy_decision.cpp: Added.
(_Ewk_Navigation_Policy_Decision):
(ewk_navigation_policy_decision_free):
(ewk_navigation_policy_navigation_type_get):
(ewk_navigation_policy_mouse_button_get):
(ewk_navigation_policy_modifiers_get):
(ewk_navigation_policy_frame_name_get):
(ewk_navigation_policy_request_get):
(ewk_navigation_policy_decision_accept):
(ewk_navigation_policy_decision_reject):
(ewk_navigation_policy_decision_download):
(ewk_navigation_policy_decision_new):
* UIProcess/API/efl/ewk_navigation_policy_decision.h: Added.
* UIProcess/API/efl/ewk_navigation_policy_decision_private.h: Added.
* UIProcess/API/efl/ewk_private.h: Added.
* UIProcess/API/efl/ewk_view.cpp:
(ewk_view_base_add):
(ewk_view_navigation_policy_decision):
(ewk_view_new_window_policy_decision):
* UIProcess/API/efl/ewk_view.h:
* UIProcess/API/efl/ewk_view_policy_client.cpp: Added.
(toEwkView):
(decidePolicyForNavigationAction):
(decidePolicyForNewWindowAction):
(ewk_view_policy_client_attach):
* UIProcess/API/efl/ewk_view_policy_client_private.h: Added.
* UIProcess/API/efl/ewk_view_private.h:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (122425 => 122426)


--- trunk/Source/WebKit2/ChangeLog	2012-07-12 08:12:52 UTC (rev 122425)
+++ trunk/Source/WebKit2/ChangeLog	2012-07-12 08:35:36 UTC (rev 122426)
@@ -1,3 +1,47 @@
+2012-07-12  Christophe Dumez  <[email protected]>
+
+        [WK2][EFL] Add policy client to Ewk_View
+        https://bugs.webkit.org/show_bug.cgi?id=90953
+
+        Reviewed by Kenneth Rohde Christiansen.
+
+        Emit new "policy,decision,navigation" and "policy,decision,new,window"
+        on the Ewk_View when policy decisions should be taken by the client.
+
+        A new Ewk_Navigation_Policy_Decision type is introduced to provide
+        information about the navigation request and make a decision.
+        By default, the navigation request is accepted.
+
+        * PlatformEfl.cmake:
+        * UIProcess/API/efl/EWebKit2.h:
+        * UIProcess/API/efl/ewk_navigation_policy_decision.cpp: Added.
+        (_Ewk_Navigation_Policy_Decision):
+        (ewk_navigation_policy_decision_free):
+        (ewk_navigation_policy_navigation_type_get):
+        (ewk_navigation_policy_mouse_button_get):
+        (ewk_navigation_policy_modifiers_get):
+        (ewk_navigation_policy_frame_name_get):
+        (ewk_navigation_policy_request_get):
+        (ewk_navigation_policy_decision_accept):
+        (ewk_navigation_policy_decision_reject):
+        (ewk_navigation_policy_decision_download):
+        (ewk_navigation_policy_decision_new):
+        * UIProcess/API/efl/ewk_navigation_policy_decision.h: Added.
+        * UIProcess/API/efl/ewk_navigation_policy_decision_private.h: Added.
+        * UIProcess/API/efl/ewk_private.h: Added.
+        * UIProcess/API/efl/ewk_view.cpp:
+        (ewk_view_base_add):
+        (ewk_view_navigation_policy_decision):
+        (ewk_view_new_window_policy_decision):
+        * UIProcess/API/efl/ewk_view.h:
+        * UIProcess/API/efl/ewk_view_policy_client.cpp: Added.
+        (toEwkView):
+        (decidePolicyForNavigationAction):
+        (decidePolicyForNewWindowAction):
+        (ewk_view_policy_client_attach):
+        * UIProcess/API/efl/ewk_view_policy_client_private.h: Added.
+        * UIProcess/API/efl/ewk_view_private.h:
+
 2012-07-11  Carlos Garcia Campos  <[email protected]>
 
         [GTK] Add webkit_cookie_manager_set_persistent_storage() to WebKit2 GTK+ API

Modified: trunk/Source/WebKit2/PlatformEfl.cmake (122425 => 122426)


--- trunk/Source/WebKit2/PlatformEfl.cmake	2012-07-12 08:12:52 UTC (rev 122425)
+++ trunk/Source/WebKit2/PlatformEfl.cmake	2012-07-12 08:35:36 UTC (rev 122426)
@@ -37,10 +37,12 @@
     UIProcess/API/efl/ewk_context.cpp
     UIProcess/API/efl/ewk_intent.cpp
     UIProcess/API/efl/ewk_intent_service.cpp
+    UIProcess/API/efl/ewk_navigation_policy_decision.cpp
     UIProcess/API/efl/ewk_url_request.cpp
     UIProcess/API/efl/ewk_url_response.cpp
     UIProcess/API/efl/ewk_view.cpp
     UIProcess/API/efl/ewk_view_loader_client.cpp
+    UIProcess/API/efl/ewk_view_policy_client.cpp
     UIProcess/API/efl/ewk_view_resource_load_client.cpp
     UIProcess/API/efl/ewk_web_error.cpp
     UIProcess/API/efl/ewk_web_resource.cpp

Modified: trunk/Source/WebKit2/UIProcess/API/efl/EWebKit2.h (122425 => 122426)


--- trunk/Source/WebKit2/UIProcess/API/efl/EWebKit2.h	2012-07-12 08:12:52 UTC (rev 122425)
+++ trunk/Source/WebKit2/UIProcess/API/efl/EWebKit2.h	2012-07-12 08:35:36 UTC (rev 122426)
@@ -30,6 +30,7 @@
 #include "ewk_context.h"
 #include "ewk_intent.h"
 #include "ewk_intent_service.h"
+#include "ewk_navigation_policy_decision.h"
 #include "ewk_url_request.h"
 #include "ewk_url_response.h"
 #include "ewk_view.h"

Added: trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.cpp (0 => 122426)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.cpp	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.cpp	2012-07-12 08:35:36 UTC (rev 122426)
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2012 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ewk_navigation_policy_decision.h"
+
+#include "WKAPICast.h"
+#include "WKFramePolicyListener.h"
+#include "WKRetainPtr.h"
+#include "ewk_navigation_policy_decision_private.h"
+#include "ewk_private.h"
+#include "ewk_url_request_private.h"
+
+using namespace WebKit;
+
+/**
+ * \struct  _Ewk_Navigation_Policy_Decision
+ * @brief   Contains the navigation policy decision data.
+ */
+struct _Ewk_Navigation_Policy_Decision {
+    WKRetainPtr<WKFramePolicyListenerRef> listener;
+    bool actedUponByClient;
+    Ewk_Navigation_Type navigationType;
+    Event_Mouse_Button mouseButton;
+    Event_Modifier_Keys modifiers;
+    Ewk_Url_Request* request;
+    const char* frameName;
+};
+
+void ewk_navigation_policy_decision_free(Ewk_Navigation_Policy_Decision* decision)
+{
+    EINA_SAFETY_ON_NULL_RETURN(decision);
+
+    // This is the default choice for all policy decisions in WebPageProxy.cpp.
+    if (!decision->actedUponByClient)
+        WKFramePolicyListenerUse(decision->listener.get());
+
+    ewk_url_request_unref(decision->request);
+    eina_stringshare_del(decision->frameName);
+    free(decision);
+}
+
+Ewk_Navigation_Type ewk_navigation_policy_navigation_type_get(const Ewk_Navigation_Policy_Decision* decision)
+{
+    EINA_SAFETY_ON_NULL_RETURN_VAL(decision, EWK_NAVIGATION_TYPE_OTHER);
+
+    return decision->navigationType;
+}
+
+Event_Mouse_Button ewk_navigation_policy_mouse_button_get(const Ewk_Navigation_Policy_Decision* decision)
+{
+    EINA_SAFETY_ON_NULL_RETURN_VAL(decision, EVENT_MOUSE_BUTTON_NONE);
+
+    return decision->mouseButton;
+}
+
+Event_Modifier_Keys ewk_navigation_policy_modifiers_get(const Ewk_Navigation_Policy_Decision* decision)
+{
+    EINA_SAFETY_ON_NULL_RETURN_VAL(decision, static_cast<Event_Modifier_Keys>(0));
+
+    return decision->modifiers;
+}
+
+const char* ewk_navigation_policy_frame_name_get(const Ewk_Navigation_Policy_Decision* decision)
+{
+    EINA_SAFETY_ON_NULL_RETURN_VAL(decision, 0);
+
+    return decision->frameName;
+}
+
+Ewk_Url_Request* ewk_navigation_policy_request_get(const Ewk_Navigation_Policy_Decision* decision)
+{
+    EINA_SAFETY_ON_NULL_RETURN_VAL(decision, 0);
+
+    return decision->request;
+}
+
+void ewk_navigation_policy_decision_accept(Ewk_Navigation_Policy_Decision* decision)
+{
+    EINA_SAFETY_ON_NULL_RETURN(decision);
+
+    WKFramePolicyListenerUse(decision->listener.get());
+    decision->actedUponByClient = true;
+}
+
+void ewk_navigation_policy_decision_reject(Ewk_Navigation_Policy_Decision* decision)
+{
+    EINA_SAFETY_ON_NULL_RETURN(decision);
+
+    WKFramePolicyListenerIgnore(decision->listener.get());
+    decision->actedUponByClient = true;
+}
+
+void ewk_navigation_policy_decision_download(Ewk_Navigation_Policy_Decision* decision)
+{
+    EINA_SAFETY_ON_NULL_RETURN(decision);
+
+    WKFramePolicyListenerDownload(decision->listener.get());
+    decision->actedUponByClient = true;
+}
+
+// Ewk_Navigation_Type enum validation
+COMPILE_ASSERT_MATCHING_ENUM(EWK_NAVIGATION_TYPE_LINK_ACTIVATED, kWKFrameNavigationTypeLinkClicked);
+COMPILE_ASSERT_MATCHING_ENUM(EWK_NAVIGATION_TYPE_FORM_SUBMITTED, kWKFrameNavigationTypeFormSubmitted);
+COMPILE_ASSERT_MATCHING_ENUM(EWK_NAVIGATION_TYPE_BACK_FORWARD, kWKFrameNavigationTypeBackForward);
+COMPILE_ASSERT_MATCHING_ENUM(EWK_NAVIGATION_TYPE_RELOAD, kWKFrameNavigationTypeReload);
+COMPILE_ASSERT_MATCHING_ENUM(EWK_NAVIGATION_TYPE_FORM_RESUBMITTED, kWKFrameNavigationTypeFormResubmitted);
+COMPILE_ASSERT_MATCHING_ENUM(EWK_NAVIGATION_TYPE_OTHER, kWKFrameNavigationTypeOther);
+
+// Event_Mouse_Button enum validation
+COMPILE_ASSERT_MATCHING_ENUM(EVENT_MOUSE_BUTTON_NONE, kWKEventMouseButtonNoButton);
+COMPILE_ASSERT_MATCHING_ENUM(EVENT_MOUSE_BUTTON_LEFT, kWKEventMouseButtonLeftButton);
+COMPILE_ASSERT_MATCHING_ENUM(EVENT_MOUSE_BUTTON_MIDDLE, kWKEventMouseButtonMiddleButton);
+COMPILE_ASSERT_MATCHING_ENUM(EVENT_MOUSE_BUTTON_RIGHT, kWKEventMouseButtonRightButton);
+
+// Event_Modifier_Keys validation
+COMPILE_ASSERT_MATCHING_ENUM(EVENT_MODIFIER_KEY_SHIFT, kWKEventModifiersShiftKey);
+COMPILE_ASSERT_MATCHING_ENUM(EVENT_MODIFIER_KEY_CTRL, kWKEventModifiersControlKey);
+COMPILE_ASSERT_MATCHING_ENUM(EVENT_MODIFIER_KEY_ALT, kWKEventModifiersAltKey);
+COMPILE_ASSERT_MATCHING_ENUM(EVENT_MODIFIER_KEY_META, kWKEventModifiersMetaKey);
+
+Ewk_Navigation_Policy_Decision* ewk_navigation_policy_decision_new(WKFrameNavigationType navigationType, WKEventMouseButton mouseButton, WKEventModifiers modifiers, WKURLRequestRef request, const char* frameName, WKFramePolicyListenerRef listener)
+{
+    Ewk_Navigation_Policy_Decision* ewkPolicyDecision = static_cast<Ewk_Navigation_Policy_Decision*>(calloc(1, sizeof(Ewk_Navigation_Policy_Decision)));
+    ewkPolicyDecision->listener = listener;
+    ewkPolicyDecision->mouseButton = static_cast<Event_Mouse_Button>(mouseButton);
+    ewkPolicyDecision->modifiers = static_cast<Event_Modifier_Keys>(modifiers);
+    ewkPolicyDecision->navigationType = static_cast<Ewk_Navigation_Type>(navigationType);
+    ewkPolicyDecision->request = ewk_url_request_new(request);
+    ewkPolicyDecision->frameName = eina_stringshare_add(frameName);
+
+    return ewkPolicyDecision;
+}

Added: trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.h (0 => 122426)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.h	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision.h	2012-07-12 08:35:36 UTC (rev 122426)
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2012 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @file    ewk_navigation_policy_decision.h
+ * @brief   Describes the Ewk navigation policy decision API.
+ */
+
+#ifndef ewk_navigation_policy_decision_h
+#define ewk_navigation_policy_decision_h
+
+#include "ewk_url_request.h"
+#include <Eina.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Creates a type name for _Ewk_Navigation_Policy_Decision */
+typedef struct _Ewk_Navigation_Policy_Decision Ewk_Navigation_Policy_Decision;
+
+/// Enum containing navigation types
+typedef enum  {
+    EWK_NAVIGATION_TYPE_LINK_ACTIVATED,
+    EWK_NAVIGATION_TYPE_FORM_SUBMITTED,
+    EWK_NAVIGATION_TYPE_BACK_FORWARD,
+    EWK_NAVIGATION_TYPE_RELOAD,
+    EWK_NAVIGATION_TYPE_FORM_RESUBMITTED,
+    EWK_NAVIGATION_TYPE_OTHER
+} Ewk_Navigation_Type;
+
+/// Enum containing button types
+typedef enum {
+    EVENT_MOUSE_BUTTON_NONE = -1,
+    EVENT_MOUSE_BUTTON_LEFT = 0,
+    EVENT_MOUSE_BUTTON_MIDDLE = 1,
+    EVENT_MOUSE_BUTTON_RIGHT = 2
+} Event_Mouse_Button;
+
+typedef enum {
+    EVENT_MODIFIER_KEY_SHIFT = 1 << 0,
+    EVENT_MODIFIER_KEY_CTRL = 1 << 1,
+    EVENT_MODIFIER_KEY_ALT = 1 << 2,
+    EVENT_MODIFIER_KEY_META = 1 << 3
+} Event_Modifier_Keys;
+
+/**
+ * Frees the given object.
+ *
+ * @param decision the policy decision object to free
+ */
+EAPI void ewk_navigation_policy_decision_free(Ewk_Navigation_Policy_Decision *decision);
+
+/**
+ * Query type for this navigation policy decision.
+ *
+ * @param decision navigation policy decision object to query.
+ *
+ * @return the type of navigation.
+ */
+EAPI Ewk_Navigation_Type ewk_navigation_policy_navigation_type_get(const Ewk_Navigation_Policy_Decision *decision);
+
+/**
+ * Query mouse button for this navigation policy decision.
+ *
+ * @param decision navigation policy decision object to query.
+ *
+ * @return the mouse button clicked to trigger the navigation.
+ */
+EAPI Event_Mouse_Button ewk_navigation_policy_mouse_button_get(const Ewk_Navigation_Policy_Decision *decision);
+
+/**
+ * Query modifier keys for this navigation policy decision.
+ *
+ * @param decision navigation policy decision object to query.
+ *
+ * @return the modifier keys used when triggering the navigation.
+ */
+EAPI Event_Modifier_Keys ewk_navigation_policy_modifiers_get(const Ewk_Navigation_Policy_Decision *decision);
+
+/**
+ * Query frame name for this navigation policy decision.
+ *
+ * The frame name is non-null for new window policy decisions only.
+ *
+ * @param decision navigation policy decision object to query.
+ *
+ * @return the frame name pointer, that may be @c NULL. This pointer is
+ *         guaranteed to be eina_stringshare, so whenever possible
+ *         save yourself some cpu cycles and use
+ *         eina_stringshare_ref() instead of eina_stringshare_add() or
+ *         strdup().
+ */
+EAPI const char *ewk_navigation_policy_frame_name_get(const Ewk_Navigation_Policy_Decision *decision);
+
+/**
+ * Query URL request for this navigation policy decision.
+ *
+ * @param decision navigation policy decision object to query.
+ *
+ * @return The URL request pointer or @c NULL in case of error.
+ */
+EAPI Ewk_Url_Request *ewk_navigation_policy_request_get(const Ewk_Navigation_Policy_Decision *decision);
+
+/**
+ * Accepts the navigation request.
+ *
+ * The navigation will be accepted by default.
+ *
+ * @param decision navigation policy decision object to query.
+ */
+EAPI void ewk_navigation_policy_decision_accept(Ewk_Navigation_Policy_Decision *decision);
+
+/**
+ * Rejects the navigation request.
+ *
+ * @param decision navigation policy decision object to query.
+ */
+EAPI void ewk_navigation_policy_decision_reject(Ewk_Navigation_Policy_Decision *decision);
+
+/**
+ * Triggers a download instead of navigating to the url.
+ *
+ * @param decision navigation policy decision object to query.
+ */
+EAPI void ewk_navigation_policy_decision_download(Ewk_Navigation_Policy_Decision *decision);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ewk_navigation_policy_decision_h

Added: trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision_private.h (0 => 122426)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision_private.h	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_navigation_policy_decision_private.h	2012-07-12 08:35:36 UTC (rev 122426)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2012 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ewk_navigation_policy_decision_private_h
+#define ewk_navigation_policy_decision_private_h
+
+#include "WKBase.h"
+#include "WKEvent.h"
+#include "WKPageLoadTypes.h"
+
+typedef struct _Ewk_Navigation_Policy_Decision Ewk_Navigation_Policy_Decision;
+
+Ewk_Navigation_Policy_Decision* ewk_navigation_policy_decision_new(WKFrameNavigationType navigationType, WKEventMouseButton mouseButton, WKEventModifiers modifiers, WKURLRequestRef request, const char* frameName, WKFramePolicyListenerRef listener);
+
+#endif // ewk_navigation_policy_decision_private_h

Added: trunk/Source/WebKit2/UIProcess/API/efl/ewk_private.h (0 => 122426)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_private.h	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_private.h	2012-07-12 08:35:36 UTC (rev 122426)
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2012 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ewk_private_h
+#define ewk_private_h
+
+#include <wtf/Assertions.h>
+
+#define COMPILE_ASSERT_MATCHING_ENUM(ewkName, webcoreName) \
+        COMPILE_ASSERT(int(ewkName) == int(webcoreName), mismatchingEnums)
+
+#endif // ewk_private_h

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp (122425 => 122426)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp	2012-07-12 08:12:52 UTC (rev 122425)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp	2012-07-12 08:35:36 UTC (rev 122426)
@@ -32,6 +32,7 @@
 #include "ewk_context_private.h"
 #include "ewk_intent_private.h"
 #include "ewk_view_loader_client_private.h"
+#include "ewk_view_policy_client_private.h"
 #include "ewk_view_private.h"
 #include "ewk_view_resource_load_client_private.h"
 #include "ewk_web_resource.h"
@@ -499,6 +500,7 @@
 
     priv->pageClient = PageClientImpl::create(toImpl(contextRef), toImpl(pageGroupRef), ewkView);
     ewk_view_loader_client_attach(toAPI(priv->pageClient->page()), ewkView);
+    ewk_view_policy_client_attach(toAPI(priv->pageClient->page()), ewkView);
     ewk_view_resource_load_client_attach(toAPI(priv->pageClient->page()), ewkView);
 
     return ewkView;
@@ -875,6 +877,28 @@
     evas_object_smart_callback_call(ewkView, "load,provisional,started", 0);
 }
 
+/**
+ * @internal
+ * Reports that a navigation policy decision should be taken.
+ *
+ * Emits signal: "policy,decision,navigation".
+ */
+void ewk_view_navigation_policy_decision(Evas_Object* ewkView, Ewk_Navigation_Policy_Decision* decision)
+{
+    evas_object_smart_callback_call(ewkView, "policy,decision,navigation", decision);
+}
+
+/**
+ * @internal
+ * Reports that a new window policy decision should be taken.
+ *
+ * Emits signal: "policy,decision,new,window".
+ */
+void ewk_view_new_window_policy_decision(Evas_Object* ewkView, Ewk_Navigation_Policy_Decision* decision)
+{
+    evas_object_smart_callback_call(ewkView, "policy,decision,new,window", decision);
+}
+
 Eina_Bool ewk_view_html_string_load(Evas_Object* ewkView, const char* html, const char* baseUrl, const char* unreachableUrl)
 {
     EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false);

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h (122425 => 122426)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h	2012-07-12 08:12:52 UTC (rev 122425)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h	2012-07-12 08:35:36 UTC (rev 122426)
@@ -34,6 +34,8 @@
  * - "load,provisional,failed", const Ewk_Web_Error*: view provisional load failed.
  * - "load,provisional,redirect", void: view received redirect for provisional load.
  * - "load,provisional,started", void: view started provisional load.
+ * - "policy,decision,navigation", Ewk_Navigation_Policy_Decision*: a navigation policy decision should be taken.
+ * - "policy,decision,new,window", Ewk_Navigation_Policy_Decision*: a new window policy decision should be taken.
  * - "resource,request,failed", const Ewk_Web_Resource_Load_Error*: a resource failed loading.
  * - "resource,request,finished", const Ewk_Web_Resource*: a resource finished loading.
  * - "resource,request,new", const Ewk_Web_Resource_Request*: a resource request was initiated.

Added: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp (0 => 122426)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client.cpp	2012-07-12 08:35:36 UTC (rev 122426)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2012 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "WKFrame.h"
+#include "ewk_navigation_policy_decision.h"
+#include "ewk_navigation_policy_decision_private.h"
+#include "ewk_view_policy_client_private.h"
+#include "ewk_view_private.h"
+#include <wtf/text/CString.h>
+
+using namespace WebKit;
+
+static inline Evas_Object* toEwkView(const void* clientInfo)
+{
+    return static_cast<Evas_Object*>(const_cast<void*>(clientInfo));
+}
+
+static void decidePolicyForNavigationAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
+{
+    Ewk_Navigation_Policy_Decision* decision = ewk_navigation_policy_decision_new(navigationType, mouseButton, modifiers, request, 0, listener);
+    ewk_view_navigation_policy_decision(toEwkView(clientInfo), decision);
+    ewk_navigation_policy_decision_free(decision);
+}
+
+static void decidePolicyForNewWindowAction(WKPageRef page, WKFrameRef frame, WKFrameNavigationType navigationType, WKEventModifiers modifiers, WKEventMouseButton mouseButton, WKURLRequestRef request, WKStringRef frameName, WKFramePolicyListenerRef listener, WKTypeRef userData, const void* clientInfo)
+{
+    Ewk_Navigation_Policy_Decision* decision = ewk_navigation_policy_decision_new(navigationType, mouseButton, modifiers, request, toImpl(frameName)->string().utf8().data(), listener);
+    ewk_view_new_window_policy_decision(toEwkView(clientInfo), decision);
+    ewk_navigation_policy_decision_free(decision);
+}
+
+void ewk_view_policy_client_attach(WKPageRef pageRef, Evas_Object* ewkView)
+{
+    WKPagePolicyClient policyClient;
+    memset(&policyClient, 0, sizeof(WKPagePolicyClient));
+    policyClient.version = kWKPagePolicyClientCurrentVersion;
+    policyClient.clientInfo = ewkView;
+    policyClient.decidePolicyForNavigationAction = decidePolicyForNavigationAction;
+    policyClient.decidePolicyForNewWindowAction = decidePolicyForNewWindowAction;
+
+    WKPageSetPagePolicyClient(pageRef, &policyClient);
+}

Added: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client_private.h (0 => 122426)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client_private.h	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_policy_client_private.h	2012-07-12 08:35:36 UTC (rev 122426)
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2012 Intel Corporation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ewk_view_policy_client_private_h
+#define ewk_view_policy_client_private_h
+
+#include <Evas.h>
+#include <WebKit2/WKBase.h>
+
+void ewk_view_policy_client_attach(WKPageRef pageRef, Evas_Object* ewkView);
+
+#endif // ewk_view_policy_client_private_h

Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h (122425 => 122426)


--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h	2012-07-12 08:12:52 UTC (rev 122425)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h	2012-07-12 08:35:36 UTC (rev 122426)
@@ -34,6 +34,7 @@
 typedef struct _Ewk_Url_Response Ewk_Url_Response;
 typedef struct _Ewk_Web_Error Ewk_Web_Error;
 typedef struct _Ewk_Web_Resource Ewk_Web_Resource;
+typedef struct _Ewk_Navigation_Policy_Decision Ewk_Navigation_Policy_Decision;
 #if ENABLE(WEB_INTENTS)
 typedef struct _Ewk_Intent Ewk_Intent;
 #endif
@@ -49,6 +50,8 @@
 void ewk_view_load_provisional_failed(Evas_Object* ewkView, const Ewk_Web_Error* error);
 void ewk_view_load_provisional_redirect(Evas_Object* ewkView);
 void ewk_view_load_provisional_started(Evas_Object* ewkView);
+void ewk_view_navigation_policy_decision(Evas_Object* ewkView, Ewk_Navigation_Policy_Decision* decision);
+void ewk_view_new_window_policy_decision(Evas_Object* ewkView, Ewk_Navigation_Policy_Decision* decision);
 void ewk_view_title_changed(Evas_Object* ewkView, const char* title);
 void ewk_view_resource_load_failed(Evas_Object* ewkView, uint64_t resourceIdentifier, Ewk_Web_Error* error);
 void ewk_view_resource_load_finished(Evas_Object* ewkView, uint64_t resourceIdentifier);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to