• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 Collabora Ltd.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19 
20 #include "config.h"
21 
22 #include "webkitwebpolicydecision.h"
23 
24 #include "FrameLoaderTypes.h"
25 #include "webkitprivate.h"
26 
27 using namespace WebKit;
28 using namespace WebCore;
29 
30 /**
31  * SECTION:webkitwebpolicydecision
32  * @short_description: Liason between WebKit and the application regarding asynchronous policy decisions
33  *
34  * #WebKitWebPolicyDecision objects are given to the application on
35  * signal emissions that deal with policy decisions, such as if a new
36  * window should be opened, or if a given navigation should be
37  * allowed. The application uses it to tell the engine what to do.
38  */
39 
40 G_DEFINE_TYPE(WebKitWebPolicyDecision, webkit_web_policy_decision, G_TYPE_OBJECT);
41 
42 struct _WebKitWebPolicyDecisionPrivate {
43     WebKitWebFrame* frame;
44     FramePolicyFunction framePolicyFunction;
45     gboolean isCancelled;
46 };
47 
48 #define WEBKIT_WEB_POLICY_DECISION_GET_PRIVATE(obj)    (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_POLICY_DECISION, WebKitWebPolicyDecisionPrivate))
49 
webkit_web_policy_decision_class_init(WebKitWebPolicyDecisionClass * decisionClass)50 static void webkit_web_policy_decision_class_init(WebKitWebPolicyDecisionClass* decisionClass)
51 {
52     g_type_class_add_private(decisionClass, sizeof(WebKitWebPolicyDecisionPrivate));
53 }
54 
webkit_web_policy_decision_init(WebKitWebPolicyDecision * decision)55 static void webkit_web_policy_decision_init(WebKitWebPolicyDecision* decision)
56 {
57     decision->priv = WEBKIT_WEB_POLICY_DECISION_GET_PRIVATE(decision);
58 }
59 
webkit_web_policy_decision_new(WebKitWebFrame * frame,WebCore::FramePolicyFunction function)60 WebKitWebPolicyDecision* webkit_web_policy_decision_new(WebKitWebFrame* frame, WebCore::FramePolicyFunction function)
61 {
62     g_return_val_if_fail(frame, NULL);
63 
64     WebKitWebPolicyDecision* decision = WEBKIT_WEB_POLICY_DECISION(g_object_new(WEBKIT_TYPE_WEB_POLICY_DECISION, NULL));
65     WebKitWebPolicyDecisionPrivate* priv = decision->priv;
66 
67     priv->frame = frame;
68     priv->framePolicyFunction = function;
69     priv->isCancelled = FALSE;
70 
71     return decision;
72 }
73 
74 /**
75  * webkit_web_policy_decision_use
76  * @decision: a #WebKitWebPolicyDecision
77  *
78  * Will send the USE decision to the policy implementer.
79  *
80  * Since: 1.0.3
81  */
webkit_web_policy_decision_use(WebKitWebPolicyDecision * decision)82 void webkit_web_policy_decision_use(WebKitWebPolicyDecision* decision)
83 {
84     g_return_if_fail(WEBKIT_IS_WEB_POLICY_DECISION(decision));
85 
86     WebKitWebPolicyDecisionPrivate* priv = decision->priv;
87 
88     if (!priv->isCancelled)
89         (core(priv->frame)->loader()->policyChecker()->*(priv->framePolicyFunction))(WebCore::PolicyUse);
90 }
91 
92 /**
93  * webkit_web_policy_decision_ignore
94  * @decision: a #WebKitWebPolicyDecision
95  *
96  * Will send the IGNORE decision to the policy implementer.
97  *
98  * Since: 1.0.3
99  */
webkit_web_policy_decision_ignore(WebKitWebPolicyDecision * decision)100 void webkit_web_policy_decision_ignore(WebKitWebPolicyDecision* decision)
101 {
102     g_return_if_fail(WEBKIT_IS_WEB_POLICY_DECISION(decision));
103 
104     WebKitWebPolicyDecisionPrivate* priv = decision->priv;
105 
106     if (!priv->isCancelled)
107         (core(priv->frame)->loader()->policyChecker()->*(priv->framePolicyFunction))(WebCore::PolicyIgnore);
108 }
109 
110 /**
111  * webkit_web_policy_decision_download
112  * @decision: a #WebKitWebPolicyDecision
113  *
114  * Will send the DOWNLOAD decision to the policy implementer.
115  *
116  * Since: 1.0.3
117  */
webkit_web_policy_decision_download(WebKitWebPolicyDecision * decision)118 void webkit_web_policy_decision_download(WebKitWebPolicyDecision* decision)
119 {
120     g_return_if_fail(WEBKIT_IS_WEB_POLICY_DECISION(decision));
121 
122     WebKitWebPolicyDecisionPrivate* priv = decision->priv;
123 
124     if (!priv->isCancelled)
125         (core(priv->frame)->loader()->policyChecker()->*(priv->framePolicyFunction))(WebCore::PolicyDownload);
126 }
127 
webkit_web_policy_decision_cancel(WebKitWebPolicyDecision * decision)128 void webkit_web_policy_decision_cancel(WebKitWebPolicyDecision* decision)
129 {
130     g_return_if_fail(WEBKIT_IS_WEB_POLICY_DECISION(decision));
131 
132     WebKitWebPolicyDecisionPrivate* priv = decision->priv;
133 
134     priv->isCancelled = TRUE;
135 }
136