[WebKit2][gtk] Fix warnings while generating documentation using gtk-doc.
[WebKit-https.git] / Source / WebKit2 / UIProcess / API / gtk / WebKitWebView.cpp
1 /*
2  * Copyright (C) 2011 Igalia S.L.
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 #include "WebKitWebView.h"
22
23 #include "WebKitWebContextPrivate.h"
24 #include "WebKitWebLoaderClient.h"
25 #include "WebKitWebViewBasePrivate.h"
26 #include "WebKitPrivate.h"
27 #include "WebPageProxy.h"
28 #include <WebKit2/WKBase.h>
29 #include <WebKit2/WKURL.h>
30 #include <wtf/gobject/GRefPtr.h>
31 #include <wtf/text/CString.h>
32
33 using namespace WebKit;
34 using namespace WebCore;
35
36 enum {
37     PROP_0,
38
39     PROP_WEB_CONTEXT
40 };
41
42 struct _WebKitWebViewPrivate {
43     WebKitWebContext* context;
44
45     GRefPtr<WebKitWebLoaderClient> loaderClient;
46 };
47
48 G_DEFINE_TYPE(WebKitWebView, webkit_web_view, WEBKIT_TYPE_WEB_VIEW_BASE)
49
50 static void webkitWebViewConstructed(GObject* object)
51 {
52     WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
53     WebKitWebViewPrivate* priv = webView->priv;
54
55     webkitWebViewBaseCreateWebPage(WEBKIT_WEB_VIEW_BASE(webView), webkitWebContextGetWKContext(priv->context), 0);
56
57     priv->loaderClient = adoptGRef(WEBKIT_WEB_LOADER_CLIENT(g_object_new(WEBKIT_TYPE_WEB_LOADER_CLIENT, "web-view", webView, NULL)));
58 }
59
60 static void webkitWebViewSetProperty(GObject* object, guint propId, const GValue* value, GParamSpec* paramSpec)
61 {
62     WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
63
64     switch (propId) {
65     case PROP_WEB_CONTEXT:
66         webView->priv->context = WEBKIT_WEB_CONTEXT(g_value_get_object(value));
67         break;
68     default:
69         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
70     }
71 }
72
73 static void webkitWebViewGetProperty(GObject* object, guint propId, GValue* value, GParamSpec* paramSpec)
74 {
75     WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
76
77     switch (propId) {
78     case PROP_WEB_CONTEXT:
79         g_value_take_object(value, webView->priv->context);
80         break;
81     default:
82         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
83     }
84 }
85
86 static void webkitWebViewFinalize(GObject* object)
87 {
88     WEBKIT_WEB_VIEW(object)->priv->~WebKitWebViewPrivate();
89     G_OBJECT_CLASS(webkit_web_view_parent_class)->finalize(object);
90 }
91
92 static void webkit_web_view_init(WebKitWebView* webView)
93 {
94     WebKitWebViewPrivate* priv = G_TYPE_INSTANCE_GET_PRIVATE(webView, WEBKIT_TYPE_WEB_VIEW, WebKitWebViewPrivate);
95     webView->priv = priv;
96     new (priv) WebKitWebViewPrivate();
97 }
98
99 static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
100 {
101     GObjectClass* gObjectClass = G_OBJECT_CLASS(webViewClass);
102
103     gObjectClass->constructed = webkitWebViewConstructed;
104     gObjectClass->set_property = webkitWebViewSetProperty;
105     gObjectClass->get_property = webkitWebViewGetProperty;
106     gObjectClass->finalize = webkitWebViewFinalize;
107
108     g_type_class_add_private(webViewClass, sizeof(WebKitWebViewPrivate));
109
110     /**
111      * WebKitWebView:web-context:
112      *
113      * The #WebKitWebContext of the view.
114      */
115     g_object_class_install_property(gObjectClass,
116                                     PROP_WEB_CONTEXT,
117                                     g_param_spec_object("web-context",
118                                                         "Web Context",
119                                                         "The web context for the view",
120                                                         WEBKIT_TYPE_WEB_CONTEXT,
121                                                         static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
122 }
123
124 // Public API.
125
126 /**
127  * webkit_web_view_new:
128  *
129  * Creates a new #WebKitWebView with the default #WebKitWebContext.
130  * See also webkit_web_view_new_with_context().
131  *
132  * Returns: The newly created #WebKitWebView widget
133  */
134 GtkWidget* webkit_web_view_new()
135 {
136     return webkit_web_view_new_with_context(webkit_web_context_get_default());
137 }
138
139 /**
140  * webkit_web_view_new_with_context:
141  * @context: the #WebKitWebContext to be used by the #WebKitWebView
142  *
143  * Creates a new #WebKitWebView with the given #WebKitWebContext.
144  *
145  * Returns: The newly created #WebKitWebView widget
146  */
147 GtkWidget* webkit_web_view_new_with_context(WebKitWebContext* context)
148 {
149     g_return_val_if_fail(WEBKIT_IS_WEB_CONTEXT(context), 0);
150
151     return GTK_WIDGET(g_object_new(WEBKIT_TYPE_WEB_VIEW, "web-context", context, NULL));
152 }
153
154 /**
155  * webkit_web_view_get_context:
156  * @web_view: a #WebKitWebView
157  *
158  * Gets the web context of @web_view.
159  *
160  * Returns: (transfer none): the #WebKitWebContext of the view
161  */
162 WebKitWebContext* webkit_web_view_get_context(WebKitWebView *webView)
163 {
164     g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
165
166     return webView->priv->context;
167 }
168
169 /**
170  * webkit_web_view_get_loader_client:
171  * @web_view: a #WebKitWebView
172  *
173  * Returns the #WebKitWebLoaderClient of @web_view. You can use it
174  * to monitor the status of load operations happening on @web_view.
175  *
176  * Returns: (transfer none): the #WebKitWebLoaderClient of @web_view.
177  */
178 WebKitWebLoaderClient* webkit_web_view_get_loader_client(WebKitWebView* webView)
179 {
180     g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
181
182     return webView->priv->loaderClient.get();
183 }
184
185 /**
186  * webkit_web_view_set_loader_client:
187  * @web_view: a #WebKitWebView
188  * @loader_client: a #WebKitWebLoaderClient
189  *
190  * Sets the #WebKitWebLoaderClient that the view will use during
191  * load operations.
192  */
193 void webkit_web_view_set_loader_client(WebKitWebView* webView, WebKitWebLoaderClient* loaderClient)
194 {
195     g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
196     g_return_if_fail(WEBKIT_IS_WEB_LOADER_CLIENT(loaderClient));
197
198     WebKitWebViewPrivate* priv = webView->priv;
199     if (priv->loaderClient.get() == loaderClient)
200         return;
201
202     priv->loaderClient = loaderClient;
203 }
204
205 /**
206  * webkit_web_view_load_uri:
207  * @web_view: a #WebKitWebView
208  * @uri: an URI string
209  *
210  * Requests loading of the specified URI string.
211  * You can monitor the status of the load operation using the
212  * #WebKitWebLoaderClient of @web_view. See webkit_web_view_get_loader_client().
213  */
214 void webkit_web_view_load_uri(WebKitWebView* webView, const gchar* uri)
215 {
216     g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
217     g_return_if_fail(uri);
218
219     WKURLRef url = WKURLCreateWithUTF8CString(uri);
220     WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
221     WKPageLoadURL(toAPI(page), url);
222     WKRelease(url);
223 }
224
225 /**
226  * webkit_web_view_go_back:
227  * @web_view: a #WebKitWebView
228  *
229  * Loads the previous history item.
230  * You can monitor the status of the load operation using the
231  * #WebKitWebLoaderClient of @web_view. See webkit_web_view_get_loader_client().
232  */
233 void webkit_web_view_go_back(WebKitWebView* webView)
234 {
235     g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
236
237     WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
238     WKPageGoBack(toAPI(page));
239 }
240
241 /**
242  * webkit_web_view_go_forward:
243  * @web_view: a #WebKitWebView
244  *
245  * Loads the next history item.
246  * You can monitor the status of the load operation using the
247  * #WebKitWebLoaderClient of @web_view. See webkit_web_view_get_loader_client().
248  */
249 void webkit_web_view_go_forward(WebKitWebView* webView)
250 {
251     g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
252
253     WebPageProxy* page = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(webView));
254     WKPageGoForward(toAPI(page));
255 }