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