2010-03-02 Arno Renevier <arno@renevier.net>
[WebKit-https.git] / WebKit / gtk / webkit / webkitprivate.h
1 /*
2  * Copyright (C) 2007, 2008, 2009 Holger Hans Peter Freyther
3  * Copyright (C) 2008 Jan Michael C. Alonzo
4  * Copyright (C) 2008 Collabora Ltd.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB.  If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  */
21
22 #ifndef webkitprivate_h
23 #define webkitprivate_h
24
25 /*
26  * This file knows the shared secret of WebKitWebView, WebKitWebFrame,
27  * and WebKitNetworkRequest.
28  * They are using WebCore which musn't be exposed to the outer world.
29  */
30
31 #include <webkit/webkitdefines.h>
32 #include <webkit/webkitdownload.h>
33 #include <webkit/webkithittestresult.h>
34 #include <webkit/webkitnetworkrequest.h>
35 #include <webkit/webkitwebview.h>
36 #include <webkit/webkitwebdatasource.h>
37 #include <webkit/webkitwebframe.h>
38 #include <webkit/webkitwebpolicydecision.h>
39 #include <webkit/webkitwebnavigationaction.h>
40 #include <webkit/webkitwebresource.h>
41 #include <webkit/webkitwebsettings.h>
42 #include <webkit/webkitwebwindowfeatures.h>
43 #include <webkit/webkitwebbackforwardlist.h>
44 #include <webkit/webkitnetworkrequest.h>
45 #include <webkit/webkitsecurityorigin.h>
46
47 #include "ArchiveResource.h"
48 #include "BackForwardList.h"
49 #include "CString.h"
50 #include <enchant.h>
51 #include "GOwnPtr.h"
52 #include "Geolocation.h"
53 #include "HistoryItem.h"
54 #include "Settings.h"
55 #include "Page.h"
56 #include "Frame.h"
57 #include "InspectorClientGtk.h"
58 #include "FrameLoaderClient.h"
59 #include "ResourceHandle.h"
60 #include "ResourceRequest.h"
61 #include "ResourceResponse.h"
62 #include "WindowFeatures.h"
63 #include "SecurityOrigin.h"
64
65 #include <atk/atk.h>
66 #include <glib.h>
67 #include <libsoup/soup.h>
68
69 class DownloadClient;
70
71 namespace WebKit {
72
73     class DocumentLoader;
74     class PasteboardHelperGtk;
75
76     WebKitWebView* getViewFromFrame(WebKitWebFrame*);
77
78     WebCore::Frame* core(WebKitWebFrame*);
79     WebKitWebFrame* kit(WebCore::Frame*);
80
81     WebCore::Page* core(WebKitWebView*);
82     WebKitWebView* kit(WebCore::Page*);
83
84     WebCore::HistoryItem* core(WebKitWebHistoryItem*);
85     WebKitWebHistoryItem* kit(PassRefPtr<WebCore::HistoryItem>);
86
87     WebCore::BackForwardList* core(WebKitWebBackForwardList*);
88
89     WebKitWebNavigationReason kit(WebCore::NavigationType type);
90     WebCore::NavigationType core(WebKitWebNavigationReason reason);
91
92     WebCore::ResourceRequest core(WebKitNetworkRequest* request);
93
94     WebCore::ResourceResponse core(WebKitNetworkResponse* response);
95
96     WebCore::EditingBehavior core(WebKitEditingBehavior type);
97
98     WebKitSecurityOrigin* kit(WebCore::SecurityOrigin*);
99     WebCore::SecurityOrigin* core(WebKitSecurityOrigin*);
100
101     WebKitHitTestResult* kit(const WebCore::HitTestResult&);
102
103     WebKit::PasteboardHelperGtk* pasteboardHelperInstance();
104 }
105
106 extern "C" {
107     void webkit_init();
108
109 #define WEBKIT_PARAM_READABLE ((GParamFlags)(G_PARAM_READABLE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB))
110 #define WEBKIT_PARAM_READWRITE ((GParamFlags)(G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB))
111
112     #define WEBKIT_WEB_VIEW_GET_PRIVATE(obj)    (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_VIEW, WebKitWebViewPrivate))
113     typedef struct _WebKitWebViewPrivate WebKitWebViewPrivate;
114     struct _WebKitWebViewPrivate {
115         WebCore::Page* corePage;
116         WebKitWebSettings* webSettings;
117         WebKitWebInspector* webInspector;
118         WebKitWebWindowFeatures* webWindowFeatures;
119
120         WebKitWebFrame* mainFrame;
121         WebKitWebBackForwardList* backForwardList;
122
123         GtkMenu* currentMenu;
124         gint lastPopupXPosition;
125         gint lastPopupYPosition;
126
127         HashSet<GtkWidget*> children;
128         bool editable;
129         GtkIMContext* imContext;
130
131         gboolean transparent;
132
133         GtkAdjustment* horizontalAdjustment;
134         GtkAdjustment* verticalAdjustment;
135
136         gboolean zoomFullContent;
137         WebKitLoadStatus loadStatus;
138         char* encoding;
139         char* customEncoding;
140
141         char* iconURI;
142
143         gboolean disposing;
144         gboolean usePrimaryForPaste;
145
146         // These are hosted here because the DataSource object is
147         // created too late in the frame loading process.
148         WebKitWebResource* mainResource;
149         char* mainResourceIdentifier;
150         GHashTable* subResources;
151         char* tooltipText;
152     };
153
154     #define WEBKIT_WEB_FRAME_GET_PRIVATE(obj)    (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_FRAME, WebKitWebFramePrivate))
155     typedef struct _WebKitWebFramePrivate WebKitWebFramePrivate;
156     struct _WebKitWebFramePrivate {
157         WebCore::Frame* coreFrame;
158         WebKitWebView* webView;
159
160         gchar* name;
161         gchar* title;
162         gchar* uri;
163         WebKitLoadStatus loadStatus;
164         WebKitSecurityOrigin* origin;
165     };
166
167 #define WEBKIT_SECURITY_ORIGIN_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_SECURITY_ORIGIN, WebKitSecurityOriginPrivate))
168     struct _WebKitSecurityOriginPrivate {
169         RefPtr<WebCore::SecurityOrigin> coreOrigin;
170         gchar* protocol;
171         gchar* host;
172         GHashTable* webDatabases;
173
174         gboolean disposed;
175     };
176
177     PassRefPtr<WebCore::Frame>
178     webkit_web_frame_init_with_web_view(WebKitWebView*, WebCore::HTMLFrameOwnerElement*);
179
180     void
181     webkit_web_frame_core_frame_gone(WebKitWebFrame*);
182
183     // WebKitWebHistoryItem private
184     WebKitWebHistoryItem*
185     webkit_web_history_item_new_with_core_item(PassRefPtr<WebCore::HistoryItem> historyItem);
186
187     WEBKIT_API G_CONST_RETURN gchar*
188     webkit_web_history_item_get_target(WebKitWebHistoryItem*);
189
190     WEBKIT_API gboolean
191     webkit_web_history_item_is_target_item(WebKitWebHistoryItem*);
192
193     WEBKIT_API GList*
194     webkit_web_history_item_get_children(WebKitWebHistoryItem*);
195     // end WebKitWebHistoryItem private
196
197     // WebKitWebResource private
198     #define WEBKIT_WEB_RESOURCE_GET_PRIVATE(obj)        (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_RESOURCE, WebKitWebResourcePrivate))
199     struct _WebKitWebResourcePrivate {
200         WebCore::ArchiveResource* resource;
201
202         gchar* uri;
203         gchar* mimeType;
204         gchar* textEncoding;
205         gchar* frameName;
206
207         GString* data;
208     };
209     WebKitWebResource*
210     webkit_web_resource_new_with_core_resource(PassRefPtr<WebCore::ArchiveResource>);
211
212     void
213     webkit_web_resource_init_with_core_resource(WebKitWebResource*, PassRefPtr<WebCore::ArchiveResource>);
214
215     // end WebKitWebResource private
216
217     void
218     webkit_web_inspector_set_inspector_client(WebKitWebInspector*, WebCore::Page*);
219
220     void
221     webkit_web_inspector_set_web_view(WebKitWebInspector *web_inspector, WebKitWebView *web_view);
222
223     void
224     webkit_web_inspector_set_inspected_uri(WebKitWebInspector* web_inspector, const gchar* inspected_uri);
225
226     WEBKIT_API void
227     webkit_web_inspector_execute_script(WebKitWebInspector* inspector, long callId, const gchar* script);
228
229
230     WebKitWebWindowFeatures*
231     webkit_web_window_features_new_from_core_features (const WebCore::WindowFeatures& features);
232
233     void
234     webkit_web_view_notify_ready (WebKitWebView* web_view);
235
236     void
237     webkit_web_view_request_download(WebKitWebView* web_view, WebKitNetworkRequest* request, const WebCore::ResourceResponse& response = WebCore::ResourceResponse(), WebCore::ResourceHandle* handle = 0);
238
239     void
240     webkit_web_view_add_resource(WebKitWebView*, char*, WebKitWebResource*);
241
242     WebKitWebResource*
243     webkit_web_view_get_resource(WebKitWebView*, char*);
244
245     WebKitWebResource*
246     webkit_web_view_get_main_resource(WebKitWebView*);
247
248     void
249     webkit_web_view_clear_resources(WebKitWebView*);
250
251     GList*
252     webkit_web_view_get_subresources(WebKitWebView*);
253
254     void
255     webkit_web_view_set_tooltip_text(WebKitWebView*, const char*);
256
257     WebKitDownload*
258     webkit_download_new_with_handle(WebKitNetworkRequest* request, WebCore::ResourceHandle* handle, const WebCore::ResourceResponse& response);
259
260     void
261     webkit_download_set_suggested_filename(WebKitDownload* download, const gchar* suggestedFilename);
262
263     WebKitWebPolicyDecision*
264     webkit_web_policy_decision_new (WebKitWebFrame*, WebCore::FramePolicyFunction);
265
266     void
267     webkit_web_policy_decision_cancel (WebKitWebPolicyDecision* decision);
268
269     WebKitNetworkRequest*
270     webkit_network_request_new_with_core_request(const WebCore::ResourceRequest& resourceRequest);
271
272     WebKitNetworkResponse*
273     webkit_network_response_new_with_core_response(const WebCore::ResourceResponse& resourceResponse);
274
275     WebKitGeolocationPolicyDecision*
276     webkit_geolocation_policy_decision_new(WebKitWebFrame*, WebCore::Geolocation*);
277
278     // FIXME: move this to webkitnetworkrequest.h once the API is agreed upon.
279     WEBKIT_API SoupMessage*
280     webkit_network_request_get_message(WebKitNetworkRequest* request);
281
282     // FIXME: move this functionality into a 'WebKitWebDataSource' once implemented
283     WEBKIT_API gchar*
284     webkit_web_frame_get_response_mime_type(WebKitWebFrame* frame);
285
286     // FIXME: Move these to webkitwebframe.h once their API has been discussed.
287
288     WEBKIT_API GSList*
289     webkit_web_frame_get_children (WebKitWebFrame* frame);
290
291     WEBKIT_API gchar*
292     webkit_web_frame_get_inner_text (WebKitWebFrame* frame);
293
294     WEBKIT_API gchar*
295     webkit_web_frame_dump_render_tree (WebKitWebFrame* frame);
296
297     WEBKIT_API gchar*
298     webkit_web_frame_counter_value_for_element_by_id (WebKitWebFrame* frame, const gchar* id);
299
300     WEBKIT_API int
301     webkit_web_frame_page_number_for_element_by_id(WebKitWebFrame* frame, const gchar* id, float pageWidth, float pageHeight);
302
303     WEBKIT_API int
304     webkit_web_frame_number_of_pages(WebKitWebFrame* frame, float pageWidth, float pageHeight);
305
306     WEBKIT_API guint
307     webkit_web_frame_get_pending_unload_event_count(WebKitWebFrame* frame);
308
309     WEBKIT_API bool
310     webkit_web_frame_pause_animation(WebKitWebFrame* frame, const gchar* name, double time, const gchar* element);
311
312     WEBKIT_API bool
313     webkit_web_frame_pause_transition(WebKitWebFrame* frame, const gchar* name, double time, const gchar* element);
314
315     WEBKIT_API bool
316     webkit_web_frame_pause_svg_animation(WebKitWebFrame* frame, const gchar* animationId, double time, const gchar* elementId);
317
318     WEBKIT_API unsigned int
319     webkit_web_frame_number_of_active_animations(WebKitWebFrame* frame);
320
321     WEBKIT_API void
322     webkit_web_frame_clear_main_frame_name(WebKitWebFrame* frame);
323
324     WEBKIT_API AtkObject*
325     webkit_web_frame_get_focused_accessible_element(WebKitWebFrame* frame);
326
327     WEBKIT_API gchar*
328     webkit_web_view_get_selected_text (WebKitWebView* web_view);
329
330     WEBKIT_API void
331     webkit_web_view_set_group_name(WebKitWebView* web_view, const gchar* group_name);
332
333     WEBKIT_API void
334     webkit_web_settings_add_extra_plugin_directory (WebKitWebView *web_view, const gchar* directory);
335
336     GSList*
337     webkit_web_settings_get_enchant_dicts(WebKitWebView* web_view);
338
339     bool
340     webkit_web_view_use_primary_for_paste(WebKitWebView* web_view);
341
342     GHashTable*
343     webkit_history_items(void);
344
345     WEBKIT_API void
346     webkit_gc_collect_javascript_objects();
347
348     WEBKIT_API void
349     webkit_gc_collect_javascript_objects_on_alternate_thread(gboolean waitUntilDone);
350
351     WEBKIT_API gsize
352     webkit_gc_count_javascript_objects();
353
354     WEBKIT_API void
355     webkit_application_cache_set_maximum_size(unsigned long long size);
356
357     WEBKIT_API unsigned int
358     webkit_worker_thread_count();
359     
360     WEBKIT_API void
361     webkit_white_list_access_from_origin(const gchar* sourceOrigin, const gchar* destinationProtocol, const gchar* destinationHost, bool allowDestinationSubdomains);
362     
363     WEBKIT_API void
364     webkit_reset_origin_access_white_lists();
365
366     // WebKitWebDataSource private
367     WebKitWebDataSource*
368     webkit_web_data_source_new_with_loader(PassRefPtr<WebKit::DocumentLoader>);
369
370     WEBKIT_API WebKitWebDatabase *
371     webkit_security_origin_get_web_database(WebKitSecurityOrigin* securityOrigin, const char* databaseName);
372
373     WEBKIT_API void
374     webkit_web_frame_layout(WebKitWebFrame* frame);
375 }
376
377 namespace WTF {
378     template <> void freeOwnedGPtr<SoupMessage>(SoupMessage*);
379     template <> void freeOwnedGPtr<WebKitNetworkRequest>(WebKitNetworkRequest*);
380     template <> void freeOwnedGPtr<WebKitNetworkResponse>(WebKitNetworkResponse*);
381     template <> void freeOwnedGPtr<WebKitWebResource>(WebKitWebResource*);
382 }
383
384 #endif