diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp index 3e9ef3fbf..ee44eaebb 100644 --- a/Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp +++ b/Source/WebKit2/UIProcess/API/gtk/WebKitPolicyDecision.cpp @@ -41,30 +41,18 @@ using namespace WebKit; * completes. To make a policy decision asynchronously, simply increment * the reference count of the #WebKitPolicyDecision object. */ -G_DEFINE_ABSTRACT_TYPE(WebKitPolicyDecision, webkit_policy_decision, G_TYPE_OBJECT) struct _WebKitPolicyDecisionPrivate { RefPtr<WebFramePolicyListenerProxy> listener; bool madePolicyDecision; }; -static void webkit_policy_decision_init(WebKitPolicyDecision* decision) -{ - decision->priv = G_TYPE_INSTANCE_GET_PRIVATE(decision, WEBKIT_TYPE_POLICY_DECISION, WebKitPolicyDecisionPrivate); - new (decision->priv) WebKitPolicyDecisionPrivate(); - decision->priv->madePolicyDecision = false; -} +WEBKIT_DEFINE_ABSTRACT_TYPE(WebKitPolicyDecision, webkit_policy_decision, G_TYPE_OBJECT) -static void webkitPolicyDecisionFinalize(GObject* object) +static void webkitPolicyDecisionDispose(GObject* object) { - WebKitPolicyDecisionPrivate* priv = WEBKIT_POLICY_DECISION(object)->priv; - - // This is the default choice for all policy decisions in WebPageProxy.cpp. - if (!priv->madePolicyDecision) - priv->listener->use(); - - priv->~WebKitPolicyDecisionPrivate(); - G_OBJECT_CLASS(webkit_policy_decision_parent_class)->finalize(object); + webkit_policy_decision_use(WEBKIT_POLICY_DECISION(object)); + G_OBJECT_CLASS(webkit_policy_decision_parent_class)->dispose(object); } void webkitPolicyDecisionSetListener(WebKitPolicyDecision* decision, WebFramePolicyListenerProxy* listener) @@ -75,8 +63,7 @@ void webkitPolicyDecisionSetListener(WebKitPolicyDecision* decision, WebFramePol static void webkit_policy_decision_class_init(WebKitPolicyDecisionClass* decisionClass) { GObjectClass* objectClass = G_OBJECT_CLASS(decisionClass); - objectClass->finalize = webkitPolicyDecisionFinalize; - g_type_class_add_private(decisionClass, sizeof(WebKitPolicyDecisionPrivate)); + objectClass->dispose = webkitPolicyDecisionDispose; } /** @@ -88,6 +75,10 @@ static void webkit_policy_decision_class_init(WebKitPolicyDecisionClass* decisio void webkit_policy_decision_use(WebKitPolicyDecision* decision) { g_return_if_fail(WEBKIT_IS_POLICY_DECISION(decision)); + + if (decision->priv->madePolicyDecision) + return; + decision->priv->listener->use(); decision->priv->madePolicyDecision = true; } @@ -102,6 +93,10 @@ void webkit_policy_decision_use(WebKitPolicyDecision* decision) void webkit_policy_decision_ignore(WebKitPolicyDecision* decision) { g_return_if_fail(WEBKIT_IS_POLICY_DECISION(decision)); + + if (decision->priv->madePolicyDecision) + return; + decision->priv->listener->ignore(); decision->priv->madePolicyDecision = true; } @@ -115,6 +110,10 @@ void webkit_policy_decision_ignore(WebKitPolicyDecision* decision) void webkit_policy_decision_download(WebKitPolicyDecision* decision) { g_return_if_fail(WEBKIT_IS_POLICY_DECISION(decision)); + + if (decision->priv->madePolicyDecision) + return; + decision->priv->listener->download(); decision->priv->madePolicyDecision = true; } |