summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp')
-rw-r--r--Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp381
1 files changed, 381 insertions, 0 deletions
diff --git a/Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp b/Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp
new file mode 100644
index 0000000..9f13f28
--- /dev/null
+++ b/Source/WebKit/gtk/webkit/webkitwebnavigationaction.cpp
@@ -0,0 +1,381 @@
+/*
+ * Copyright (C) 2008 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "webkitwebnavigationaction.h"
+
+#include "FrameLoaderTypes.h"
+#include "webkitenumtypes.h"
+#include "webkitglobalsprivate.h"
+#include <glib/gi18n-lib.h>
+#include <string.h>
+#include <wtf/Assertions.h>
+
+static void webkit_web_navigation_action_set_target_frame(WebKitWebNavigationAction* navigationAction, const gchar* targetFrame);
+
+/**
+ * SECTION:webkitwebnavigationaction
+ * @short_description: Object used to report details of navigation actions
+ *
+ * #WebKitWebNavigationAction is used in signals to provide details about
+ * what led the navigation to happen. This includes, for instance, if the user
+ * clicked a link to start that navigation, and what mouse button was used.
+ */
+
+struct _WebKitWebNavigationActionPrivate {
+ WebKitWebNavigationReason reason;
+ gchar* originalUri;
+ gint button;
+ gint modifier_state;
+ gchar* targetFrame;
+};
+
+enum {
+ PROP_0,
+
+ PROP_REASON,
+ PROP_ORIGINAL_URI,
+ PROP_BUTTON,
+ PROP_MODIFIER_STATE,
+ PROP_TARGET_FRAME
+};
+
+G_DEFINE_TYPE(WebKitWebNavigationAction, webkit_web_navigation_action, G_TYPE_OBJECT)
+
+
+static void webkit_web_navigation_action_get_property(GObject* object, guint propertyId, GValue* value, GParamSpec* pspec)
+{
+ WebKitWebNavigationAction* navigationAction = WEBKIT_WEB_NAVIGATION_ACTION(object);
+
+ switch(propertyId) {
+ case PROP_REASON:
+ g_value_set_enum(value, webkit_web_navigation_action_get_reason(navigationAction));
+ break;
+ case PROP_ORIGINAL_URI:
+ g_value_set_string(value, webkit_web_navigation_action_get_original_uri(navigationAction));
+ break;
+ case PROP_BUTTON:
+ g_value_set_int(value, webkit_web_navigation_action_get_button(navigationAction));
+ break;
+ case PROP_MODIFIER_STATE:
+ g_value_set_int(value, webkit_web_navigation_action_get_modifier_state(navigationAction));
+ break;
+ case PROP_TARGET_FRAME:
+ g_value_set_string(value, webkit_web_navigation_action_get_target_frame(navigationAction));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyId, pspec);
+ break;
+ }
+}
+
+static void webkit_web_navigation_action_set_property(GObject* object, guint propertyId, const GValue* value, GParamSpec* pspec)
+{
+ WebKitWebNavigationAction* navigationAction = WEBKIT_WEB_NAVIGATION_ACTION(object);
+ WebKitWebNavigationActionPrivate* priv = navigationAction->priv;
+
+ switch(propertyId) {
+ case PROP_REASON:
+ webkit_web_navigation_action_set_reason(navigationAction, (WebKitWebNavigationReason)g_value_get_enum(value));
+ break;
+ case PROP_ORIGINAL_URI:
+ webkit_web_navigation_action_set_original_uri(navigationAction, g_value_get_string(value));
+ break;
+ case PROP_BUTTON:
+ priv->button = g_value_get_int(value);
+ break;
+ case PROP_MODIFIER_STATE:
+ priv->modifier_state = g_value_get_int(value);
+ break;
+ case PROP_TARGET_FRAME:
+ webkit_web_navigation_action_set_target_frame(navigationAction, g_value_get_string(value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propertyId, pspec);
+ break;
+ }
+}
+
+static void webkit_web_navigation_action_init(WebKitWebNavigationAction* navigationAction)
+{
+ navigationAction->priv = G_TYPE_INSTANCE_GET_PRIVATE(navigationAction, WEBKIT_TYPE_WEB_NAVIGATION_ACTION, WebKitWebNavigationActionPrivate);
+}
+
+static void webkit_web_navigation_action_finalize(GObject* obj)
+{
+ WebKitWebNavigationAction* navigationAction = WEBKIT_WEB_NAVIGATION_ACTION(obj);
+ WebKitWebNavigationActionPrivate* priv = navigationAction->priv;
+
+ g_free(priv->originalUri);
+
+ G_OBJECT_CLASS(webkit_web_navigation_action_parent_class)->finalize(obj);
+}
+
+static void webkit_web_navigation_action_class_init(WebKitWebNavigationActionClass* requestClass)
+{
+ GObjectClass* objectClass = G_OBJECT_CLASS(requestClass);
+
+ COMPILE_ASSERT(static_cast<int>(WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED) == static_cast<int>(WebCore::NavigationTypeLinkClicked), navigation_type_link_clicked_enum_match);
+ COMPILE_ASSERT(static_cast<int>(WEBKIT_WEB_NAVIGATION_REASON_FORM_SUBMITTED) == static_cast<int>(WebCore::NavigationTypeFormSubmitted), navigation_type_form_submitted_enum_match);
+ COMPILE_ASSERT(static_cast<int>(WEBKIT_WEB_NAVIGATION_REASON_BACK_FORWARD) == static_cast<int>(WebCore::NavigationTypeBackForward), navigation_type_back_forward_enum_match);
+ COMPILE_ASSERT(static_cast<int>(WEBKIT_WEB_NAVIGATION_REASON_RELOAD) == static_cast<int>(WebCore::NavigationTypeReload), navigation_type_reload_enum_match);
+ COMPILE_ASSERT(static_cast<int>(WEBKIT_WEB_NAVIGATION_REASON_FORM_RESUBMITTED) == static_cast<int>(WebCore::NavigationTypeFormResubmitted), navigation_type_form_resubmitted_enum_match);
+ COMPILE_ASSERT(static_cast<int>(WEBKIT_WEB_NAVIGATION_REASON_OTHER) == static_cast<int>(WebCore::NavigationTypeOther), navigation_type_other_enum_match);
+
+ objectClass->get_property = webkit_web_navigation_action_get_property;
+ objectClass->set_property = webkit_web_navigation_action_set_property;
+ objectClass->dispose = webkit_web_navigation_action_finalize;
+
+ /**
+ * WebKitWebNavigationAction:reason:
+ *
+ * The reason why this navigation is occuring.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(objectClass, PROP_REASON,
+ g_param_spec_enum("reason",
+ _("Reason"),
+ _("The reason why this navigation is occurring"),
+ WEBKIT_TYPE_WEB_NAVIGATION_REASON,
+ WEBKIT_WEB_NAVIGATION_REASON_OTHER,
+ (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT)));
+
+ /**
+ * WebKitWebNavigationAction:original-uri:
+ *
+ * The URI that was requested as the target for the navigation.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(objectClass, PROP_ORIGINAL_URI,
+ g_param_spec_string("original-uri",
+ _("Original URI"),
+ _("The URI that was requested as the target for the navigation"),
+ "",
+ (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT)));
+ /**
+ * WebKitWebNavigationAction:button:
+ *
+ * The GTK+ identifier for the mouse button used to click. Notice that GTK+ button values
+ * are 1, 2 and 3 for left, middle and right buttons, so they are DOM button values +1. If the action was not
+ * initiated by a mouse click the value will be -1.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(objectClass, PROP_BUTTON,
+ g_param_spec_int("button",
+ _("Button"),
+ _("The button used to click"),
+ -1,
+ G_MAXINT,
+ -1,
+ (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+ /**
+ * WebKitWebNavigationAction:modifier-state:
+ *
+ * The state of the modifier keys when the action was requested.
+ *
+ * Since: 1.0.3
+ */
+ g_object_class_install_property(objectClass, PROP_MODIFIER_STATE,
+ g_param_spec_int("modifier-state",
+ _("Modifier state"),
+ _("A bitmask representing the state of the modifier keys"),
+ 0,
+ G_MAXINT,
+ 0,
+ (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+ /**
+ * WebKitWebNavigationAction:target-frame:
+ *
+ * The target frame for the navigation.
+ *
+ * Since: 1.1.13
+ */
+ g_object_class_install_property(objectClass, PROP_TARGET_FRAME,
+ g_param_spec_string("target-frame",
+ _("Target frame"),
+ _("The target frame for the navigation"),
+ NULL,
+ (GParamFlags)(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+
+
+
+ g_type_class_add_private(requestClass, sizeof(WebKitWebNavigationActionPrivate));
+}
+
+/**
+ * webkit_web_navigation_action_get_reason:
+ * @navigationAction: a #WebKitWebNavigationAction
+ *
+ * Returns the reason why WebKit is requesting a navigation.
+ *
+ * Return value: a #WebKitWebNavigationReason
+ *
+ * Since: 1.0.3
+ */
+WebKitWebNavigationReason webkit_web_navigation_action_get_reason(WebKitWebNavigationAction* navigationAction)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction), WEBKIT_WEB_NAVIGATION_REASON_OTHER);
+
+ return navigationAction->priv->reason;
+}
+
+/**
+ * webkit_web_navigation_action_set_reason:
+ * @navigationAction: a #WebKitWebNavigationAction
+ * @reason: a #WebKitWebNavigationReason
+ *
+ * Sets the reason why WebKit is requesting a navigation.
+ *
+ * Since: 1.0.3
+ */
+void webkit_web_navigation_action_set_reason(WebKitWebNavigationAction* navigationAction, WebKitWebNavigationReason reason)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction));
+
+ if (navigationAction->priv->reason == reason)
+ return;
+
+ navigationAction->priv->reason = reason;
+ g_object_notify(G_OBJECT(navigationAction), "reason");
+}
+
+/**
+ * webkit_web_navigation_action_get_original_uri:
+ * @navigationAction: a #WebKitWebNavigationAction
+ *
+ * Returns the URI that was originally requested. This may differ from the
+ * navigation target, for instance because of a redirect.
+ *
+ * Return value: the originally requested URI
+ *
+ * Since: 1.0.3
+ */
+const gchar* webkit_web_navigation_action_get_original_uri(WebKitWebNavigationAction* navigationAction)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction), NULL);
+
+ return navigationAction->priv->originalUri;
+}
+
+/**
+ * webkit_web_navigation_action_set_original_uri:
+ * @navigationAction: a #WebKitWebNavigationAction
+ * @originalUri: a URI
+ *
+ * Sets the URI that was originally requested. This may differ from the
+ * navigation target, for instance because of a redirect.
+ *
+ * Since: 1.0.3
+ */
+void webkit_web_navigation_action_set_original_uri(WebKitWebNavigationAction* navigationAction, const gchar* originalUri)
+{
+ g_return_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction));
+ g_return_if_fail(originalUri);
+
+ if (navigationAction->priv->originalUri &&
+ (!strcmp(navigationAction->priv->originalUri, originalUri)))
+ return;
+
+ g_free(navigationAction->priv->originalUri);
+ navigationAction->priv->originalUri = g_strdup(originalUri);
+ g_object_notify(G_OBJECT(navigationAction), "original-uri");
+}
+
+/**
+ * webkit_web_navigation_action_get_button:
+ * @navigationAction: a #WebKitWebNavigationAction
+ *
+ * The GTK+ identifier for the mouse button used to click. Notice that GTK+ button values
+ * are 1, 2 and 3 for left, middle and right buttons, so they are DOM button values +1. If the action was not
+ * initiated by a mouse click the value will be -1.
+ *
+ * Return value: the mouse button used to click
+ *
+ * Since: 1.0.3
+ */
+gint webkit_web_navigation_action_get_button(WebKitWebNavigationAction* navigationAction)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction), -1);
+
+ return navigationAction->priv->button;
+}
+
+/**
+ * webkit_web_navigation_action_get_modifier_state:
+ * @navigationAction: a #WebKitWebNavigationAction
+ *
+ * Returns a bitmask with the the state of the modifier keys.
+ *
+ * Return value: a bitmask with the state of the modifier keys
+ *
+ * Since: 1.0.3
+ */
+gint webkit_web_navigation_action_get_modifier_state(WebKitWebNavigationAction* navigationAction)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction), 0);
+
+ return navigationAction->priv->modifier_state;
+}
+
+/**
+ * webkit_web_navigation_action_get_target_frame:
+ * @navigationAction: a #WebKitWebNavigationAction
+ *
+ * Returns the target frame of the action.
+ *
+ * Return value: the target frame of the action or NULL
+ * if there is no target.
+ *
+ * Since: 1.1.13
+ */
+G_CONST_RETURN gchar* webkit_web_navigation_action_get_target_frame(WebKitWebNavigationAction* navigationAction)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_NAVIGATION_ACTION(navigationAction), NULL);
+
+ return navigationAction->priv->targetFrame;
+}
+
+static void webkit_web_navigation_action_set_target_frame(WebKitWebNavigationAction* navigationAction, const gchar* targetFrame)
+{
+ if (!g_strcmp0(navigationAction->priv->targetFrame, targetFrame))
+ return;
+
+ g_free(navigationAction->priv->targetFrame);
+ navigationAction->priv->targetFrame = g_strdup(targetFrame);
+ g_object_notify(G_OBJECT(navigationAction), "target-frame");
+}
+
+namespace WebKit {
+
+WebKitWebNavigationReason kit(WebCore::NavigationType type)
+{
+ return (WebKitWebNavigationReason)type;
+}
+
+WebCore::NavigationType core(WebKitWebNavigationReason type)
+{
+ return static_cast<WebCore::NavigationType>(type);
+}
+
+}